升级到 7.0.6 版后,Ubuntu 16.04 中的 PHP mysqli 扩展无法运行

升级到 7.0.6 版后,Ubuntu 16.04 中的 PHP mysqli 扩展无法运行

今天早上更新后,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

如果没有更多信息,我只能描述一般原因:

  1. php7.0-mysql软件包未安装,要修复运行sudo apt-get install php-mysql
  2. mysqli模块不知何故被禁用,以修复运行phpenmod mysqli
  3. 您正在使用的 Web SAPI PHP 版本与 PHP CLI 版本不同,您可能已经安装libapache2-mod-php5.6php7.0-cli
  4. 您的 Apache 2.x 配置包含不同的 PHP FPM 版本 (fephp5.6-fpm包) 和 Apache2 模块 (fe libapache2-mod-php7.0)。运行以下命令禁用 FPM a2disconf php5.5-fpm:。
  5. 您用于 Web 的 Web SAPI 具有不同的配置文件,因此未加载 mysqli 模块,要修复此问题,请添加extension=mysqli.so到此自定义配置文件中
  6. 其他地方出了问题,你应该查找日志信息来指出哪里出了问题

要获得更多诊断信息:

  1. 运行“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
    
  2. 对 Web 执行相同操作,只需创建一个简单的页面<?php phpinfo(); ?>并检查 MySQLI 模块的输出。如果已安装,您将看到如下所示的整个部分: 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

相关内容