【问题标题】:PHP mysqli works in command line, but not on pagesPHP mysqli 在命令行中工作,但不在页面上
【发布时间】:2026-02-15 12:40:01
【问题描述】:

红帽 Linux 服务器、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)工作正常。知道这里发生了什么吗?提前致谢。

【问题讨论】:

  • 你应该在你的配置文件中加载扩展。
  • Lajos:在哪里可以找到配置文件?
  • immullatin:谢谢,我已经看过那个帖子了,但它并没有解决我的问题。 mysqli 已安装并在 php.ini 中引用。
  • 可能没有在基于 SAPI 的 php 安装程序(嵌入网络服务器)中启用 mysqli,但在基于 CLI 的版本中启用了它,两者都使用不同的 .ini 文件。

标签: php apache mysqli


【解决方案1】:

就像我说的,今天我遇到了与 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"  

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

【讨论】:

    【解决方案2】:

    从 CLI(命令行)运行 php 与网络服务器不同。

    我们应该同时启用 mysqli 扩展。

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

    【讨论】:

    • 我也面临着与 Apache 2.4、PHP 5.5.12、Windows Server 2008 完全相同的问题。您能否提供有关 Apache 的 ini 文件的更多信息?我找不到它。
    • 最后,我能够解决这个问题。解决方案如下。
    【解决方案3】:

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

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

    在 Fedora 上

    sudo systemctl stop httpd && sudo systemctl start httpd
    

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

    sudo service apache2 stop && sudo service apache2 start
    

    参考:How to install php + mysql on Fedora?

    【讨论】: