Laravel 5.5报错“Class 'PDO' not found”求助
解决“Class 'PDO' not found”但CLI迁移正常的问题
这问题我之前帮同事排查过,核心原因大概率是Web服务器使用的PHP环境和你CLI下的PHP不是同一个——CentOS系统里经常出现这种情况,CLI PHP和Apache/Nginx加载的PHP配置、甚至安装包都可能是分开的,这就导致你在CLI里能看到PDO,但Web端调用的PHP没装这个扩展。
下面是一步步的排查和解决步骤:
1. 确认Web环境的PHP状态
首先得搞清楚Web端用的PHP到底是什么情况:
- 在你的网站根目录新建一个
phpinfo.php文件,内容如下:<?php phpinfo(); ?> - 访问这个文件(比如
http://你的域名/phpinfo.php),在页面里搜索PDO相关的条目:- 如果找不到PDO的任何信息,说明Web端的PHP确实没装这个扩展;
- 同时对比页面里的PHP版本和你CLI下执行
php -v得到的版本,如果不一样,就坐实了是两个独立的PHP环境。
2. 安装Web环境对应的PDO扩展
根据你Web端的PHP版本和Web服务器类型,用yum安装对应的扩展:
- 如果是Apache服务器,直接安装对应版本的PDO扩展,比如PHP7.4的话:
(如果是默认PHP版本,直接用yum install php74-php-pdo php74-php-pdo_mysqlyum install php-pdo php-pdo_mysql) - 如果是Nginx搭配php-fpm,要确保php-fpm对应的扩展安装完成:
yum install php-fpm php-pdo php-pdo_mysql - 安装完成后,重启Web服务器或php-fpm:
Apache:systemctl restart httpd
Nginx+php-fpm:systemctl restart php-fpm nginx
3. 检查Web PHP的php.ini配置
有时候扩展装了,但php.ini里没开启:
- 从phpinfo页面找到
Loaded Configuration File的路径(比如/etc/php.ini或者/etc/php74/php.ini); - 打开这个配置文件,搜索以下两行,确保前面没有注释符号
;:extension=pdo.so extension=pdo_mysql.so - 修改后再次重启Web服务器/php-fpm。
4. 验证修复
- 先删掉刚才的
phpinfo.php(避免安全风险); - 重新访问你的网站,看“Class 'PDO' not found”错误是否消失;
- 也可以写个简单的测试脚本验证PDO连接:
放到网站目录访问,看输出结果。<?php try { $pdo = new PDO('mysql:host=localhost;dbname=你的数据库名', '数据库用户名', '数据库密码'); echo "PDO连接成功!"; } catch (Exception $e) { echo "连接失败:" . $e->getMessage(); } ?>
为什么CLI的php artisan migrate:refresh没问题?
因为artisan命令是通过CLI(命令行)执行的,你已经用php -m确认了CLI环境的PHP已经安装了PDO扩展,所以迁移命令能正常运行,但Web端用的是另一个PHP环境,没装PDO,才会报错。
内容的提问来源于stack exchange,提问作者lonestar
相关产品推荐
相关产品推荐

