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

Posted

技术标签:

【中文标题】PHP mysqli 在命令行中工作,但不在页面上【英文标题】:PHP mysqli works in command line, but not on pages 【发布时间】:2013-10-18 19:29:55 【问题描述】:

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

【问题讨论】:

你应该在你的配置文件中加载扩展。 看看这个:***.com/questions/666811/… Lajos:在哪里可以找到配置文件? immullatin:谢谢,我已经看过那个帖子了,但它并没有解决我的问题。 mysqli 已安装并在 php.ini 中引用。 可能没有在基于 SAPI 的 php 安装程序(嵌入网络服务器)中启用 mysqli,但在基于 CLI 的版本中启用了它,两者都使用不同的 .ini 文件。 【参考方案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?

【讨论】:

以上是关于PHP mysqli 在命令行中工作,但不在页面上的主要内容,如果未能解决你的问题,请参考以下文章

Python plotly 在命令行中工作,但不在 python 文件中 - 导入错误

获取在 HTML 页面中工作但不在 JS 中工作 [重复]

Web Api 2.0 在邮递员中工作但不在 HTML 页面中

CoreLocation 应用程序在模拟器中工作但不在设备上

请求在CURL中工作但不在Ajax中工作

地理定位离子在浏览器测试中工作但不在android上