PHP 8.4命令行执行逻辑与8.0–8.3完全一致,无需额外编译或服务;常见失败主因是路径和权限环境错位,如Web服务器工作目录非当前shell目录、__DIR__返回脚本而非入口目录、CLI与Web进程用户权限不一致,php -S仍可用但仅限本地调试。

php 命令直接运行,和 PHP 8.0–8.3 完全一致 —— PHP 8.4 没改 CLI 的基本执行逻辑,也不需要额外编译或启动新服务。
用 php 命令跑脚本,但路径和权限容易出错
最常见失败不是语法问题,而是环境错位:
-
php script.php在终端能跑,Web 请求里却报“文件不存在”:Web 服务器(如 Apache/Nginx)工作目录不是你当前 shell 所在目录,script.php必须用绝对路径或确保chdir()到正确位置 - 脚本里用了
__DIR__或dirname(__FILE__):它返回的是脚本所在目录,不是 Web 请求入口点(如public/index.php)的目录,跨目录包含时极易失效 - CLI 用户(如你的 shell)有读取权限,但 Web 进程用户(如
www-data)没有:检查ls -l script.php和父目录的read权限,尤其注意 SELinux/AppArmor 是否拦截
php -S 内置服务器仍可用,但别用于生产
PHP 8.4 继续保留 php -S,适合本地调试,但有明确限制:
PHP 8.5.12 RC 1 候选版修复 BZ2、DOM、PDO、Opcache/JIT 和扩展内存安全问题,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 不支持 HTTPS、URL 重写(
.htaccess)、并发连接数高时响应变慢 - 静态资源(CSS/JS)需手动处理路由,否则 404;推荐加个简单的路由器文件:
router.php <?php if (preg_match('/\.(?:png|jpg|jpeg|gif|css|js|ico|xml|txt)$/', $_SERVER["REQUEST_URI"])) { return false; } // 否则交给 index.php 处理 - 启动命令仍是
php -S 127.0.0.1:8000 router.php,没新增参数或行为变更
OPcache 默认启用,但脚本修改后可能不生效
PHP 8.4 的 OPCache 缓存机制更激进,尤其在 CLI 模式下:
- CLI 默认关闭 OPCache(
opcache.enable_cli=0),但如果你手动启用了,改完脚本要清缓存:opcache_reset()或重启 PHP 进程 - Web 环境中,
opcache.validate_timestamps=1(默认)会定期检查文件修改时间,但间隔由opcache.revalidate_freq控制(默认 2 秒),改完代码等几秒再刷页面才看到效果 - 开发时建议设为
opcache.revalidate_freq=0,避免缓存干扰;上线前务必切回合理值


















