Ubuntu 16.04 中的 PHP mysqli 扩展在升级到 7.0.6 版后不起作用

use*_*424 7 php apache2 16.04 php7

今天早上更新后,php 不再起作用。错误:

AH01071: 得到错误“PHP 消息:PHP 致命错误:调用 /var/www/html/public_html/.../config.php 中的未定义函数 mysqli_connect() 在第 2 行\n”,引用:http://localhost /public_html/

php -v

PHP 7.0.6-9+donate.sury.org~xenial+2 (cli) ( NTS ) 版权所有 (c) 1997-2016 The PHP Group Zend Engine v3.0.0,版权所有 (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2016,由 Zend Technologies

之前安装过这些库,dist-upgrade 到 16.04 后花了我相当长的时间来适应

oer*_*dnj 17

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

  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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 对 web 做同样的事情,创建一个简单的页面,只用 `' 并检查 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
Run Code Online (Sandbox Code Playgroud)