web-dev-qa-db-ja.com

PHPバージョン7.0.6へのアップグレード後にUbuntu 16.04のmysqli拡張が機能しない

今朝の更新後、phpは機能しなくなりました。エラー:

AH01071:エラー 'PHPメッセージ:PHP致命的エラー:行2\nの/var/www/html/public_html/.../config.phpの未定義関数mysqli_connect()の呼び出し、リファラー: http:// localhost/public_html /

php -v

PHP 7.0.6-9 + donate.sury.org〜xenial + 2(cli)(NTS)Copyright(c)1997-2016 The PHP Group Zend Engine v3.0.0、Copyright(c)1998- 2016 Zend Technologies with Zend OPcache v7.0.6-dev、Copyright(c)1999-2016、by Zend Technologies

ライブラリは以前にインストールされていましたが、16.04へのdist-upgradingの後、適応するのにかなり時間がかかりました

7
user30424

詳細情報なしでは、一般的な原因のみを説明できます。

  1. php7.0-mysqlパッケージはインストールされていません。修正するにはSudo apt-get install php-mysqlを実行します
  2. mysqliモジュールは何らかの理由で無効になり、実行を修正しましたphpenmod mysqli
  3. 使用しているWeb SAPI PHPバージョンとは異なるPHP CLI、f.e。 libapache2-mod-php5.6とともにphp7.0-cliをインストールした可能性があります
  4. Apache 2.x設定には、異なるPHP FPMバージョン(f.e. php5.6-fpmパッケージ)とApache2モジュール(f.e. libapache2-mod-php7.0)が含まれています。 a2disconf php5.5-fpmを実行して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でも同じことを行い、「 '」だけで簡単なページを作成し、MySQLIモジュールの出力を確認します

さらに問題を調査した結果、システムにPHP 5.5とPHP 7.0が混在しており、Apache2を混乱させている可能性があることがわかりました。一般的な推奨事項として、1つの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
16
oerdnj