在 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() 加载文件。