Ubuntu 16.04の仮想ホストを設定する場合、ApacheはPHP 7.0.22-2 + ubuntu16.04.1 + deb.sury.org + 4を使用します。
しかし、apt-get dist-upgrade
(および失敗)を実行していくつかの競合を解決しようとした後、システムがひどく壊れてしまいました。それ以来、ほとんどのパッケージバージョンをデフォルトにロールバックすることができましたが、ApacheはPHP 7.1.8-2 + ubuntu16.04.1 + deb.sury.org + 4を使用します。必要なPHPライブラリがいくつかあります。
これまで、私は試しました:
Sudo a2dismod php7.1
Sudo a2enmod php7.0
Sudo service Apache2 restart
ただし、これによりApacheが破損し、再起動が拒否されます。
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
ApacheでデフォルトのPHPバージョン(PHP 7.0)を再度実行するにはどうすればよいですか?
編集:Danによる私の[今編集済み]自己回答へのコメントは、次の3番目を追加したことを実感させました。パーティーPPA ppa:ondrej/php
は、問題に何らかの関係がある可能性があります。
そう:
PPA ppa:ondrej/php
をサイトに追加しました。
回答を2つの部分に分けます。最初の部分は問題の発生方法を説明し、2番目の部分は問題に対する実際の回答です。
免責事項:私の説明のほとんどは、あなたが何をしたのか本当に分からないので、基本的には推測です。しかし、それは最も可能性の高いシナリオです。あなたが説明した問題をもたらす別の方法を考えることはできません。
説明した問題から、システムにPHP 7.1をインストールしたサードパーティのPPAをインストールしたようです。最も可能性の高いPPAは OndrejのPPA です。
PHPを初めてインストールしたときは、次の方法でインストールしました。
Sudo apt install php
php
パッケージはメタパッケージにすぎず、必要なバイナリは含まれていません。利用可能なPHPパッケージの最新バージョン(デフォルトでは7.0)に依存します。したがって、それをインストールすると、php7.0
パッケージがphp7.0
の依存関係(およびlibapache2-mod-php7.0
がある場合はApache2
)とともにインストールされ、それらの依存関係はすべてパッケージマネージャーで「自動インストール」。
$ 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 インストール済みサイズ:11.3 kB 依存:php7.0 サポート:5年 ダウンロードサイズ:2,832 B APT-手動インストール:はい APT-ソース:http://archive.ubuntu.com/ ubuntu xenial/main AMD64パッケージ 説明:サーバー側のHTML埋め込みスクリプト言語(デフォルト) PHP(PHPの再帰的な頭字語:Hypertext Preprocessor)は、広く使用されている オープンソース汎用ですWeb開発に特に適したスクリプト言語。 HTMLに埋め込むことができます。 。 このパッケージは依存パッケージであり、Debianのデフォルト _に依存しますPHPバージョン(現在7.0)。
コマンドの結果の各部分を太字にしました。これは、今説明したことを説明しています。
OndrejのPHP PPAは、互いにインストールできる複数のPHPバージョンを提供します。システムに追加すると、apt
がPHPの新しいバージョンを見つけたため、php7.0
*をphp7.1
に置き換え、自動的にインストールされた関連パッケージも含めました。
問題を修正するには2つの方法があります。
サードパーティのPPAを完全に削除し、デフォルトのPHPパッケージに戻します
Sudo apt install ppa-purge
Sudo ppa-purge ppa:ondrej/php
OndrejのPPAは複数のバージョンのPHPを提供するため、複数のバージョンを並べてインストールできます。ただし、php7.0
Apacheモジュールのみを有効にします。
Sudo apt install php7.0 libapache2-mod-php7.0
Sudo a2dismod php7.1
Sudo a2enmod php7.0
Sudo Apache2ctl restart
以前の方法でそれらをインストールすると、php7.0
パッケージがapt
で「手動インストール」として設定されるため、それらを自分で削除しないと自動的に削除されません。 php7.0に必要なPHPモジュールもインストールすることを忘れないでください(Sudo apt install php7.0-mysql
のように)
* php7.0専用のモジュールを手動でインストールした場合、php7.0
はシステムにインストールされたままになる場合があります(たとえば、php7.0-mysql
)。
ファイルlibphp7.0
を packages.ubuntu.com で検索すると、そのファイルを含む2つのパッケージが見つかりました。どちらかまたは両方がインストールされていますか? libapache2-mod-php7.0
および/またはlibphp7.0-embed
?
libapache2-mod-php7.0
を再インストール
Sudo apt install --reinstall libapache2-mod-php7.0
次に、パッケージに何を読むかを確認します。内容をリストする
dpkg -L libapache2-mod-php7.0
検索結果:
» 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