命令行php mysqli失败但通过Web服务器工作并在本地工作

时间:2012-07-20 18:57:25

标签: php shell mysqli centos

我有一个shell脚本,在解析文本文件后调用php脚本在数据库中插入记录。当它调用PHP脚本时,我得到的错误是找不到mysqli:

PHP Fatal error:  Class 'mysqli' not found in /path/to/php/file.php on line 5

在Macbook Pro上使用Nginx和PHP-FPM以及Mysql 5.5.x本地失败,在我将套接字参数添加到mysqli调用后,它在本地工作。 这适用于本地数据库!

$mysqli = new mysqli("localhost", "user", "pass", "mydb", 3306, "/tmp/mysql.sock");

我已部署到Linux服务器(安装了带有PHP安装php'的PHP操作系统)的CentOS6。我更改了与远程数据库服务器的连接,因此删除了“/tmp/mysql.sock”,因为db没有在此服务器上运行。

shell脚本调用php执行脚本:

php -c "/etc/php.ini" -f "/path/to/php/file.php"

鉴于我没有在本地运行mysql,我如何让它识别mysqli lib并执行。它在CentOS6上。我甚至尝试将mysqli.so添加到php.ini文件中并出现以下错误:

[mike@app2 myapp]# php -version
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - /usr/lib64/php/modules/mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.3.3 (cli) (built: Feb  2 2012 23:47:49) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

感谢您解决此问题的任何帮助。通常我会使用mysql(查询)但需要mysqli()来处理脚本中的一些预处理语句和其他位。

2 个答案:

答案 0 :(得分:7)

我发现mysqli没有安装PHP并运行以下命令:

>php -i

这返回了phpinfo()并且没有提到mysqli。然后我运行'yum'命令来安装php-mysqli:

>yum install php-mysqli

此后脚本成功运行。希望这有助于其他可能遇到类似问题的人。

答案 1 :(得分:1)

PHP CLI将拥有自己的环境设置,而不是网络服务器使用的环境设置。如果您在CLI环境中没有可能导致此问题的mysqli。