LoginSignup
2
0

More than 3 years have passed since last update.

nginx と Apache では、動かす PHP に違いがあります(Xdebug もお忘れなく)

Posted at

環境

  • 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 版に置き換えました。

あとは設定して、

httpd.conf
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 に置き換えました)

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0