red hat enterprise linux 9 下运行 php 脚本有两条核心路径:一是命令行 cli 模式(如 php script.php 或 ./script.php),二是通过 web 服务器(apache/nginx + php-fpm)响应 http 请求;双击或拖入浏览器无法执行,属设计限制而非配置错误。

Red Hat Enterprise Linux 9 下运行 PHP 脚本,核心就两条路:命令行直接执行(CLI),或通过 Web 服务器(Apache/Nginx + PHP-FPM)响应 HTTP 请求。双击、拖进浏览器打不开,这是设计使然,不是配置错了。
php 命令是否可用?先验证解释器
别急着跑脚本,先确认系统里真有 php 这个命令,且版本够用:
- 运行
php -v—— 如果报command not found,说明没装 PHP;RHEL 9 默认不预装 PHP,得手动装 - RHEL 9 推荐用官方 AppStream 仓库安装:
sudo dnf install php(会装 CLI + Apache 模块) - 若需特定版本(如 PHP 8.2 或 8.3),先查可用流:
dnf module list php,再启用并安装,例如:sudo dnf module enable php:remi-8.3→sudo dnf install php - 装完再跑
php -v,看到版本号才算过关
CLI 模式下直接运行 script.php
适合调试、定时任务、数据处理脚本,不依赖 Web 服务:
- 确保当前 shell 在脚本所在目录,或用绝对路径:
php /path/to/script.php - 如果脚本第一行是
#!/usr/bin/env php,且已加执行权限(chmod +x script.php),可直接./script.php(仅 Linux/macOS 有效,Windows 不认 shebang) - 常见错误
Could not open input file:不是文件不存在,而是路径写错或工作目录不对 —— 脚本开头加echo getcwd();看实际执行位置 - 注意 CLI 和 Web 环境用的是两套
php.ini:CLI 的路径用php --ini查,通常在/etc/php.d/或/etc/php/cli/下;扩展(如pdo_mysql)可能只装在 Web 配置里,CLI 下要单独开
Apache 下跑 PHP:mod_php 还是 php-fpm?
RHEL 9 默认安装的 php 包提供的是 libphp 模块(即 mod_php),但官方文档已倾向推荐 PHP-FPM + Apache 的 event MPM 组合,尤其对高并发场景:
- 确认 Apache 正在运行:
sudo systemctl status httpd - mod_php 方式:检查
/etc/httpd/conf.d/php.conf是否存在且未被注释,里面应有AddHandler php-script .php和<filesmatch></filesmatch>块 - PHP-FPM 方式(更推荐):启动服务
sudo systemctl enable --now php-fpm,然后在 Apache 的虚拟主机配置中加:ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/(路径按实际调整) - 无论哪种方式,放一个
info.php(内容仅<?php phpinfo(); ?>)到/var/www/html/,访问http://localhost/info.php—— 出页面说明通了;若下载源码,就是 Apache 没把 .php 交给 PHP 处理
Nginx + PHP-FPM 是 RHEL 9 更轻量的选择
如果你选 Nginx(比如从 EPEL 安装 nginx),它本身不嵌入 PHP,必须靠 PHP-FPM 接入:
- 确保
php-fpm已启动:sudo systemctl enable --now php-fpm - 检查 FPM 监听方式:
sudo cat /etc/php-fpm.d/www.conf | grep -E "^(listen|listen.owner|listen.mode)"—— 默认是 Unix socket/run/php-fpm/www.sock,权限需匹配 Nginx 用户(通常是nginx) - Nginx 配置关键段:
location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } - 改完配置必须重载:
sudo nginx -t && sudo systemctl reload nginx;漏掉这步,修改等于白做 - PHP-FPM 日志在
/var/log/php-fpm/www-error.log,502 错误基本都从这里开始查
最容易被忽略的是:CLI、Apache 模块、PHP-FPM 三者加载的扩展和 ini 设置完全独立,同一个脚本在命令行能跑,放到 Web 下报“function not found”,大概率是某个扩展只装在 CLI 配置里。别猜,先分别跑 php --ini 和 phpinfo() 对比 Loaded Configuration File 路径再说。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











