nginx と Apache では、動かす PHP に違いがあります(Xdebug もお忘れなく)
環境
- Windows 10
- PHP 7.3.10
- Apache 2.4.41
動機
以前のプロジェクトで、nginx で PHP を動かしていました。
今回のプロジェクトでは nginx ではなく Apache で動かすことになったので、ローカルに Apache だけをインストールして既存の PHP を動かそうと思ったのですが、ブラウザからアクセスしてみたところ、PHP が動いていませんでした。
現象
動作確認のために phpinfo() にアクセスしてみたところ、PHP のソースがそのままベタで表示されてしまいました。
原因
以前のプロジェクト(nginx 環境)の PHP をそのまま流用しようと思ったのが間違いでした。
nginx で動作させるため、Non Thread Safe 版の PHP をダウンロードしていた(ことを思い出した)のです。
Apache で動作させるために、Thread Safe 版(TS 版)をダウンロードして解決しました。
やったこと
PHP が動かないので調査したところ、 php7apache2_4.dll が入っていないことが問題のようでした。
これは TS 版にしか入っていないようなので、別途 TS 版をダウンロードして、php7apache2_4.dll だけを既存の Non Thread Safe 版に移植してみましたが、動きませんでした。
更に調査したところ、どうやらその他にも Apache2 系を動かすために必要な ddl が、Non Thread Safe 版には一式含まれていないようです。
結局全部 TS 版に置き換えました。
あとは設定して、
LoadModule php5_module "c:/php/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
# configure the path to php.ini
PHPIniDir "C:/php"
Apache を再起動してやれば、
> httpd -k restart
きちんと動きました。
参考
おまけ
Xdebug も流用しようと思ったところ、こんなエラーが出ました。
Failed loading C:\php\ext\php_xdebug.dll
読み込めないよ、と言われています。所定のパスに php_xdebug.dll はきちんと存在しているのに。
もしやと思って調べたら、ビンゴでした。Xdebug にも Thread Safe 版と Non Thread Safe 版があるみたいです。
(以前 PHP をインストールした際に、Xdebug も合わせてインストールしたため、何も考えずに Non Thread Safe 版を選んでいました)
こちらも動かす PHP に合わせて ddl をダウンロードする必要があるのでご注意ください。
(前述の通り、今回は TS 版の PHP を使用するので、Xdebug も TS 版の ddl に置き換えました)
参考
Author And Source
この問題について(nginx と Apache では、動かす PHP に違いがあります(Xdebug もお忘れなく)), 我々は、より多くの情報をここで見つけました https://qiita.com/ryuco46/items/ea15eb1347e35ffc5b40著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .