PHP 的 MySQL 扩展不起作用

PHP 的 MySQL 扩展不起作用

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

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

该脚本由 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”,以及包含所有配置的 MySQL 部分:SOCKET、LIBS……然后打印“连接成功”。

但是当通过 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”实际上是相同的配置,因为我在 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-cli 中相同的方式包含配置,为什么 PHP 的 MySQL 扩展不工作?

多谢!

答案1

这可能不是配置问题。我不太了解 Debian 中如何操作(关于升级/降级 PHP),但似乎 Apache 和 PHP CLI 使用的 PHP 实际上使用的是不同的 PHP。

您可以通过phpinfo()在浏览器中和php -i命令行上执行来验证这一点。如果 Apache 和 CLI 使用相同的 PHP,则结果应该完全相同(相同的配置选项、编译时间、启用的库等)。

答案2

假设 Web 服务器 PHP 以 mod_php 形式运行,则最可能的两个原因是:

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

2)Web 服务器正在运行 chroot

您可以使用“is_readable”从 PHP 轻松地进行测试,对于 php.ini,使用 file_get_contents() 检查文件是否包含您期望的内容,对于 mysql.so,使用 dl() 加载文件。

相关内容