PHP的MySQL扩展无法正常工作

Debian服务器中,在安装和删除SquirrelMail(一些降级和升级php5,mysql …)之后,PHP的MySQL扩展已经停止工作。

我已经安装了php5-mysql,当我尝试通过php-cli连接到数据库时,我连接成功,但是当我尝试从Apache服务器连接时,我无法连接。

这个脚本,由php5-cli运行:

echo phpinfo(); $link = mysql_connect('localhost', 'user, 'password'); if (!$link) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_close($link); 

打印phpinfo,其中包括“/etc/php5/cli/conf.d/mysql.ini”,以及所有configuration的MySQL部分:SOCKET,LIBS …然后打印“Connectes successfully”。

但是当通过web浏览器访问的apache运行时,它显示phpinfo,其中包括“/etc/php5/apache2/conf.d/mysql.ini”,但MySQL部分丢失,并且脚本死亡打印“致命错误:调用未定义的函数mysql_connect()“。

请注意,“/etc/php5/cli/conf.d/mysql.ini”和“/etc/php5/apache2/conf.d/mysql.ini”实际上是相同的configuration,因为我已经在debian的结构:

 /etc/php5/apache2 /etc/php5/cgi /etc/php5/cli /etc/php5/conf.d 

而且都指向同一个目录:

 /etc/php5/apache2/conf.d -> ../conf.d /etc/php5/cli -> ../conf.d 

/etc/php5/conf.d/mysql.ini由一行组成:

 extension=mysql.so 

所以我的问题是:为什么PHP的MySQL扩展不能正常工作,如果我的configuration包含在php-cli中,正在工作?

非常感谢!

这可能不是configuration问题。 我并不熟悉Debian中的操作(关于升级/降级PHP),但似乎Apache和PHP CLI使用的PHP实际上使用了不同的PHP。

你可以通过在浏览器中执行phpinfo()和命令行上的php -i来validation。 如果Apache和CLI使用相同的PHP,结果应该完全相同(configuration选项相同,编译时间,库启用等)。

假设PHP服务器以mod_php身份运行,最可能的原因是:

1)php.ini文件或.so文件的权限不允许Web服务器uid访问文件

2)networking服务器正在运行chroot

您可以使用'is_readable'轻松地从PHP中testing,并且在php.ini中使用file_get_contents()来检查文件是否包含您期望的内容,而在mysql.so的情况下,使用dl()来加载文件。