web-dev-qa-db-fra.com

PHP L'extension mysqli sous Ubuntu 16.04 ne fonctionne plus après la mise à niveau vers la version 7.0.6

Après la mise à jour de ce matin, php ne fonctionne plus. Erreur:

AH01071: Erreur rencontrée 'message PHP: PHP Erreur fatale: appel de la fonction non définie mysqli_connect () dans /var/www/html/public_html/.../config.php à la ligne 2\n', référant : http: // localhost/public_html /

php -v

PHP 7.0.6-9 + donate.sury.org ~ xenial + 2 (NTS) Copyright (c) 1997-2016 Le PHP Group Zend Engine v3.0.0, Copyright (c) 1998- 2016 Zend Technologies avec Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, par Zend Technologies

Les bibliothèques ont été installées auparavant, il m'a fallu un certain temps pour m'adapter après la mise à niveau vers 16.04

7
user30424

Sans plus d'informations, je ne peux que décrire des causes générales:

  1. Le paquet php7.0-mysql n'est pas installé, pour corriger l'exécution Sudo apt-get install php-mysql
  2. Le module mysqli est en quelque sorte désactivé pour corriger l'exécution phpenmod mysqli
  3. Vous utilisez une version SAPI PHP web différente de celle que vous avez PHP CLI, par exemple. vous avez peut-être installé libapache2-mod-php5.6 avec php7.0-cli
  4. Votre configuration Apache 2.x contient une version différente de PHP FPM (par exemple, le package php5.6-fpm) et d'un module Apache2 (par exemple, libapache2-mod-php7.0). Désactivez le FPM en exécutant: a2disconf php5.5-fpm.
  5. Le site Web SAPI que vous utilisez pour le Web a un fichier de configuration différent et donc le module mysqli n'est pas chargé. Pour corriger, ajoutez extension=mysqli.so à ce fichier de configuration personnalisé.
  6. quelque chose d'autre est cassé et vous devriez rechercher des messages de log indiquant ce qui est cassé

Pour obtenir plus de diagnostics:

  1. lancer `php -r 'phpinfo ();' et vérifiez la sortie pour les références 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. Faites la même chose avec le Web, créez une page simple avec juste "et vérifiez le résultat pour le module MySQLI

Après un examen plus approfondi du problème, nous avons découvert qu’il existait un mélange de PHP 5.5 et de PHP 7.0 dans le système, ce qui confondait probablement Apache2. En tant que recommandation générale, je recommanderais certainement de commencer par une version PHP pour déboguer et purger le (s) autre (s).

Pour purger complètement une version spécifique de PHP, vous pouvez purger le package phpX.Y-common qui extraira toutes les autres dépendances inverses:

Exemple:

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