GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo hacer que Apache use Php 7.0 (no 7.1)?

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.

  1. 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
    
  2. 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" en apt , 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 (como sudo 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 ).


Ubuntu
  1. ¿Cómo usar la API de redes E2E?

  2. Cómo instalar Apache, MySQL, PHP (LAMP) en Ubuntu 16.04 LTS

  3. Cómo forzar a Apache a usar HTTPS

  4. Apache 2 no se pudo vincular, ¿la dirección ya está en uso?

  5. Cómo obtener versiones de MySQL/Apache/PHP

Cómo instalar Apache 2.4 y PHP 7.4 en Amazon Linux

Cómo instalar Apache, MySQL y PHP en Ubuntu 20.04

Cómo instalar Apache y PHP en OpenSUSE 15.1

¿Cómo hacer que el instalador de Wubi use un Iso descargado previamente?

Cómo usar PHP 4.4.9 (FastCGI) con Apache e ISPConfig 3 (Debian Wheezy)

¿Cómo usar Apache SpamAssassin en cPanel?