php命令行不可用主因是环境变量未配置或未安装cli版本;web服务器无法解析php文件因模块未加载或配置错误;php.ini修改无效因找错配置文件或未重启服务;扩展装不上因动态库路径错误、依赖缺失或版本不匹配。

php命令行不可用:确认是否真装了PHP
很多人点开终端输 php -v 报错“command not found”,第一反应是“没装好”,其实更可能是路径没加进系统环境变量,或者根本没装——macOS 和 Windows 默认都不带 PHP,Linux 发行版也大多不预装(Ubuntu/Debian 要自己 apt install php-cli)。
- 先查有没有:运行
which php或where php(Windows),没输出就说明 shell 根本找不到它 - 别急着重装,先看安装包是否只装了 Apache 模块(比如某些 Windows 一键包),没装 CLI 版本;
php -v必须依赖php-cli包,不是libapache2-mod-php那一套 - macOS 上用 Homebrew 装完,记得检查
/opt/homebrew/bin/php(Apple Silicon)或/usr/local/bin/php(Intel)是否在$PATH里,否则要手动加
web服务器跑不起来PHP文件:模块没加载或配置错位置
浏览器访问 info.php 显示纯代码、下载文件、或 500 错误,大概率是 Web 服务器压根没把 .php 后缀交给 PHP 解析,而不是 PHP 本身坏了。
- Apache 需确认
LoadModule php_module和AddHandler application/x-httpd-php .php在配置里启用,且DirectoryIndex包含index.php - Nginx 不是“装了 PHP 就能跑”,必须配
fastcgi_pass指向 PHP-FPM 进程(如127.0.0.1:9000),且location ~ \.php$块里不能漏掉fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name - Windows 下如果用 Apache + php.dll,注意
php.ini路径是否被 Apache 正确读取(看phpinfo()输出里的 “Loaded Configuration File”)
php.ini改了但不生效:找错文件 or 没重启服务
调 upload_max_filesize 或 date.timezone 没反应?不是配置写错了,而是改的不是 PHP 实际加载的那个 php.ini。
- 运行
php --ini看 CLI 模式用哪个文件;网页里跑phpinfo()看 Web 模式用哪个——两者常不同(尤其 MAMP/XAMPP 类工具) - 改完必须重启对应服务:CLI 不用重启,但 Apache/Nginx/PHP-FPM 都得 reload 或 restart,
systemctl restart php-fpm比service php7.4-fpm restart更可靠(版本号容易写错) - 有些发行版(如 Ubuntu)会把配置拆成
/etc/php/8.1/apache2/conf.d/下的多个.ini文件,直接改主php.ini可能被覆盖
扩展装不上(比如pdo_mysql):动态库路径、依赖、版本锁死
php -m | grep pdo 没输出,或报错 PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql',问题不在“启没启用”,而在“库文件根本不存在或打不开”。
立即学习“PHP免费学习笔记(深入)”;
- 先确认扩展文件是否存在:
ls /usr/lib/php/*/pdo_mysql.so(Linux)或dir "C:\php\ext\php_pdo_mysql.dll"(Windows) - Linux 下常见缺依赖:比如
pdo_mysql需要libmysqlclient,用ldd /usr/lib/php/*/pdo_mysql.so | grep "not found"查 - Windows 下 DLL 名必须和
php.ini里写的完全一致(extension=php_pdo_mysql.dll,不能少php_或后缀);而且 32/64 位、VC 编译器版本(VC15/VC17)必须和 PHP 二进制严格匹配











