我正在为我的一个朋友做一个小小的 PHP 项目,我为本地开发设置了一个 WAMP 环境。我记得以前本地 Apache 2.2 的响应非常迅速。唉,现在我刚结束一个漫长的假期,我发现响应速度慢得localhost
令人难以忍受。
处理一个 300B 的 HTML 页面大约需要 5 秒钟。
当我查看任务管理器时,httpd
进程 (2) 占用了 0% 的 CPU,并且总体而言我的计算机没有负载(CPU 使用率为 0-2%)。
为什么延迟这么高?是否有任何 Apache 设置可以调整,以便使其线程以更高的优先级运行或类似操作?它似乎只是在提供响应之前处于休眠状态。
答案1
对我来说,设置ServerName
属性httpd.conf
修复了延迟(最坏的情况是延迟长达 10 秒):
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
ServerName 127.0.0.1:80
答案2
我也遇到了同样的问题。
在 hosts 文件中将 localhost 重定向设置为 127.0.0.1 并没有帮助。优化 MySQL 服务器也没有帮助(InnoDB -> MyISAM,更改 my.ini 中许多与缓存相关的指令)。
然后我使用 web webgrind 并将问题缩小到“new PDO(...)”调用。更改
mysql:host=localhost;dbname=dp-ui;charset=utf8
到
mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8
在 PDO 的 dsn 中彻底解决了问题! 页面加载时间从 3000 毫秒减少到 16 毫秒。
但是我真的很困惑为什么 hosts 文件中的“127.0.0.1 localhost”行没有帮助。
答案3
该问题出在 Apache 的主设置文件中httpd.conf
。
我找到了这个:
有三种方法可以在 Windows 上设置 PHP 与 Apache 2.x 配合使用。您可以将 PHP 作为处理程序、CGI 或在 FastCGI 下运行。 [来源]
于是我进入 Apache 的设置,查看问题所在:我将其设置为 CGI,而不是将其加载为模块。这导致php-cgi.exe
每次我发出请求时都会启动和关闭。这减慢了我的localhost
开发速度。
我更改了设置,将 PHP 作为 Apache 加载模块现在一切都运行正常。:)
要加载 Apache 2.x 的 PHP 模块:
1)将以下行插入到
httpd.conf
LoadModule php5_module "c:/php/php5apache2.dll"
AddHandler application/x-httpd-php .php
(ps 更改
C:/php
为您的路径。另外,将 php5apache**.dll 更改为您现有的文件名)2)要限制 PHP 仅对 .php 文件执行,请添加以下内容
httpd.conf
:
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>
3)设置 php.ini 的路径
httpd.conf
(如果重启后出现错误,请再次删除此行)
PHPIniDir "C:/php"
谢谢大家的努力。
答案4
我遇到了同样的问题并最终发现它来自两个事实:
- 我使用 Mac OS X Mavericks
- 我通过 URL 访问了我的项目,
http://myproject.local/
因为我127.0.0.1 myproject.local
在/etc/hosts
出现该问题的原因是,.local
tld 是为 Bonjour 服务保留的,从 Mac OS X Lion (10.7) 开始就存在这种情况。
将 tld 更改为其他内容即可解决问题。