今天早上更新后,php 不再工作。错误:
AH01071:出现错误‘PHP 消息:PHP 致命错误:在 /var/www/html/public_html/.../config.php 第 2 行中调用未定义的函数 mysqli_connect()\n’,引用者:http://localhost/public_html/
php-v 命令
PHP 7.0.6-9+donate.sury.org~xenial+2 (cli) ( NTS ) 版权所有 (c) 1997-2016 PHP Group Zend Engine v3.0.0,版权所有 (c) 1998-2016 Zend Technologies 与 Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2016,由 Zend Technologies 提供
这些库是之前安装的,在 dist 升级到 16.04 后我花了很长时间才适应
答案1
如果没有更多信息,我只能描述一般原因:
php7.0-mysql
软件包未安装,要修复运行sudo apt-get install php-mysql
mysqli
模块不知何故被禁用,以修复运行phpenmod mysqli
- 您正在使用的 Web SAPI PHP 版本与 PHP CLI 版本不同,您可能已经安装
libapache2-mod-php5.6
了php7.0-cli
- 您的 Apache 2.x 配置包含不同的 PHP FPM 版本 (fe
php5.6-fpm
包) 和 Apache2 模块 (felibapache2-mod-php7.0
)。运行以下命令禁用 FPMa2disconf php5.5-fpm
:。 - 您用于 Web 的 Web SAPI 具有不同的配置文件,因此未加载 mysqli 模块,要修复此问题,请添加
extension=mysqli.so
到此自定义配置文件中 - 其他地方出了问题,你应该查找日志信息来指出哪里出了问题
要获得更多诊断信息:
运行“php -r'phpinfo();'并检查输出中的 MySQL 引用:
$ php -r 'phpinfo();' | grep -i mysqli /etc/php/5.6/cli/conf.d/20-mysqli.ini, mysqli MysqlI Support => enabled mysqli.allow_local_infile => On => On mysqli.allow_persistent => On => On mysqli.default_host => no value => no value mysqli.default_port => 3306 => 3306 mysqli.default_pw => no value => no value mysqli.default_socket => no value => no value mysqli.default_user => no value => no value mysqli.max_links => Unlimited => Unlimited mysqli.max_persistent => Unlimited => Unlimited mysqli.reconnect => Off => Off mysqli.rollback_on_cached_plink => Off => Off API Extensions => mysql,mysqli,pdo_mysql
对 Web 执行相同操作,只需创建一个简单的页面
<?php phpinfo(); ?>
并检查 MySQLI 模块的输出。如果已安装,您将看到如下所示的整个部分:
进一步研究该问题后,我们发现系统中混合使用了 PHP 5.5 和 PHP 7.0,这可能会使 Apache2 感到困惑。作为一般建议,我绝对建议从一个 PHP 版本开始调试并清除其他版本。
要完全清除特定的 PHP 版本,您可以清除phpX.Y-common
将拉取所有其他反向依赖项的包:
例子:
apt-get purge php5.5-common # to remove PHP 5.5
apt-get purge php5.6-common # to remove PHP 5.6
apt-get purge php7.0-common # to remove PHP 7.0
# and to remove old php5 packages:
apt-get purge php5-common # to remove old PHP 5.x packages