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.
-
Rimuovi completamente il PPA di terze parti e ripristina i pacchetti PHP predefiniti
sudo apt install ppa-purge sudo ppa-purge ppa:ondrej/php
-
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" inapt
, 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 (comesudo 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
).