在CentOS 9上跑PHP脚本,其实核心就几步:确认环境、安装、运行。不过具体操作里藏着不少坑,咱们一步步拆开看。
确认系统是否已安装 PHP
CentOS 9 默认不带 PHP,这事儿挺常见的。如果你直接敲 php --version,大概率会看到 command not found 的报错——别慌,不是权限问题,也不是路径问题,就是压根没装。
- 先跑
dnf list installed | grep php检查一下,如果没有任何输出,说明确实没装。 - CentOS 9 用
dnf替代了yum,而且默认启用了appstream仓库,PHP 就在这里面藏着。 - 执行
dnf module list php能看到可用版本,常见的有php:8.1、php:8.2,php:latest指向推荐版本。 - 启用模块再安装:比如
dnf module enable php:8.2,然后dnf install php-cli。注意,php-cli是命令行执行必需的包,它不带 Web 服务器组件,够用且轻量。
验证 PHP CLI 是否可用
装完了别急着跑脚本,先确认 php 命令能正常工作,而且支持你需要的扩展:
- 运行
php --version,应该输出类似PHP 8.2.12的信息。 - 检查常用扩展是否加载:
php -m | grep -E 'pdo|mbstring|json'。如果缺了,需要额外安装对应包,比如php-pdo、php-mbstring。 php -i | grep 'Loaded Configuration File'可以查看配置文件路径。CentOS 9 里,通常是/etc/php.d/下的 ini 文件,而不是单个php.ini。- 特别提醒:CentOS 9 的 SELinux 默认是启用的。如果脚本读写文件时出错,先临时测试
setenforce 0,确认是 SELinux 限制后再配置策略,别直接关掉。
执行 PHP 脚本的几种方式
最直接的方式就是用 php 命令,但不同场景下路径和权限处理容易出错:
- 如果脚本有 shebang 行(
#!/usr/bin/env php)且具备可执行权限(chmod +x script.php),可以直接./script.php运行。 - 没有 shebang 或者权限不足时,用
php script.php更可靠——它不依赖文件权限,只依赖 PHP 解释器和脚本内容。 - 脚本路径含空格或特殊字符?必须用引号包裹:
php "/path/to/my script.php"。 - 传参给脚本:
php script.php arg1 arg2,参数在$argv数组中,$argv[0]是脚本名,$argv[1]才是第一个参数。 - 从 stdin 输入代码:
echo "echo 'hello';" | php,适合调试单行逻辑。
常见执行失败原因和排查点
报错信息常常指向表面问题,实际根因可能是环境或配置偏差:
Parse error: syntax error:确认脚本的 PHP 版本兼容性。CentOS 9 默认 PHP 8.x,不支持mysql_*函数等已被移除的特性。PHP Warning: require(): failed to open stream:相对路径在 CLI 下的当前工作目录(pwd)决定,不是脚本所在目录。建议用__DIR__拼接路径。Permission denied:不只是文件权限,也可能是脚本所在目录没有执行权限(CLI 需要进入目录的x权限)。Segmentation fault:多见于第三方扩展(如redis、grpc)未适配 PHP 8.2 或 ABI 不匹配,尝试重装对应扩展包。- 脚本里用了
$_SERVER['DOCUMENT_ROOT']等 Web 环境变量?CLI 下这些未定义,会触发 notice 或 fatal error。
对于复杂脚本,建议加 php -d display_errors=1 -d error_reporting=E_ALL script.php 强制显示所有错误,避免静默失败。