求助:Apache2环境下修改PHP文件需重启服务,如何实现实时编辑?
解决WSL中Apache2修改PHP需重启生效的问题
兄弟,我太懂这种改完代码还要重启服务的痛苦了!结合你的环境(WSL Ubuntu 16.04 + Apache2.4 + PHP),还有CSS能实时生效的情况,大概率是PHP缓存或者WSL文件系统同步的问题,给你几个一步步排查的方案:
方案1:调整PHP OPcache配置(最常见原因)
PHP的OPcache会把编译后的脚本缓存到内存里,提升生产环境性能,但开发环境就会导致修改不实时生效。你可以这么改:
- 先找到PHP配置文件位置:执行
php --ini,看输出里的「Loaded Configuration File」那一行,比如可能是/etc/php/7.0/apache2/php.ini(根据你的PHP版本调整) - 用编辑器打开这个文件,找到以下OPcache相关设置,修改成这样:
; 完全禁用OPcache(开发环境推荐) opcache.enable=0 opcache.enable_cli=0 ; 如果不想完全禁用,也可以开启实时校验(同样能实现实时更新) ; opcache.enable=1 ; opcache.validate_timestamps=1 ; opcache.revalidate_freq=0 - 修改后重启Apache:
sudo systemctl restart apache2,之后再修改PHP文件保存,刷新浏览器应该就能看到变化了。
方案2:关闭Apache对PHP文件的缓存
虽然CSS能实时生效,但Apache可能对PHP文件有额外的缓存设置,你可以在网站的Apache配置(比如虚拟主机配置文件,或者 /etc/apache2/apache2.conf)里添加以下内容:
<FilesMatch "\.php$"> FileETag None Header unset ETag Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" </FilesMatch>
添加后重启Apache:sudo systemctl restart apache2,测试下是否生效。
方案3:解决WSL与Windows的文件系统同步问题
如果你把网站文件放在Windows的目录下(比如 /mnt/c/ 开头的路径),WSL和Windows之间的文件系统缓存可能会导致文件更新延迟。解决办法:
- 把网站文件迁移到WSL的本地目录,比如
/home/lhn2/www/,这样文件系统的同步是原生的,不会有缓存问题。 - 如果必须使用Windows目录,WSL1用户可以修改挂载选项:编辑
/etc/fstab,添加一行:
然后执行C: /mnt/c drvfs defaults,metadata,umask=0022,fmask=0022 0 0sudo mount -o remount /mnt/c生效;WSL2用户建议优先用WSL本地目录,因为WSL2对Windows目录的性能和缓存问题更明显。
快速排查小技巧
修改PHP文件后,先在WSL终端执行 cat index.php 查看文件内容:
- 如果终端显示的是修改后的内容,那问题出在PHP或Apache的缓存,用方案1或2解决;
- 如果终端显示的还是旧内容,那就是WSL和Windows的文件同步问题,用方案3解决。
内容的提问来源于stack exchange,提问作者Nicolo Lüscher




