Al configurar un vhost de Ubuntu 16.04, Apache usará
PHP 7.0.22-2+ubuntu16.04.1+deb.sury.org+4 .
Sin embargo, después de intentar resolver algunos conflictos haciendo apt-get dist-upgrade
(y fallando), terminé con un sistema gravemente roto. Desde entonces, logré revertir la mayoría de las versiones de paquetes a las predeterminadas, pero Apache usa
PHP 7.1.8-2+ubuntu16.04.1+deb.sury.org+4 , que es incompatible con algunas bibliotecas de PHP que necesito.
Hasta ahora, he intentado:
sudo a2dismod php7.1
sudo a2enmod php7.0
sudo service apache2 restart
Sin embargo, esto rompe Apache y se niega 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
¿Cómo puedo hacer que Apache vuelva a ejecutar la versión predeterminada de PHP (PHP 7.0)?
Editar :Un comentario a mi [ahora redactada] auto-respuesta a continuación por Dan me hizo darme cuenta de que haber agregado el siguiente PPA de terceros ppa:ondrej/php
puede tener algo que ver con el problema.
Entonces:
He agregado el PPA ppa:ondrej/php
a mi sitio.
Respuesta aceptada:
Dividiré mi respuesta en dos partes. La primera parte describe cómo ocurrió su problema, la segunda parte es la respuesta real a su problema.
Descripción
Por el problema que describe, parece que ha instalado un PPA de terceros que instaló PHP 7.1 en su sistema. El PPA más probable es el PPA de Ondrej.
Cuando instaló PHP por primera vez, lo hizo con el siguiente método:
sudo apt install php
El php
El paquete es solo un metapaquete y no contiene los archivos binarios necesarios. Depende de la última versión del paquete PHP disponible (por defecto 7.0). Entonces, cuando lo instala, el php7.0
el paquete se instala junto con php7.0
dependencias (y libapache2-mod-php7.0
si tienes apache2
) y todas esas dependencias están marcadas en el administrador de paquetes como "instaladas automáticamente".
$ 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).
Puse en negrita las partes del resultado del comando, lo que explica lo que acabo de mencionar.
Relacionado:¿Inicio de sesión remoto con el Administrador de visualización gráfica (Gdm, Lightdm) en Ubuntu?
El PHP PPA de Ondrej ofrece múltiples versiones de PHP que se pueden instalar una al lado de la otra. Entonces, cuando lo agregó a su sistema, apt
Encontré una versión más nueva de PHP, por lo que reemplazó a php7.0
* con php7.1
junto con los paquetes relacionados que se instalaron automáticamente.
Respuesta
Hay dos métodos para solucionar sus problemas.
-
Elimine por completo el PPA de terceros y vuelva a los paquetes PHP predeterminados
sudo apt install ppa-purge sudo ppa-purge ppa:ondrej/php
-
El PPA de Ondrej ofrece múltiples versiones de PHP, por lo que puede instalar más de una versión una al lado de la otra. Pero habilitaría solo el
php7.0
Módulo Apache.sudo apt install php7.0 libapache2-mod-php7.0 sudo a2dismod php7.1 sudo a2enmod php7.0 sudo apache2ctl restart
Instalarlos de la manera anterior establecería el
php7.0
paquete como "instalado manualmente" enapt
, por lo que no se eliminarán automáticamente sin que usted mismo los elimine. No olvide asegurarse de instalar también los módulos PHP que necesite para php7.0 (comosudo apt install php7.0-mysql
)
* php7.0
puede haberse mantenido en su sistema instalado si hubiera instalado manualmente un módulo específico para php7.0 (por ejemplo, php7.0-mysql
).