我正在 CentOS6 服务器上使用 Apache 和 PHP 进行开发。当我对 PHP 文件进行更改(并保存)时,apache 似乎没有读取更改后的文件 - 它仍在处理我的旧 .php 文件。 5-10 分钟后,它将开始使用新文件。
有人可以告诉我如何强制 Apache 立即拾取更改后的 .php 文件吗?
更新:我将文件移动到 apache 服务器上,问题仍然存在(这不是 NFS 问题)。因此,Apache 似乎在几分钟内没有读取已更改的文件,令人困惑......
答案1
也许我和你有同样的问题,这是因为 php.ini 上的 opcache 配置。所以我将重新验证频率设置为 0
opcache.revalidate_freq=0
或禁用 opcache
opcache.enable=0
之后记得重新启动 Apache 服务器。
答案2
Apache 不会主动监视 PHP 和其他配置文件的更改。您需要告诉服务重新加载更改。
# service httpd reload
或完全停止并启动服务器:
# service httpd restart
另一方面,您可以通过在 httpd.conf 文件(通常在/etc/httpd/conf/httpd.conf
)上启用 mod_status 并附加或取消注释以下内容来查看服务器何时重新加载数据:
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .example.com
</Location>
其中“ Allow from
”后面应该是您的域、IP、本地主机(如果您在同一台计算机上开发,则为最后一个)或它们的组合,所有这些都用空格分隔。
然后,如果您为该位置使用新创建的特殊处理程序/server-status
(将其附加在 URL 服务器的末尾,如 中http://www.server.com/server-status
),您将看到许多有关 Apache 服务器运行状态的信息,包括有关最后一个的信息。配置的时间。
答案3
我的开发机器上也遇到了类似的问题,PHP 代码的更新没有立即反映。我通过编辑php.ini
opcache
设置并将指令设置为解决了该问题
opcache.enable=0
答案4
如果您有php-fpm
守护进程正在运行,您将需要再执行一步才能php.ini
识别您的更改,仅重新启动 apache 是不够的。
在 Linux 上:
sudo 杀死 -USR2PID
指定主进程的PID php-fpm
。您可以通过 找到该进程 ID ps auxwwf | grep php
。
我的 Amazon Drupal 实例随此php-fpm
进程一起运行;我花了一段时间才弄清楚这一点。