頑張らない!でも諦めない!必死にならずにええかげん

PHPを1行目の[#!php-cgi]を省いて(書かずに)CGI実行する方法

      2014/11/22

wordpressをローカル環境にインストールし、
レンタルサーバでよく採用されているCGIモードで
実行させるように設定を行う方法のご紹介です。

CGI実行時にcgiプログラム1行目に記述する、
[#!php-cgi]や[#!C:/PHP/php-cgi.exe]を省いて、
CGIプログラムとして認識させ実行する方法です。
環境はwindows環境で行います。

はじめに

wordpressをローカル環境(windows)にインストールし、
PHPが実行できる環境を構築した際に、
phpがApacheモジュールで実行されCGIモードにできない場合はないでしょうか。

wordpressなどのphpファイルの1行目には、
[#!php-cgi]や[#!C:/PHP/php-cgi.exe]などの記述はありません。
しかし、レンタルサーバーなどでは、[#!php-cgi]などを書かずにCGI実行されています。

こうした実行方式を再現したうえで、
ローカル環境に対してPHPを構成しwordpressを動作させます。

私もこれまで、どうしても「Internal Server Error」が解決できず諦めてきました。

結構この問題。
検索してみると、いろいろな情報が玉石混淆となっていて、
どうも明快な答えが得られず、苦労しました。

一言でいえば、私がApacheを理解していないことが原因なのですが、
おそらく同じような境遇に直面している人もおられることと思います。

環境

  • OS windows7 x64
  • Apache 2.2.17(httpd-2.2.17-win32-x86-openssl-0.9.8o.msi)
  • PHP 5.2.17(php-5.2.17-Win32-VC6-x86.msi)

記述方法

htdocsやhtdocs/wpなど公開ディレクトリ上でCGI実行する

htdocsやhtdocs/wpなど公開ディレクトリ内に存在するphpプログラムを、
CGIとして認識させ実行する場合には、httpd.confに対して以下のように記述します。

これはwordpressのindex.phpなどをCGI実行するための方法です。

3行目
拡張子phpファイルは、 cgi-script-handlerハンドラ(カスタム定義)にて処理を行う。

4行目
cgi-script-handlerハンドラ(カスタム定義)では/cgi-bin/php-cgi.exeに対して処理を受け渡す。

17行目
/cgi-bin/に対する要求は[c:\PHP]に対する要求であると読み替える。

11行目
c:\PHPディレクトリはCGIの実行が可能なディレクトリとする。

これによって、phpファイルはすべて、php-cgi.exeに対して渡され実行されるようになります。

実際に実行させるCGIプログラムは、以下のような記述です。
※1行目には[#!php-cgi]や[#!C:/PHP/php-cgi.exe]などの記述はありません。

実際に実行すると以下通り、CGI実行されます。

11_CGIプログラム(php)docrootの#!php-cgiなし・phpinfo確認

CGIプログラム(php)docrootの#!php-cgiなし・phpinfo確認

CGI実行の概念図

このCGI実行の設定を図解すると以下のようなイメージになります。

13_phpのCGIプログラム実行の概念図

phpのCGIプログラム実行の概念図

CGI専用ディレクトリでCGI実行する(補足)

この場合には、プログラム自体の数が限られているのでしょうし、
あまりメリットがないのかもしれませんが、念のため記述しておきます。
少し、ややこしくなります。

21行目
/cgi-dir/に対する要求は[c:\Apache\cgi-bin]に対する要求であると読み替える。

15行目
c:\Apache\cgi-bin内において拡張子cgiのファイルは、
cgi-script-handlerハンドラ(カスタム定義)にて処理を行う。

16行目
cgi-script-handlerハンドラ(カスタム定義)では/cgi-bin/php-cgi.exeに対して処理を受け渡す。

12行目
/cgi-bin/に対する要求は[c:\PHP]に対する要求であると読み替える。

7行目
c:\PHPディレクトリはCGIの実行が可能なディレクトリとする。

これによって/cgi-dir/配下のURLによって要求されたphpファイルは、
すべてphp-cgi.exeに対して渡され実行されるようになります。

実際に実行させるCGIプログラムは、以下のような記述です。
※1行目には[#!php-cgi]や[#!C:/PHP/php-cgi.exe]などの記述はありません。
※下の1行目は表示確認用に区別するための出力です。

プロモーション(btm)

Google or AdMax Promotion (it)

さいごに

知っている人にとっては何ら難しいことはないのか、
あまりwordpress全体をCGI実行する方法をwindowsで!というページが、
あまり見当たらなかった気がしました。検索下手なだけかもしれませんが^^;

この結論の試行錯誤の過程は以下の投稿でご紹介しています。
ローカル環境のPHPをCGI実行させる方法をwindowsで試す

とはいえ、実際CGIモードで動かした際には、
モジュールモードの比べて体感できるくらいレスポンスが遅くなった感じがします。

CGIモードとしての検証用としてはいいのかもしれませんが、
開発環境などで利用するとストレスが多いかな・・・と思うところです。
FastCGIで動作させれば多少は改善するかもしれませんが。

こうした方法の情報が少ないのは、
他の方にとってはあまりにも簡単すぎるのに、
単に自分だけがハマっていたのかもしれません。
誰かのお役に立つとよいのですが・・・^^;

Windows は米国 Microsoft Corporation の米国およびその他の国における登録商標です。

PHPはPHP License (原文)に基づいて、
Open Source Initiativeに承認されライセンスされています。

Apache,Apache Hadoop,Apache Subversion,Hadoop,HDFS,HBase,Hive,Mahout,Pigは、
Apache Software Foundationの米国およびその他の国における登録商標または商標です。
ApacheソフトウェアはApache Software License (原文)および
Apache License, 2.0 (原文)に基づきOpen Source Initiativeに承認されライセンスされています。

*本ページ内に記載されされた各社ブランド、サービス名、商標、登録商標については、
各社ブランドのロゴや商標等に関する帰属についてをご確認ください


最後までお読みいただきありがとうございました。

アイキャッチ画像に利用させて頂いております、各社ブランドのロゴやシンボルに関しては、
各社ブランドのロゴや商標等に関する帰属についてをご確認頂けますようお願い致します。

AdMax Promotion

ブログ記事のご紹介
すべて展開 | すべて省略

Rakuten Promotion

ページ
すべて展開 | すべて省略

 - Apache, PHP, WordPress , , ,

  関連記事