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 文件中 - 导入错误
Web Api 2.0 在邮递员中工作但不在 HTML 页面中