PHP mysqli 在命令行中工作,但在页面上不起作用


PHP mysqli works in command line, but not on pages

Red Hat Linux Server, Apache 2.2, PHP 5.5.4

当我在命令行中运行它时,一切似乎都很好:

php -r '$mysqli = new mysqli("127.0.0.1", "un", "pw", "things", "3306"(;'

同时,我有一个.php文档无法运行。我收到此错误...

PHP 致命错误:在第 2 行的 [/path/to]/vars.php 中找不到类 'mysqli'

从此代码:

<?php
    $mysqli = new mysqli("localhost", "un", "pw", "things", "3306");
?>

其他.php页面(不使用 mysqli(工作正常。知道这里发生了什么吗?提前谢谢。

就像我说的,今天我在Apache 2.4,PHP 5.5.12,Windows Server 2008中遇到了完全相同的问题。
但我能够解决这个问题。

诊断
我在命令提示符和 Web 服务器/浏览器上运行phpinfo(),并注意到 php.ini 文件的路径在两者中都不同。现在,我意识到我需要强制设置Apache中php.ini文件的路径。

解决方案
我通过指向我的 Apache 服务器上正确的 php.ini 和 dll 文件来解决此问题。在httpd.conf文件中,我按顺序编写了这些行。

PHPIniDir "C:/path/php/php5.5.12"
LoadFile "C:/path/php/php5.5.12/php5ts.dll"
LoadModule php5_module "C:/path/php/php5.5.12/php5apache2_4.dll"  

仅第一行就解决了这个问题。

我在Unix Stack Exchange上问了几乎相同的问题;这就是解决问题的方式。

有时重新启动 Apache 即使在重新启动后也没有效果,但停止 httpd 服务并重新启动它对我有用:

在费多拉

sudo systemctl stop httpd && sudo systemctl start httpd

在没有systemd的系统(如 Ubuntu(上,您可能可以使用这样的东西(没有测试它(:

sudo service apache2 stop && sudo service apache2 start

参考:如何在 Fedora 上安装 php + mysql?

CLI(命令行(运行php是从web服务器中定义的。

U应该在两者中启用mysqli扩展。

通常,如果安装了它,您可以进入"php.ini"并取消注释"mysqli"行。 在某些安装中,有一个用于Apache的"php.ini"副本和另一个用于命令行的副本。 我认为它们都位于"/etc/php5/"下的某个地方。