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実行するための方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<Directory "C:/Apache/htdocs"> Options None AddHandler cgi-script-handler php Action cgi-script-handler /cgi-bin/php-cgi.exe AllowOverride None Order allow,deny Allow from all </Directory> # PHP5/CGI <Directory "C:/PHP/"> Options ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "C:/PHP/" # PHP5/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]などの記述はありません。
1 |
<?php phpinfo(); ?> |
実際に実行すると以下通り、CGI実行されます。
CGI実行の概念図
このCGI実行の設定を図解すると以下のようなイメージになります。
CGI専用ディレクトリでCGI実行する(補足)
この場合には、プログラム自体の数が限られているのでしょうし、
あまりメリットがないのかもしれませんが、念のため記述しておきます。
少し、ややこしくなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<Directory "C:/Apache/htdocs"> (省略) </Directory> # PHP5/CGI <Directory "C:/PHP/"> Options ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "C:/PHP/" # PHP5/CGI <Directory "C:/Apache/cgi-bin/"> AddHandler cgi-script-handler cgi Action cgi-script-handler /cgi-bin/php-cgi.exe AllowOverride All Order allow,deny Allow from all </Directory> ScriptAlias /cgi-dir/ "C:/Apache/cgi-bin/" |
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行目は表示確認用に区別するための出力です。
1 2 |
<p>C:\Apache\cgi-binで実行しています。</p> <?php phpinfo(); ?> |
さいごに
知っている人にとっては何ら難しいことはないのか、
あまり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に承認されライセンスされています。
関連記事
-
WordPressサイドバーウィジェットにAdSenseユニットを追加
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
ウィジェットでのPHP実行にPHP Code Widget_v2.2-wordpressプラグインを利用
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
StatCounter無料アクセス解析の利用にStatCounter_v1.6.5-wordpressプラグインを利用
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
Google+プロフィール(バッジ)をGoogleDevelopers推奨方法で設置する
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
WordPressサイドバーにTwitter™タイムライン(timeline)ウィジェットを表示する
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
DisqusCommentとZenbackの同時利用時の位置入れ替え
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
指定したWordPressカテゴリやタグの投稿を検索にインデックスさせない設定方法
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
(復旧可能)私はこうして「JetPackのサイト統計がリセットされた」
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
WordPressのアクセス解析にWP Google Analytics_v1.4.0-プラグインを利用
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
JetPack統計情報で指定した記事の日別アクセスを開く方法
Google or AdMax Promotion(it) 禁断の機能がau公式 …