答案是执行dnf list installed | grep php确认是否安装,若无输出则未安装;再运行dnf module list php查看可用版本,启用如php:8.2模块后安装php-cli并验证php --version。

确认系统是否已安装 PHP
CentOS 9 默认不预装 PHP,直接运行 php --version 很可能报错:command not found。这不是权限或路径问题,而是根本没装。
- 先执行
dnf list installed | grep php看是否已有 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 强制显示所有错误,避免静默失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











