Apache2.4.3上でPHP5.4.7を、間違えてCGIとして動かそうとしてハマった

WordPressをいじるために、Wondows7上に「Apache + PHP」の環境を準備していてハマった。

Apache起動して、phpinfo()を表示させようとしたら、InternalServerErrorとかになる。
Apacheのエラーログ見てみると、スクリプトの頭に#!ってつけろと言われた。

~~/phpinfo.php is not executable; ensure interpreted scripts have "#!" or "'!" first line
 ~~(9)Bad file descriptor: [client ::1:49361] AH01222: don't know how to spawn child process: ~~/phpinfo.php

PerlとかPythonのCGIスクリプトは、確かに#!/usr/bin/perlとかって書くけど、phpinfo()のスクリプトにはいらないはず。
が、いろいろ調べてみてもいまひとつわからず。。
ためしに、スクリプトの頭に#!C:\[PHPインストール先]\php.exeと書いてみると、なんか実行された。がブラウザの画面は、HTMLがそのまま表示された感じになってる。

わけわかんね。

で、タスクマネージャでhttpd.exeのプロセスをよく見ると、SYSTEMユーザで起動していた。
そういえば僕は、環境変数のPATHにphp.exeのディレクトリを追加するときに、ユーザの環境変数に追加していた。
システム環境変数のほうに記載しておかないと、SYSTEMユーザのPATHに設定が反映されていなくて、php.exeを見つけられないのかも!?
とおもってPATH設定をいじってみたけどダメ、、
ダメもとでPC再起動とかしてみたけど、やはりダメ。

Apache+PHPの環境は、昔WindowsXP上で触ったことあったし、こんなところでハマるはずねーよ。と途中で切れそうになりながら、調べていくとこれが原因だった。

AddHandler cgi-script .cgi .php

cgi-scriptとしてphpファイルを認識させているせいで、単体のスクリプトを実行するときのように、ファイルの頭に#!~が必要になっていたみたい。なんだこりゃってかんじ。
とりあえず、phpの記述を消してみたらうまくいった。

AddHandler cgi-script .cgi

PythonやPerlの場合はCGIとして動かすけど、PHPはCGIじゃないってことなんだろうか。
言語の違いではなくて、動作モードの違いかな?
ごっちゃになってる?


9/30追記

> タスクマネージャでhttpd.exeのプロセスをよく見ると、SYSTEMユーザで起動していた。

これ、やっぱり大事だった。php.exeへのPathの設定は、ユーザの環境変数ではなくシステム環境変数のほうに設定しておく必要がある。

PHPを動かすだけであれば、ユーザの環境変数のほうに設定しても大丈夫そうな感じだった(phpinfoが見れた)んだけれど、そのあとWordPressをインストールしようとしてエラーが出た。

「お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。」

php.iniの中でMySQLのextemsionを読込ませる設定がうまく有効にならないみたいで、wordpressからDBへの接続がうまくいかなかった。phpinfoを見る限り、MySQL用のモジュールは読み込まれているみたいだったんだけど・・・

で、システム環境変数のPATHに、phpへのパスを追加したら、wordpressがうまく動くようになった。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s