Ubuntu 10.04、MySQL 5.1、Apache 2.2、PHP 5.2/5.3:
CRM アプリケーションに間違ったバージョンの PHP を使用していることがわかりました。Apache2phpinfo()
が使用しているバージョンを確認する簡単なスクリプトの作成方法がわかったので、php.ini
Web サーバーが希望する 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 システムに関するガイドです。いくつか欠けている点があります (少なくとも私のセットアップでは) ので、手順を説明します。
PHP をソースからビルドします。 の
./configure
手順では、 を使用します--with-apxs2
。これにより、共有 Apache 2 ハンドラー モジュールがビルドされます。パスにコマンドが定義されていることを確認する
apxs
か、そのパスをオプションの値として指定してください (つまり--with-apxs2=/path/to/apxs
)。たとえば、Apache をシステム全体にインストールしていて、このコマンドも (たとえば、ローカル環境に) インストールしたい場合、Fedora とその派生版では、次のようにインストールできます。
sudo dnf install httpd-devel
ビルドが完了したら (つまり、
make
または の後make test
)、 を実行しますmake install
(おそらく root として)。当然、これにより、指定したパス (つまり を使用--prefix
) に PHP がインストールされます。オプションにより、PHP がインストールされる直前に行われるのは、
--with-apxs2
PHP 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-fpm
php5_module
mod_php5
php7_module
mod_php7
php_module
mod_php
この場合、Apache2 構成ディレクトリ (例/etc/httpd
) に移動し、ファイル の編集を開始しますconf.d/php.conf
。IfModule
そこには 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 httpd
Centos7で使用しました