Como posso obter o Apache para usar o PHP 7.0 (não 7.1)?

4

Ao configurar um vhost Ubuntu 16.04, o Apache usará PHP 7.0.22-2 + ubuntu16.04.1 + deb.sury.org + 4 .

No entanto, depois de tentar resolver alguns conflitos fazendo apt-get dist-upgrade (e falhando), acabei com um sistema mal quebrado. Desde então, consegui reverter a maioria das versões de pacotes para aquelas que são padrão, mas o Apache usa PHP 7.1.8-2 + ubuntu16.04.1 + deb.sury.org + 4 , que é incompatível com algumas bibliotecas PHP que eu preciso.

Até agora, eu tentei:

sudo a2dismod php7.1
sudo a2enmod php7.0
sudo service apache2 restart

No entanto, isso quebra o Apache e ele se recusa a reiniciar:

Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 3 of /etc/apache2/mods-enabled/php7.0.load: Cannot load /usr/lib/apache2/modules/libphp7.0.so

Como posso fazer com que o Apache execute a versão padrão do PHP (PHP 7.0) novamente?

Editar : Um comentário à minha auto-resposta [redigida] abaixo por Dan me fez perceber que ter adicionado o PPA ppa:ondrej/php de terceiros a seguir pode ter algo fazer com o problema.

Então:
Eu adicionei o PPA ppa:ondrej/php ao meu site.

    
por Free Radical 08.08.2017 / 02:11

2 respostas

3

Vou dividir minha resposta em duas partes. A primeira parte descreve como o problema ocorreu, a segunda parte é a resposta real ao seu problema.

Descrição

Disclaimer: A maioria da minha descrição é basicamente especulação, como eu não posso realmente saber o que você fez. Mas é o cenário mais provável, pois não consigo pensar em outra maneira que acabe dando a você o problema descrito por você.

A partir do problema que você descreve, parece que você instalou um PPA de terceiros que instalou o PHP 7.1 em seu sistema. O PPA mais provável é o PPA do Ondrej .

Quando você instalou o PHP pela primeira vez, instalou o seguinte método:

sudo apt install php

O pacote php é apenas um pacote meta e não contém os binários necessários. Depende da versão mais recente do pacote PHP disponível (por padrão, 7.0). Portanto, quando você instala, o pacote php7.0 é instalado junto com as dependências de php7.0 (e libapache2-mod-php7.0 se você tiver apache2 ) e todas essas dependências são marcadas no gerenciador de pacotes como "instaladas automaticamente". / p>

$ apt show php
Package: php
Version: 1:7.0+35ubuntu6
Priority: optional
Section: php
Source: php-defaults (35ubuntu6)
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Debian PHP Maintainers 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 11.3 kB
Depends: php7.0
Supported: 5y
Download-Size: 2,832 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Description: server-side, HTML-embedded scripting language (default)
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).

Eu corajosamente as partes do resultado do comando, o que explica o que acabei de mencionar.

O PHP PPA da Ondrej oferece várias versões do PHP que podem ser instaladas lado a lado. Então, quando você adicionou seu sistema, apt encontrou uma versão mais nova do PHP, então substituiu php7.0 * por php7.1 junto com quaisquer pacotes relacionados que foram instalados automaticamente.

Resposta

Existem dois métodos para corrigir seus problemas.

  1. Remova completamente o PPA de terceiros e reverta para os pacotes PHP padrão

    sudo apt install ppa-purge
    sudo ppa-purge ppa:ondrej/php
    
  2. O PPA da Ondrej oferece várias versões do PHP, para que você possa instalar mais de uma versão ao lado umas das outras. Mas você habilitaria apenas o módulo php7.0 do Apache.

    sudo apt install php7.0 libapache2-mod-php7.0
    sudo a2dismod php7.1
    sudo a2enmod php7.0
    sudo apache2ctl restart
    

    Instalá-los da maneira anterior definiria o pacote php7.0 como "instalado manualmente" em apt , para que não sejam removidos automaticamente sem você removê-los. Não se esqueça de instalar módulos PHP necessários para o php7.0 (como sudo apt install php7.0-mysql )

* php7.0 pode ter sido mantido em seu sistema instalado se você tivesse instalado manualmente um módulo especificamente para o php7.0 (por exemplo php7.0-mysql ).

    
por Dan 08.08.2017 / 14:31
1

Pesquisando packages.ubuntu.com para o arquivo libphp7.0 , encontrei dois pacotes contendo esse arquivo. É um ou ambos instalados? libapache2-mod-php7.0 e / ou libphp7.0-embed ?

Reinstalando libapache2-mod-php7.0 com

sudo apt install --reinstall libapache2-mod-php7.0

veja o que há para ler no pacote. Listar o conteúdo com

dpkg -L libapache2-mod-php7.0

Os resultados da pesquisa:

 » Ubuntu » Packages » Package Contents Search Results

    Search for libphp7.0.so within filenames
    Search for paths ending with libphp7.0.so 

Search in other suite: [trusty] [xenial] [yakkety] [zesty] [artful]

Limit search to a specific architecture: [amd64] [arm64] [armhf] [i386] [powerpc] [ppc64el] [s390x]

You have searched for files named libphp7.0.so in suite yakkety, all sections, and all architectures. Found 2 results.
File    Packages
/usr/lib/apache2/modules/libphp7.0.so   libapache2-mod-php7.0
/usr/lib/libphp7.0.so   libphp7.0-embed
    
por waltinator 08.08.2017 / 02:29