web-dev-qa-db-ja.com

ApacheでPHP 7.0(7.1ではなく)を使用するにはどうすればよいですか?

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をサイトに追加しました。

6
Free Radical

回答を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つの方法があります。

  1. サードパーティのPPAを完全に削除し、デフォルトのPHPパッケージに戻します

    Sudo apt install ppa-purge
    Sudo ppa-purge ppa:ondrej/php
    
  2. 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)。

8
Dan

ファイルlibphp7.0packages.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
1
waltinator