A extensão PHP mysqli no Ubuntu 16.04 não funciona após a atualização para a versão 7.0.6

6

Após a atualização desta manhã, o php não funciona mais. Erro:

  

AH01071: Tem erro 'Mensagem PHP: PHP Erro fatal: chamada para indefinido   função mysqli_connect () em /var/www/html/public_html/.../config.php   na linha 2 \ n ', referenciador: link

php -v

  

PHP 7.0.6-9 + donate.sury.org ~ xenial + 2 (cli) (NTS) Copyright (c)   1997-2016 O Grupo Zend Engine do PHP v3.0.0, Copyright (c) 1998-2016   Zend Technologies       com Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, da Zend Technologies

As bibliotecas foram instaladas antes, levaram algum tempo para me adaptar após o upgrade para 16.04

    
por user30424 17.05.2016 / 11:44

1 resposta

15

Sem mais informações, só posso descrever causas gerais:

  1. php7.0-mysql package não está instalado, para corrigir a execução sudo apt-get install php-mysql
  2. mysqli module ficou de alguma forma desativado, para corrigir a execução phpenmod mysqli
  3. Você está usando uma versão SAPI do PHP diferente do PHP, por exemplo. você pode ter instalado libapache2-mod-php5.6 com php7.0-cli
  4. Sua configuração do Apache 2.x contém uma versão diferente do PHP FPM (por exemplo, php5.6-fpm package) e o módulo Apache2 (por exemplo, libapache2-mod-php7.0 ). Desative o FPM executando: a2disconf php5.5-fpm .
  5. O web SAPI, que você está usando para web tem um arquivo de configuração diferente e, portanto, o módulo mysqli não está carregado, para corrigir a inclusão de extension=mysqli.so neste arquivo de configuração customizado
  6. algo mais está quebrado e você deve procurar por mensagens de log indicando o que está quebrado

Para obter mais diagnósticos:

  1. execute 'php -r' phpinfo (); ' e verifique a saída para referências do 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. Faça o mesmo com a web, crie uma página simples com apenas '' e verifique a saída para o módulo MySQLI

Depois de analisarmos o problema, descobrimos que havia uma mistura de PHP 5.5 e PHP 7.0 no sistema que provavelmente confundia o Apache2. Como uma recomendação geral, eu recomendaria começar com uma versão do PHP para depurar e limpar o (s) outro (s).

Para remover completamente uma versão específica do PHP, você pode limpar o phpX.Y-common package que irá extrair todas as outras dependências reversas:

Exemplo:

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
    
por oerdnj 17.05.2016 / 23:25