04WebServer サポートBBS の過去ログと、現行ログの「質問スレッド No.5」と「バグ報告・機能追加要望スレッド No.3」を検索対象とします。
掲示板では、Web Patioのスレッドが使われていないので、検索結果で質問と回答の関係が分かり辛いかもしれません。該当するキーワードを含む発言とそれに続く10件の発言を表示するようにしています。
もし検索内容が CGIの設定に関するものであれば、先に以下を読むといいことがあるかもしれません。
04WebServerにおける CGIの設定方法
04WebServerのCGI設定に関して、勘違いと思われる説明をしているサイトがあり、またそれを信じている人がいるようなので、筆者が知り得ることを以下にまとめてみる。内容は、以前 Namazuを動作させようとして調べたときの経験に基づいたものである。
No. 拡張子 ファイルヘッダ CGI実行プログラム 説明 (1) cgi −実行ファイル− %FilePath% %Query% 拡張子 exeを cgiに変更した場合のみ必要 (2) cgi perl %FilePath% %Query% 通常の Perlスクリプト(拡張子 cgi) (3) php php %FilePath% %Query% PHPスクリプト(拡張子 php) (4) pl perl %FilePath% %Query% Perlスクリプト(拡張子 pl) (5) exe −実行ファイル− %FilePath% %Query% exeファイル(拡張子 exe) (6) rb ruby %FilePath% %Query% Rubyスクリプト(拡張子 rb) (7) py python %FilePath% %Query% Pythonスクリプト(拡張子 py) (8) bat %FilePath% %Query% BATファイル(拡張子 bat)
・デフォルトで(1),(2),(3)が設定されるが、(2)と(3)だけあれば Perlと PHPのスクリプトは問題なく動作する。
・では(1)は何かというと、例えば namazu.cgi.exeのように Windowsの実行ファイル(exeのこと)を namazu.cgiのように拡張子 exe を cgiに変更して実行する場合にのみ必要な設定である。この設定があると拡張子が cgiのファイルを実行する前に中身が exeかどうかがチェックされる。もしそうであればコマンドとして実行される。従って、拡張子 exeを cgiに変更したりすることのないほとんどのユーザにとっては無駄な確認を繰り返すことになるので、(1)は迷わずに削除するとよい。
そもそも拡張子を変更しなくても下の(5)の設定を行えば exeのまま CGIを実行可能であり、(1)の設定はほとんど意味がないと筆者は思う。元々は Windowsと unix系システムで HTMLを全く変更することなく使えるようにするための便法ではないかと思う。昨今の自宅Windowsサーバは、unix/Linuxにアップロードする前の確認テストの実施という位置付けでは必ずしもないため、無益な設定をする必要はない。
もし AN HTTPDの使用経験があれば、「EXE形式の実行」というほとんどチェックする必要のない項目と機能的に同じものである。
・(2)は通常の Perlスクリプトを実行するための設定である。perl.exeにパスが通っている(環境変数 PATHに C:\Perl\binが設定されている)場合に有効な記述である。もしパスが通っていないのであれば、C:\Perl\bin\perl.exe %FilePath% %Query% のようにフルパスで記述する(他の拡張子でも同じ。Perlのインストール先は自分の環境に合わせて読み替えることが必要)。
・(3)は PHPスクリプトを実行するための設定であり、PHP4.xの場合の記述である。Perlと違って PHPのインストールではパスが通らないので、(2)と同様に C:\php\php.exe %FilePath% %Query% と書く方が確実である。PHP5.xでは、php-cgi %FilePath% %Query% あるいは C:\php\php-cgi.exe %FilePath% %Query% のように記述する。
・(4)は拡張子が pl の Perlスクリプトを CGIとして実行するときに設定する。
・(5)は C言語などで作成した exe のCGIを実行する場合に必要な設定である。「−実行ファイル−」はなくてもよいかもしれないがあっても構わない。namazu.cgi.exeを exeのまま実行するときはこの設定をする。
・(6),(7)はそれぞれ Ruby, Python のスクリプトを実行するときに設定する。これらの言語は実用的なスクリプトの配布が少ない状況なので(Rubyの tDiaryは有名であるが)、勉強のため試してみたいという人以外には全く必要としないであろう。
・(8)は batのスクリプトを実行するときに設定する。batのスクリプトにお目にかかることはまずないのでこの設定を必要とする人は恐らくいないであろう。
・CGIの判定処理ではリスト(上記のようなテーブル)の上から順番に該当するかどうかの確認が行われるので、cgiや phpのように使用頻度の高いものほど上に置くのがよい。ただし、(1)が必要な場合は(2)の cgiより上位であることや、この下で説明するケースでは順序を間違えると思った通りの動作をしなくなるので要注意である。rb, py, batのように使わないものでも、一番下側に置いておけば、あってもないに等しいであろう。
・以上の(1)〜(8)の説明は全て拡張子によって CGIのタイプを判断するケースであったが、ファイルヘッダを設定することによって例えば以下のようにファイルの拡張子は cgiであるが、スクリプト自体は PHPなので PHPで動作させるといったことも可能になる(説明用の例題なので実際にこのような使い方をするかどうかは問題にはしない)。
以下の例の場合は、拡張子が cgiの PHPスクリプトの 1行目に "php" の文字列を必ず入れること(通常は <?php が入っていると思う)と、同じ拡張子(cgi)を複数回設定することになるのでそれらの順序関係にも十分に注意をすること。つまり、(1')は(2)より上にないと思ったように動作しない。
No. 拡張子 ファイルヘッダ CGI実行プログラム 説明 (1') cgi php php %FilePath% %Query% 拡張子が cgiの PHPスクリプトの場合 (2) cgi perl %FilePath% %Query% 通常の Perlスクリプト(拡張子 cgi) (3) php php %FilePath% %Query% 通常の PHPスクリプト(拡張子 php)
・aspや jsp, Javaサーブレットなどは動作しない。また、ISAPIも現在は未対応である。
・(1)の「cgi −実行ファイル− %FilePath% %Query%」やそれを PHPに変えただけの「php −実行ファイル− %FilePath% %Query%」を設定するように説明しているサイトがあり、あれば動作するようになると真しやか話されたりすることがある。「実行ファイル」の意味を考えれば全く意味のない設定である。あってもスクリプトが動作しなくなるわけではないのでなくてもいいことに気がつかず、あるから動作しているという勘違いをしているのかもしれない。まあ何も騒ぐほどのことはないのだが、あることによって無駄な動作はする。もし、ないと動作しなくなる実例があるのなら教えていただきたい。
・CGIを実行するために必要なその他の設定として「ディレクトリ設定」がある。CGIは全て /cgi-bin の下に置くというのであればディレクトリ /cgi-binの設定をすればよいだけであるが、いろいろな仮想パスで CGIを実行するのであれば CGIを実行するパスを全て「ディレクトリ設定」で定義しておくことが必要である。新規に定義した場合には、基本設定の「説明」「ServerPath」「LocalPath」を設定し、詳細設定の「SSI/CGIを許可」にチェックする。既存のディレクトリを編集するときは、「SSI/CGIを許可」にチェックするだけでよい。このチェックがないとスクリプトのソースが表示されたり、ダウンロードになったりする。
・CGIを実行して「500 Internal Server Error」が表示されるのは「CGI設定」に誤りがあるか、CGIスクリプト自体にエラーの原因があると思われる。「CGIエラー : CGIヘッダーが出力されませんでした」というメッセージには特に意味はなく、その下に表示される「CGIプログラムによるエラー情報」を参考にエラー原因を解消する。ActivePerl 5.8.xを使っているのであれば、エラーメッセージの意味は
http://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/lib/Pod/perldiag.html
を参考にすれば分かる。
・PHP, Ruby, Pythonなどの CGIを動作させるにはそれぞれのインタプリタをインストールする必要がある。インストール方法や必要な設定は、Webサーバプログラムが何であるかには全く関係がないので、筆者が AN HTTPD用に書いたものを参考にしてもらってもよい。また、インターネットで検索すれば説明サイトはいくらでも見つかる。
PHP4: http://homepage1.nifty.com/yito/anhttpd/faq/php.html
PHP5: http://homepage1.nifty.com/yito/anhttpd/faq/php5.html
Ruby: http://homepage1.nifty.com/yito/anhttpd/faq/eruby.html
Python: http://homepage1.nifty.com/yito/namazu/gbook/20050411.1315.html