You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助: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 0
    
    然后执行 sudo 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

火山引擎 最新活动