debugging php脚本是执行多次每个浏览器请求

fafcakar  于 2023-01-31  发布在  PHP
关注(0)|答案(3)|浏览(190)

我在apache有一个虚拟主机。我在ubuntu10.04上使用LAMP。

<VirtualHost *:80>
DocumentRoot /home/username/websites/site_folder
ServerName www.site_folder.com
ServerAlias site_folder.com
    <Directory /home/username/websites/site_folder/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

我在/etc/hosts中添加了以下行:

127.0.0.1 site_folder.com

在vhost的文件夹中,我添加了一个名为one.php的php脚本,代码如下:

<?php
$today = getdate();
$handle = fopen("logs/logs.txt", "a");
fwrite($handle, $today['mday'].'/'.$today['mon'].'/'.$today['year']." this is a log post"." \n");
fclose($handle);
?>

当我从浏览器http://localhost/one.php或site_folder.com/one.php运行脚本时,logs.txt记录了3次相同的消息:

12/4/2011 this is a log post 
12/4/2011 this is a log post 
12/4/2011 this is a log post

使用netbeans调试器,我看到脚本实际上重复了3次(到达脚本末尾后,它从同一脚本的开头继续-〉one.php)文件夹中不存在.htaccess。
我注意到$_SERVER ['REQUEST_URI']在每次执行/重复时都会发生一些变化:

1)$_SERVER['REQUEST_URI'] => /one.php?XDEBUG_SESSION_START=netbeans-xdebug
2)$_SERVER['REQUEST_URI'] => /one.php
3)$_SERVER['REQUEST_URI'] => /one.php

我只需要记录我的消息一次。
我添加了apache2.conf中未注解的指令:

ServerRoot "/etc/apache2"
LockFile /var/lock/apache2/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
AccessFileName .htaccess
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>
DefaultType text/plain
HostnameLookups Off
ErrorLog /var/log/apache2/error.log
LogLevel warn
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
Include /etc/apache2/conf.d/
Include /etc/apache2/sites-enabled/
f8rj6qna

f8rj6qna1#

我想你已经试过了,但是......,你有没有试过从一个真实的的服务器,而不是一个本地主机?我的意思是,问题可能是在你的Apache服务器......
我不知道,就把它当作一个简单的想法来测试。

kkih6yb8

kkih6yb82#

我已经重新安装了服务器,现在一切正常。

vmpqdwk3

vmpqdwk33#

我也遇到了同样的问题。我有一个简单的访问者计数器为所有网页我的网站和记录信息的返回访问者。
其中一页是**.../评论/1***(其中**/1是reviews.php脚本的传递参数)* 并且我的reviews.php脚本被执行了甚至5次**,在那5次之后,一个index.php脚本被执行。所以我终于得到了每个评论页面访问5次以上的增量在计数器的评论页和1次以上的索引页面,即使我们打开评论页面。(这是疯狂的!!)
我尝试回显$_SERVER['REQUEST_URI']以检查请求是什么,出现了2个问题:

  • 我有<img>标签和一些图像(<img src="assets/test.png">
  • 我忘了写链接如下<img src="**/**assets/test.png">.(注意资产前的/斜线),服务器试图访问这些图像,因为它执行类似http://demo_server/reviews/1/assets/test.png的请求。所以它认为assets/test.pngreviews.php脚本的附加请求参数,并再次执行脚本。
  • 删除了问题,因为我更正了链接,因为我在链接前面添加了**/**。<img src="/assets/test.png">
  • 第二个问题是执行index.php脚本即使我在reviews.php中没有这个页面的链接或请求**
  • 问题是浏览器默认请求**/favicon.ico并执行此URL:http://demo_server/favicon.ico。我在Chrome中尝试过这个--有一个问题**,但是在Firefox中--没有
  • 由于我的favicon被组织在另一个文件夹中,并且针对不同的像素和操作系统使用不同的名称命名,服务器默认尝试通过index.php页面获取favicon.ico。因此整个index.php页面在后台加载,这也需要时间!
  • 我尝试了一些答案,从这个StackOverflow后:How to prevent favicon.ico requests?,但毫无理由,最常见的答案<link rel="shortcut icon" href="data:" />没有帮助我,index.php脚本再次执行。
  • .htaccess中添加这几行代码可以帮助我阻止请求,避免加载整个index.php脚本,从而降低我的评论页面的性能:
<IfModule mod_alias.c> 
        RedirectMatch 403 favicon.ico 
</IfModule>

所以最后,我的 Saga 故事被揭露了,计数器只增加了一次,因为它应该工作。
我分享这个经验,希望它能帮助别人或给予他一个方向,在分析他或她的问题,网络开发。
有时候我们的小错误会造成更大的问题--就像我们在祖国所说的“石头推翻了马车”。

干杯,快乐编码!

相关问题