最近在捣鼓swoole以及phpunit时,需要用到PHP-CLI(PHP的命令行模式),可是却中途却一直出现问题,就以phpunit为例,在用到调试数据库的断言时,出现could not find driver,以及在捣鼓swoole时,使用了swoole的定义类缺找不到,最终原来发现PHP-CLI模式的拓展与PHP-FPM那边的拓展配置不一致导致的。

基础

在填坑前先介绍下几个路径以及命令:

/usr/local/php 通常是通过网页调用PHP脚本(FastCGI,FPM)时,php配置以及拓展放置的目录

/usr/bin/ 用户命令放置的地方,也是PHP-CLI调用php命令放置的地方

php -m 查看CLI模式下加载的拓展以及模块

在脚本中编写phpinfo();然后网页访问,可以查看网络调用脚本时加载的拓展和模块

/etc/php 在某些情况下,PHP-CLI调用PHP脚本时,php配置以及拓展放置的目录,也是本文的罪魁祸首

步骤

在linux里安装多个PHP版本或者,安装过PHP7时有可能会出现CLI模式与普通模式(网页调用PHP脚本)配置以及模块不一致的情况,由于我是用LNMP安装的PHP7,之后有安装了PHPStorm,不知是不是乱搞的关系,导致CLI与普通模式加载配置不一致了,在折腾Swoole时就明显发现了这个问题。

要知道模块是否加载一致,普通模式用phpinfo() ,命令行模式直接用php -m就可以查到模块是否一致了。

若不一致时,绝大多是/usr/bin/php(大多是软连接)指向/etc/php/bin目录里的php

1
ls -li 软链接文件 # 这样既可找到链接指向的源文件

要解决也是十分简单,只需把/usr/local/php/bin里面的php的软连接放到/usr/bin/里即可,注意要把之前/usr/bin/里的php删掉

1
2
rm -rf /usr/bin/php
ln -s /usr/lcoal/php/bin/php /usr/bin/php # 软连接的两个参数都需写绝对路径

接着在命令行里

1
php -m

即可发现CLI模式加载的模块就与普通模式保持一致了