GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come ottenere Apache per utilizzare PHP 7.0 (non 7.1)?

Quando si configura un host virtuale Ubuntu 16.04, Apache utilizzerà
PHP 7.0.22-2+ubuntu16.04.1+deb.sury.org+4 .

Tuttavia, dopo aver provato a risolvere alcuni conflitti eseguendo apt-get dist-upgrade (e fallendo), ho finito con un sistema gravemente rotto. Da allora sono riuscito a ripristinare la maggior parte delle versioni dei pacchetti a quelle predefinite, ma Apache utilizza
PHP 7.1.8-2+ubuntu16.04.1+deb.sury.org+4 , che è incompatibile con alcune librerie PHP di cui ho bisogno.

Finora ho provato:

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

Tuttavia, questo interrompe Apache e si rifiuta di riavviarsi:

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

Come posso fare in modo che Apache esegua nuovamente la versione PHP predefinita (PHP 7.0)?

Modifica :Un commento alla mia auto-risposta [ora redatta] di seguito da Dan mi ha fatto capire che aver aggiunto il seguente PPA di terze parti ppa:ondrej/php potrebbe avere qualcosa a che fare con il problema.

Quindi:
ho aggiunto il PPA ppa:ondrej/php al mio sito.

Risposta accettata:

Dividerò la mia risposta in due parti. La prima parte descrive come si è verificato il tuo problema, la seconda parte è la vera risposta al tuo problema.

Descrizione

Dal problema che descrivi, sembra che tu abbia installato un PPA di terze parti che ha installato PHP 7.1 sul tuo sistema. Il PPA più probabile è il PPA di Ondrej.

Quando hai installato PHP per la prima volta, l'hai installato nel seguente metodo:

sudo apt install php

Il php package è solo un metapacchetto e non contiene i binari necessari. Dipende dall'ultima versione del pacchetto PHP disponibile (di default 7.0). Quindi, quando lo installi, il php7.0 il pacchetto è installato insieme a php7.0 's dipendenze (e libapache2-mod-php7.0 se hai apache2 ) e tutte quelle dipendenze sono contrassegnate nel gestore pacchetti come "installate automaticamente".

$ 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).

Ho messo in grassetto le parti del risultato del comando, il che spiega ciò che ho appena menzionato.

Correlati:Accesso remoto con Graphical Display Manager (Gdm, Lightdm) in Ubuntu?

Il PHP PPA di Ondrej offre più versioni di PHP che possono essere installate una accanto all'altra. Quindi, quando l'hai aggiunto al tuo sistema, apt trovato una versione più recente di PHP, quindi ha sostituito php7.0 * con php7.1 insieme a tutti i pacchetti correlati che sono stati installati automaticamente.

Risposta

Esistono due metodi per risolvere i tuoi problemi.

  1. Rimuovi completamente il PPA di terze parti e ripristina i pacchetti PHP predefiniti

    sudo apt install ppa-purge
    sudo ppa-purge ppa:ondrej/php
    
  2. Il PPA di Ondrej offre più versioni di PHP, quindi puoi installare più di una versione una accanto all'altra. Ma abiliteresti solo il php7.0 Modulo Apache.

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

    Installandoli nel modo precedente imposterebbe il php7.0 pacchetto come "installato manualmente" in apt , quindi non verranno rimossi automaticamente senza che tu li rimuovi tu stesso. Non dimenticare di installare tutti i moduli PHP necessari anche per php7.0 (come sudo apt install php7.0-mysql )

* php7.0 potrebbe essere stato mantenuto nel tuo sistema installato se avessi installato manualmente un modulo specifico per php7.0 (ad esempio php7.0-mysql ).


Ubuntu
  1. Come utilizzare l'API di reti E2E?

  2. Come installare Apache, MySQL, PHP (LAMP) su Ubuntu 16.04 LTS

  3. Come forzare Apache a usare HTTPS

  4. Apache 2 non è stato in grado di eseguire il binding, indirizzo già in uso?

  5. Come usare EasyApache 3 con WHM/cPanel

Come installare Apache 2.4 e PHP 7.4 su Amazon Linux

Come installare Apache, MySQL e PHP su Ubuntu 20.04

Come installare Apache e PHP su OpenSUSE 15.1

Come ottenere il programma di installazione Wubi per utilizzare un Iso pre-scaricato?

Come utilizzare PHP 4.4.9 (FastCGI) con Apache e ISPConfig 3 (Debian Wheezy)

Come utilizzare Apache SpamAssassin in cPanel?