Apache2 が使用する PHP のバージョンを変更するにはどうすればいいですか?

Apache2 が使用する PHP のバージョンを変更するにはどうすればいいですか?

Ubuntu 10.04、MySQL 5.1、Apache 2.2、PHP 5.2/5.3:

CRM アプリケーションに間違ったバージョンの PHP を使用していることがわかりました。Apache2phpinfo()が使用しているバージョンを確認する簡単なスクリプトの作成方法がわかったので、php.iniWeb サーバーが希望する PHP を使用するように変更してみました。これが私の問題です。どうすればよいかわかりません。

ここで必要なバージョンの PHP をコンパイルしました/etc:

/etc/php-5.2.8/

php.ini-recommendedこの中には、PHP が使用できるように変更を加えて名前を変更したファイルがありましたphp.ini。しかし、ブラウザを開いて履歴を消去し、そのhttp://localhost<CRM dir>/install.phpアドレスに移動すると、ウィザードには、正しいバージョンの PHP を使用していないと表示されます。

に基づく この郵便受けスクリプトを実行した後に表示される PHP のバージョンを変更するには、何をすればよいですかtest.php? つまり、 ではphpinfo()PHP 5.3.2 を実行していると表示されていますが、 にあるコンパイル済みの 5.2.8 バージョンに変更したいのです/etc

答え1

サーバーによっては、PHP ではなく Apache を検討する必要があります。

(RHEL/CentOSの場合)/etc/httpd/conf.d/php.ini

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated web pages.
#
LoadModule php5_module modules/libphp5.so
#
# Causes the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

PHP モジュールが であることがわかりますmodules/libphp5.so

AddHandler php5-script .php拡張子を持つすべてのファイルに対して PHP を実行するように Apache に指示します.php

RPM ベースの OS を使用している場合は、現在のバージョンの PHP をアンインストールし (それが可能であれば)、必要なバージョンを再インストールする方が簡単でしょう。

rpm -qa | grep php

現在インストールされている PHP のバージョンが表示されます。

答え2

すでに別のバージョンの PHP をインストールしている場合は、Apache が使用する php* モジュールを変更するだけで済みます。

たとえば、php5 と php7.0 があります。Apache で php7.0 を使用したい場合は、このモジュールを有効にして、php5 モジュールを無効にするだけです。

sudo a2dismod php5
sudo a2enmod php7.0

答え3

新しい PHP バージョンをインストールし、Apache にそれを使用するように指示するには、主に と の 2 つの方法がありmod_phpますphp-fpm

注記:推奨される方法は でありphp-fpm、多くの新しいディストリビューション (Fedora を含む) ではデフォルトでこれを使用しています。

PHPをApache SAPIモジュールとしてインストールする

こここれは、公式ドキュメントからの Unix システムに関するガイドです。いくつか欠けている点があります (少なくとも私のセットアップでは) ので、手順を説明します。

  1. PHP をソースからビルドします。 の./configure手順では、 を使用します--with-apxs2。これにより、共有 Apache 2 ハンドラー モジュールがビルドされます。

    パスにコマンドが定義されていることを確認するapxsか、そのパスをオプションの値として指定してください (つまり--with-apxs2=/path/to/apxs)。

    たとえば、Apache をシステム全体にインストールしていて、このコマンドも (たとえば、ローカル環境に) インストールしたい場合、Fedora とその派生版では、次のようにインストールできます。

    sudo dnf install httpd-devel
    
  2. ビルドが完了したら (つまり、makeまたは の後make test)、 を実行しますmake install(おそらく root として)。当然、これにより、指定したパス (つまり を使用--prefix) に PHP がインストールされます。

    オプションにより、PHP がインストールされる直前に行われるのは、--with-apxs2PHP apache2handler SAPI モジュールのインストールです。共有オブジェクト ( など/usr/lib64/httpd/modules/libphp.so) を準備し、インストールした PHP のバージョンに応じて、次の行のいずれかを Apache 構成ファイルに追加してモジュール ( など/etc/httpd/conf/httpd.conf) をアクティブ化します (行は「Dynamic Shared Object (DSO) Support」セクションの下に挿入されます)。

    # In the case of PHP8
    LoadModule php_module           /usr/lib64/httpd/modules/libphp.so
    
    # In the case of PHP7
    LoadModule php7_module          /usr/lib64/httpd/modules/libphp.so
    

    注記:PHP バージョン、特にメジャー バージョンをオンにする際は、PHP に使用できるバージョンが 1 つだけであることを確認してくださいLoadModule。そうでない場合、Apache サーバーは起動を拒否します。

PHP を PHP-FPM (FastCGI Process Manager) としてインストールする

まだ未定です。:)

最終ステップ

PHP 8.0以上の追加手順

ディストリビューションがまだ PHP8 をサポートしておらず (例: Fedora 34)、パッケージ マネージャーから Apache2 をインストールした場合は、もう 1 つの手順を実行する必要があります。

問題は、PHP 8.0 以降、Apache2 が SAPI モジュールに対して以前とは異なる識別子を使用することです。これらの識別子は、設定ファイルでmod_phpまたはを使用しているかどうかを検出するために使用されます。PHP5 の場合はおよび であり、PHP7 の場合は および であり、PHP8 の場合は およびです。php-fpmphp5_modulemod_php5php7_modulemod_php7php_modulemod_php

この場合、Apache2 構成ディレクトリ (例/etc/httpd) に移動し、ファイル の編集を開始しますconf.d/php.confIfModuleそこには 2 つのセクションがあります。1 つはphp-fpmを使用しない場合にを有効にするセクションmod_php、もう 1 つはmod_phpを使用する場合 (つまり、LoadModule構成のどこかで を使用する場合) に を有効にするセクションです。これらの条件を更新して、PHP8 もカバーする必要があります。

たとえば、次のことを考慮してください。

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable PHP-FPM configuration
  </IfModule>
</IfModule>

次のように、コア構成をもう 1 つのIfModuleセクションで囲む必要があります。

    <IfModule !mod_php.c>
      # Enable PHP-FPM configuration
    </IfModule>

mod_phpイネーブラー構成セクションでも同様の操作を行います。

最後のステップ

Apache サービスを再起動します。

service httpd restart

今、phpinfo()インストールした新しい PHP バージョンが表示されるはずです。これで満足できるはずです。 :)

答え4

私も同じ問題を抱えていました。バージョン7.3にアップグレードしたにもかかわらず、phpinfo()がバージョン7.0と表示されました。そして、私は単にApacheを再起動する

sudo systemctl restart httpdCentos7で使用しました

関連情報