PHPバージョンがphpinfo()とCLIで異なるのはなぜですか?


27

phpinfo()php -v(CLIで)によって報告されたPHPバージョンの間にミスマッチがあることに気付きました。

phpinfo():  5.5.24
php -v: 5.6.9

Mac OS X 10.10(Yosemite)で作業しており、ライブラリ(php-version)をインストールしてPHPバージョンを管理しようとしています。

ラップトップにインストールされている3つの異なるバージョンを報告します。

  5.4.41
  5.5.25
* 5.6.9

ApacheとCLIの両方で同じバージョンのPHPを設定したいと思います。

どのPHPバージョンが使用するかをApacheに伝えるにはどうすればよいですか?

私は私の中でこの行を書き込もうとしましたhttpd.conf

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

次に:

sudo apachectl restart

しかし、これだけでは問題を解決できません…私のPHP情報には5.5.24があります。



1
@bertieb Questionは他の質問とよく似ています。私はちょうどそれ答えましたが、ここでも特定の問題があります。私も答えようとします。
JakeGould

回答:


14

ここではいくつかの異なる問題がすべてPHPバージョンの混乱という概念の下に隠れているため、できる限り明確に各問題に対処しようとします。まずこれ:

phpinfo()php -v(CLIで)によって報告されたPHPバージョンの間にミスマッチがあることに気付きました。

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLIは、PHP Apacheモジュールとは異なります。

この他の質問への回答で説明しているように、パニックにならないでください!Apacheサーバーが使用しているPHPバージョンが心配な場合phpinfo()は、常に出力に注意する必要があります。Apache PHPモジュールとPHPコマンドラインバイナリは、互いに干渉しない2つの異なるものです。

phpinfo()Apacheで正しいPHPモジュールバージョンを設定することに懸念がある場合の出力に注意してください。

とは言っても、Apacheに正しいPHPモジュールをロードすることにはまだ問題があるようです。

私は私の中でこの行を書き込もうとしましたhttpd.conf

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

Apacheサーバーが正しいPHPモジュールをロードしていることを確認してください。

技術的には正しいように見えますが、これが機能しないことがわかる唯一の理由LoadModule php5_moduleは、Apache configファイルに、その行を設定している値に取って代わる別のディレクティブがあることです。

httpd.confここにある/etc/apache2/httpd.confLoadModule php5_module思いますが、そのファイルを編集する際に見逃した、または気づかなかった別のものがあるかどうかを確認することをお勧めします。Mac OS X 10.9.5の同等のファイルを見ると、行がコメントアウトされていることがわかります(Mac OS X Apache / PHPセットアップを使用していないため)。

#LoadModule php5_module libexec/apache2/libphp5.so

もちろん、あなたの場合はコメントを外します。Web開発用にApacheとPHPを構成する詳細については、このサイトを参照してください。

Mac OS X Apache / PHPの癖の代わりとしてMAMPを使用することを真剣に検討してください。

今では、あなたが何をしようとしているのかわかりませんが、Mac OS XシステムでWeb開発を行っている場合は、コアのMac OS X Webスタックをハッキングするのではなく、MAMPを使用して真剣に検討する必要がありますランニング。

MAMPの利点は、LAMPスタックに相当する極めて生産レベルのMac OS Xであることです。また、実際のWeb開発を対象としているため、すべてのモジュールと構成がセットアップされているはずです。

Mac OS XでのApacheとPHPの中心的な問題は、ソフトウェアが一般的に古くなっていること、構成/調整と管理の苦痛、このような事態が発生した場合のデバッグの頭痛の種です。そして、Mac OS Xのアップデートが来て、ApacheとPHPの慎重に設定された設定が消去されるとどうなりますか?正方形に戻りました。


質問を重複としてマークするのではなく、なぜこの重複に答えたのですか?
Pmpr

@Trixその「重複」は、互いに数日以内に投稿された異なる質問に対する同様の回答だからです。ここ同様のコメント答えるとき、「@ bertieb質問は確かに他の質問と似ています。私はちょうどそれに答えましたが、ここでも特定の問題があります。私も答えようとします。– JakeGould 15年9月12日0:42」1つの質問は、コマンドラインからのPHPの違いについてです。もう1つは、それとPHPモジュールの問題です。
JakeGould

4

問題の解決策を見つけました。編集後、以下/etc/apache2/httpd.confを使用してapacheを再起動しました。

sudo apachectl restart

何らかの理由でこのコマンドを使用すると、Apacheは更新を取得せずhttpd.conf、古い構成をロードしません。

を使用して:

sudo apachectl -k stop
sudo apachectl -k start

すべてのサービスの一種のハード再起動を行い、構成ファイルの更新を読み取り、最後に新しいパスを読み取りますphp5_module

/usr/local/opt/php56/libexec/apache2/libphp5.so

彼の説明@JakeGouldに感謝します。


フラグ/オプションが存在しないことを確認すると-kapachectlコマンドからフラグが削除されるように投稿を編集apachectl -hしました。どこから入手したのかわかりません。また、あなたがやっていることを表明し、物事stopstart片付けている間、奇妙なことは、restartLinuxシステムではまさにそれをするということです。にあるスクリプトをチェックすると/usr/sbin/apachectl(スクリプトなので、テキストエディターを使用して表示できます)、まったく同じように見えます。Mac OS XではLaunchDaemons、Apacheが標準のLinuxと比べて「奇妙」なのかもしれません。とにかく、素晴らしいあなたはこれを解決しました。
JakeGould

ただ、あなたの情報のために私はここに-kフラグを使用してコマンドを見つけました:httpd.apache.org/docs/2.2/stopping.html
サルヴァトーレDibenedetto

あなたは正しいです。/usr/sbin/apachectl(コマンドなしで)の「ヘルプ」出力を調べたところ、明確に述べられてい[-k start|restart|graceful|graceful-stop|stop]ます。LinuxシステムでApacheが動作する方法に慣れているので-kapachectlコマンドで使用するフラグを忘れていたようです。本当の問題は、このようにフラグを追加sudo apachectl restartする必要があるときに、このコマンドで再起動しようとしたことです。-ksudo apachectl -k restart
JakeGould
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.