标签: mod-php

mod_php vs cgi vs fast-cgi

我一直试图理解加载php作为apache模块与其余模块的确切含义/目的.

当php作为apache模块安装时,究竟会发生什么?例如,每次发出php请求或单独加载php模块时,是否会读取php-ini文件?

php interpreter fastcgi mod-php

53
推荐指数
2
解决办法
3万
查看次数

Apache的mod_php还是FastCGI?哪个对Wordpress有好处?

我有关于在不同的配置中运行PHP的基本想法,如mod_php,cgi,FastCGI等.

在我的发现和测试中,我发现FastCGI略胜一筹.我最喜欢FastCGI对SuEXEC的支持.等等我不想再次进入基准测试业务.如果你上网,你会发现在每秒处理的请求数量方面,证明一种方式比另一种更快的人.那么它的好指标,但我对不同的因素感兴趣,这是我的问题......

  1. 运行PHP的哪种方法占用的内存较少?
  2. 另外哪种方法消耗内存几乎不变.我用mod_php看到我的服务器内存使用率每隔几秒就会在300MB到800MB之间波动.
  3. 但是使用FastCGI,来自服务器的第一个响应来得非常晚.我看到FastCGI每个网页请求有一个初始延迟.一旦服务器的第一个响应到达,其他项目,如图像,css,js加载速度相当快.
  4. 两种混合运行都可以吗?我在专用服务器上有5个站点.如果我使用mod_php运行少量并使用FastCGI休​​息,这样可以吗?
  5. 我确信我的服务器出现故障主要是因为mod_php的内存使用不当.我检查了所有脚本.有没有办法确保服务器上的内存消耗几乎保持不变?
  6. .htaccess的复杂性是否会显着影响内存使用?如果是,是否可以使服务器内存不足?
  7. apache MPM prefork/worker设置会影响内存消耗吗?它们是否同样影响mod_php和FastCGI模式?
  8. 当我运行"top"命令时,我看到apache(httpd)消耗大约40MB的内存.有许多httpd运行的实例.此外,FastCGI还会分配一些类似大小的进程.httpd进程的正常内存大小是多少?
  9. 当我在我们所有的网站上运行Wordpress时,在这种情况下这将是一个好方法吗?
  10. FastCGI/SuExec与APC一起工作正常吗?我是否需要重新配置APC才能与SuEXEC和FastCGI配合使用.

请注意,我对DIGG或交通高峰的生存兴趣不大.我想要一种可以使服务器稳定和可预测的方法.

对不起,如果我很困惑,但我真的很乱.我有512MB物理内存,400MB交换和我的服务器疯狂的内存不足.平均内存需求大约为350MB,只是内存使用量激增使得内存几秒钟无法访问,如果在那几秒钟窗口中收到的额外点击很少,则apache在mysql和所有其他fellas运行正常时崩溃.

请帮帮我们.我不会买更多的RAM或硬件.我很确定问题出在我的配置中.对不起,如果我听起来傲慢或无知.

php apache wordpress fastcgi mod-php

18
推荐指数
1
解决办法
2万
查看次数

很长时间到空php文件的第一个字节值

几个月前我有这样的问题.现在为了隔离问题,我尝试了一种新的方法.我把一个空文件放到我的服务器上.

文件名是"foobar.php".其内容如下:

<?php
echo "hello world";
Run Code Online (Sandbox Code Playgroud)

但是当我尝试进入example.com/foobar.php时,我明白了

DNS 203毫秒
连接3.33秒
发送0毫秒
到第一个字节的时间17.35秒
接收1毫秒总加载时间20.88秒

然后我把另一个名为"foobar.txt"的文件.其内容如下:

hello world<br/>
Run Code Online (Sandbox Code Playgroud)

foob​​ar.txt的加载时间约为0.2秒.

这个网站是在共享主机内,所以我无法获得root Linux访问权限.我试图找出是什么让我的网站变慢.

  • 当我得到这些结果时,我的网站有60个访问者.并且它们在活动时发送AJAX请求.当它们处于活动状态时,它们几乎每3秒发送一次AJAX请求.
  • 一般来说,我的网站每秒有5-20个请求.
  • 我的托管服务提供商表示没有CPU过载,一般来说非常低.
  • 我向托管公司询问了Apache的限制.我得到整个共享服务器的这个值:

MaxClients 300
MaxRequestsPerChild 4000
ThreadsPerChild 25

  • example.com/mybigpage.phpexample.com/foobar.php页面几乎同时打开.
  • 如果页面有txt,jpeg或其他扩展名,则会立即打开它们.如果扩展名为php,则打开速度非常慢.
  • CakePHP将会话文件存储在"/ httpdocs/app/tmp/sessions"文件夹中.会话文件在创建两个小时后删除.现在该文件夹中有3653个文件.最早的文件是在2,5小时前创建的.
  • 在我的配置中,PHP处理程序是Apache模块mod_php

新编辑: 我和我的托管公司谈过.并告诉他们"foobar.php"几乎在20秒内打开.虽然该文件根本没有代码.他们告诉我他们把"foobar.php"放到我们使用同一台服务器的其他网站上.我也试过"othersite.com/foobar.php".它立刻打开了.但"mysite.com/foobar.php"几乎在15秒内开启.什么会造成这种行为?我们对其他网站使用相同的PHP配置,但它们会立即打开..可以是因为我的.htaccess规则吗?还是其他的事情?

新Edit2: 我的提供商告诉我服务器内没有"apd.so"文件.所以我好像不能使用APD.

我应该寻找什么才能找到瓶颈?
什么会限制我的网站?


附加数据:来自phpinfo,我得到了这个:

'./configure'' - prefix =/usr/local/lsws/lsphp5'' - build = x86_64-redhat-linux-gnu'' - host = x86_64-redhat-linux-gnu'' - target = x86_64-redhat-linux-gnu'' - sysconfdir =/etc'' - datadir =/usr/share'' - includenid =/usr/include'' - libdir =/usr/lib64'' - libdcdir =/usr/libexec'' …

php apache .htaccess cakephp mod-php

18
推荐指数
1
解决办法
9134
查看次数

apache模块与cgi(关于安全性)之间有区别吗?

例如,它是更安全的使用mod_php,而不是php-cgi?或者使用它mod_perl而不是传统更安全cgi-scripts

我主要对安全问题感兴趣,但如果存在显着差异,速度可能会成为一个问题.

php apache perl mod-perl mod-php

17
推荐指数
3
解决办法
2万
查看次数

Xdebug禁用HTML堆栈跟踪

管理员已在我们的共享PHP 5.3.0服务器中安装了Xdebug 2.1.1,以便使用其调试器.现在,我几乎无法读取未捕获异常的堆栈跟踪,因为它们被Xdebug格式化,其中令人讨厌的颜色与网站的CSS交互不良:

堆栈跟踪不可读

由于PHP作为Apache模块运行,我试图在.htaccess文件中禁用此功能,但我无法实现:

php_flag xdebug.default_enable Off
php_flag xdebug.overload_var_dump Off
php_flag xdebug.show_exception_trace Off
php_value xdebug.trace_format 1
Run Code Online (Sandbox Code Playgroud)

phpinfo()Local Value列中显示我的更改,但我仍然可以看到那些可怕的橙色表.我需要改变的指令是什么?

php xdebug mod-php

16
推荐指数
3
解决办法
2万
查看次数

PHP处理速度apache 2.4 mpm-prefork mod_php 5.4 vs nginx 1.2.x PHP-FPM 5.4

我一直在寻找好几天,看看有没有人做过良好的,有文档记录的,PHP处理速度之间的比较

  • apache-mpm-prefork 2.4 with mod_php 5.4

  • nginx 1.2.x + PHP-FPM 5.4

为什么我要看:我看到的唯一测试是基准测试,提供完整页面或Hello,类似世界的测试,没有关于测试内容的正确文档.我不关心请求/秒,硬件,但我确实需要看看测试了什么PHP脚本以及具体配置.

为什么这两个: mod_php被认为是处理PHP最快的(没有静态文件,没有请求/响应测量,只是处理PHP本身)但是从那以后发生了很多变化,包括apache版本.nginx的和PHP-FPM吃得少了很多的内存,所以这会是一个很好的理由来改变架构,但如果他们不够快在这种情况下,变化是不相关的.

我知道如果我找不到一个我必须自己做,但我不敢相信没有人做过这样的测试到目前为止:)

php performance apache2 mod-php nginx

12
推荐指数
1
解决办法
9358
查看次数

在一台Apache服务器上的单独vhost中运行Apache mod_php和mod_fastcgi

所以,我需要在一台服务器上运行多个php应用程序/站点.一个或多个应该使用apache和mod_php5运行,一个或多个应该能够使用mod_fastcgi和php-fpm运行.mod_php5目前是正常的,如果我禁用mod_php5,fastcgi工作,但我很难让他们同时工作.

我认为这可以通过在apache中使用文件匹配,if.mod_fastcgi和if.mod_actions的某种组合来实现,但我无法弄清楚它是什么.如果需要,我们可以安装执行此操作所需的任何apache模块.

超级奖励积分,如果有不同版本的vhost for Apache 2.2或更少,你也有这个片段,或者至少知道我应该做什么

我不会发布我拥有的整个虚拟主机,因为我知道它们是错的,但第一个,默认的,基于mod_php的虚拟主机看起来像这样...

#NameVirtualHost 127.0.0.1:80     < Apache 2.2 or less    
 <VirtualHost 127.0.0.1:80>
   ServerAdmin webmaster@localhost
   ServerName some.site.tld
   DocumentRoot /var/www/some/site/
   <Directory /var/www/some/site/>
     Options Indexes FollowSymLinks MultiViews
     Require all granted
#               Order deny,allow     < Apache 2.2 or less
#               Allow from all     < Apache 2.2 or less
   </Directory>
   ErrorLog /var/log/apache2/error.log
   CustomLog /var/log/apache2/access.log combined
 </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望这些保持不变,如果我们需要更多这些,我们可以添加更多.

我想要的结果是能够使用像第一个配置这样的东西来放入为mod_php配置的新vhosts,并且还为了快速cgi而放入vhosts,如下所示.

# NameVirtualHost 0.0.0.0:80  < Apache 2.2 or Less
<VirtualHost 0.0.0.0:80>
   ServerAdmin webmaster@localhost
   ServerName some.application.tld
   DocumentRoot /opt/some/app/dir/
   ErrorLog /var/log/apache2/error.log
   CustomLog /var/log/apache2/access.log combined
   <IfModule mod_fastcgi.c> …
Run Code Online (Sandbox Code Playgroud)

php apache mod-php virtualhost mod-fastcgi

8
推荐指数
1
解决办法
4360
查看次数

检测在PHP中关闭的浏览器连接

有没有人知道在执行长PHP脚本时是否可以检测浏览器是否已关闭连接,何时使用apachemod_php

例如,在浏览器关闭它之后,如果有人试图写入它Java,HttpOutputStream则会抛出一个exception- 或者会对它做出负面反应checkError().

php apache http mod-php

6
推荐指数
1
解决办法
6013
查看次数

PHP不能使用300MB的RAM

我正在尝试为某些PHP脚本增加允许的内存.不管我做什么,例如:

ini_set('memory_limit', '512M');
Run Code Online (Sandbox Code Playgroud)

...脚本总是耗尽大约300MB的内存:

Fatal error: Out of memory (allocated 25165824) (tried to allocate 343810589 bytes) in \\Foo\phpQuery\phpQuery.php on line 255
Run Code Online (Sandbox Code Playgroud)

我通过几种方式验证了memory_limit实际上已经改变了.问题似乎是PHP无法物理分配总共300 MB的内存(25165824字节+ 343810589字节= 352 MB).

我已经在两台不同的基于Windows的计算机上尝试过PHP/5.3.0和PHP/5.3.9,并且具有以下规范:

  • Windows XP/Windows Server 2003(两台计算机都是32位盒,1GB或RAM)
  • 官方PHP 32位VC9二进制文件
  • 作为Apache 2.2模块运行(第三方32位VC9二进制文件)

我知道使用一半的物理RAM会强制交换并减慢速度,但我只需确保脚本实际工作,以便可以部署到实时服务器.我也尝试过更大的值(产生相同的错误)和更小的值(使我的脚本达到极限或使Apache崩溃).

这个明显硬编码内存限制的来源是什么?

更新#1:我已经使用Windows Server 2003框(实际上是VMWare虚拟机)进行了进一步测试.我已经将"物理"RAM增加到2 GB,并且我已经验证了分页文件可以增长到1152 MB.任务管理器显示当前事务负载为886 MB,并且有1.5 GB的可用物理内存.但是,我得到了完全相同的数字相同的错误.

更新#2:正如我所说,该memory_limit指令没问题.它出现在两者ini_get()phpinfo().你得到的错误信息与我的略有不同; 我的表示PHP 崩溃.请比较:

Out of memory (allocated 25165824) (tried to allocate 343810589 bytes)
Allowed memory size of 25165824 bytes exhausted (tried to allocate …
Run Code Online (Sandbox Code Playgroud)

php mod-php

6
推荐指数
1
解决办法
583
查看次数

mod_php是否正确地尊重HEAD请求?

HTTP/1.1 RFC规定"HEAD方法与GET相同,但服务器不得在响应中返回消息体." 我知道Apache尊重RFC,但模块不必.我的问题是,mod_php5是否尊重这一点?

我问的原因是因为我刚刚看到一篇文章说PHP开发人员应该自己检查:

    if (stripos($_SERVER['REQUEST_METHOD'], 'HEAD') !== FALSE) {
        exit();
    }
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了一下并没多少出现,除了一些人说他们在获得HEAD请求后尝试了一些奇怪的东西,比如mod_rewrite/redirect,以及2002年的一些旧的bug票据声称mod_php默认仍然执行了其余的脚本.所以我只是通过使用PECL :: HTTP来运行快速测试

    http_head('http://mysite.com/test-head-request.php');
Run Code Online (Sandbox Code Playgroud)

虽然有:

    <?php error_log('REST OF SCRIPT STILL RAN'); ?>
Run Code Online (Sandbox Code Playgroud)

在test-head-request.php中查看脚本的其余部分是否仍然执行,但事实并非如此.

我认为这应该足以解决它,但希望获得更多反馈,并且可能有助于清除那些对此感到疑惑的其他人的困惑.因此,如果有人知道他们的头顶(没有双关语意) - 或者他们用于接收HEAD请求的任何约定,那就太好了.否则,我会稍后查看C源代码并回复我的调查结果.谢谢.

php http mod-php

5
推荐指数
1
解决办法
2269
查看次数