- ベストアンサー
CGIスクリプトの結果が表示しない
- Windows2000 Professional SP4でActivePerl5.8.8とApache2.0.54を使用して、CGIスクリプトを実行しています。
- しかし、IEバージョン5ではページが表示されず、「表示できません」というエラーが出ます。
- Apacheは正常に動作しており、CGIスクリプトも正しく作成されていますが、なぜ結果が表示されないのか原因がわかりません。また、Windows7 64bitでも同じ問題が発生しました。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>Apacheが1-2.cgiをテキストファイルとして読み込むなんてあるのでしょうか。 読み込むも何も、Apacheはファイルを読み込んでどうにかしたりしませんよ。 HTMLもCGIも、そもそも「テキストファイル」なんだから、何も指定してなければそのまま内容が表示されるだけです。 HTMLはブラウザが解釈して表示しますが、PerlスクリプトはWebサーバが内容をPerlに渡し、その結果をPerlから受け取ってブラウザに送ります。大雑把に言えばPerlを経由するかしないかの違いだけです。 >いま何故Apacheはcgiファイルをテキストファイルとして表示するのでしょうか。 その原因を探っている状態が「今」なんですけど・・・ 何か雲行きが怪しくなってきましたが・・・ そもそもそのCGI、ローカルで実行しようとしているんですよね? インターネット上のWebサーバで実行しようとしてるのでは無いですよね? biglobeがどうのや無線LANがどうのとか、ローカル環境では無関係の話が節々に出て来て、話がややこしくなっているのですが・・・ あと、質問文や補足中に「1-2.cgi」や「3-1.cgi」やら書かれても、回答する側は一切分かりません。 参考にしている書籍の内容も一切分かりませんので、内容を書かない限り、話を拗らせるだけです。 端的に言ってしまえば、今回の現象は「Apacheの設定(httpd.confの内容)が正しくない」というのが最も高い。 ただしこれはApache+Active PerlをインストールしたWindowsパソコンでの、ローカル環境で実行しようとしている場合の話。 UNIX/Linux系OSやWebサーバにアップしてなら、話がまた違ってきます。 こちらでも考えられる検証を行いましたが、少なくとも私の環境では 1.cgiモジュールのロード「LoadModule cgi_module modules/mod_cgi.so」が有効ではない(コメントアウトされている)場合。 2.Htdocsディレクトリの設定内に「AddHandler cgi-script .cgi」の行が無い(もしくはコメントアウトの)場合。 以上2つの状況の場合のみ、ソースが表示される事を再現できました。 これは、一般的にソースが表示される場合の確認項目と合致する内容です。 その他に思いつくものも検証しましたが、code 500もしくはcode 403を返してくるので、現象と一致しません。 もう一度「httpd.conf」の内容を確認して下さい。 質問や補足文を見ると、半角英数と全角英数がごちゃ混ぜになっているようですので、全角文字になっていないか等注意して下さい。
その他の回答 (4)
- Kaneyan-R
- ベストアンサー率42% (1353/3155)
>指摘どうり記載されていました。 となると・・・ 私の環境は Apache 2.2 + Active Perl 5.14.2 なので、初期の設定が微妙に違うかもしれませんが・・・確認できるところとすれば、 「LoadModule」の段階で「cgi_module」がLoadされるようになっているかと、「IfModule mime_module」で拡張子cgiがCGIであると設定されているかですかねぇ・・・ LoadModule cgi_module modules/mod_cgi.so #←ここ #※modulesフォルダにmod_cgi.soがあることを確認して下さい。 #※mod_cgi.soが無い場合は記述しないこと。 <IfModule mime_module> ・ ・ ・ AddHandler cgi-script .cgi #←ここ #※↑うちの環境だとコメントアウトでも何故か動くけど・・・ ・ ・ ・ </IfModule> くらいですかね・・・ Perlのインストールディレクトリがおかしい事も考えましたが、その場合は「Internal Server Error」になると思うので、Apacheだけの問題だと思います。
お礼
早速のご返事ありがとうございます。Kneyanさんの指摘を実行してみました、初期設定も間違いないと思います。ノートPCはex.computer:64bit,windows7HomePremiumSP1,メモリー8.0G,corei7,ハードデスク500G,GEFORCE GT 650M・2GBです。当初は3-1.cgiまでうまく作動していました。そのあと何か表示に失敗して私がいろいろ、弄り回して現在のような状態にしてしまいました。参考書の(tendaysホルダー名をheiに変更してありますが)1-2.cgiを実行すると下記ような表示になります。ノートPC,IEのインターネットオプションの設定、無線ランがアイ・オー・データ機器、これらのトラブルかとも考えてしまいます。Apacheが1-2.cgiをテキストファイルとして読み込むなんてあるのでしょうか。や添付CDには問題ないと思います。以下が1-2.cgiです。プロバイダーがbiglobeなので, 最初の1行を#!/usr/local/bin/perlとすればいいのでしょうが参考書の通り記述しました。 このCGIスクリプトを1-2・cgiとしてhtdocs/hei/1-2.cgi,heiホルダーに入れました。 実行URLはURL:http://127.0.0.1/hei/1-2.cgiです。 こんにちは。これはHTML文書の例です。 と表示されるわけですが 下記のように CGIスクリプトがそのまま表示されます。何故でしょう。2000、XPと2台のノーとでアドバイスを受けながら試して、今回7で試みました。新しいperlとApacheの組み合わせがありましたらバージョンと設定を。教えてください。これは最後の方法です。いま何故Apacheはcgiファイルをテキストファイルとして表示するのでしょうか。よろしくお願いします。本当にしつこくてすみません。 #! c:/perl/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; # HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>Hello HTML</title></head>\n"; print "<body><p>こんにちは。これはHTML文書の例です。</p></body>\n"; print "</html>";
- Kaneyan-R
- ベストアンサー率42% (1353/3155)
>数度試してみましたが、結果は同じでした。 となると・・・そもそもApacheの設定がされていないだけではないでしょうか・・・ httpd.confの書き換えやりました? <Directory "~Apache/htdocsのパス~"> ・ ・ ・ Options Indexes FollowSymLinks ・ ・ ・ </Directory> と言うところがあると思いますので Options Indexes FollowSymLinks Options +ExecCGI AddHandler cgi-script .cgi と、2行追加して下さい。 で、あとはApacheをrestart。
お礼
ありがとうございます。Apacheの設定はkaneyanさんの言うように設定してあります。「10日でおぼえるPerlCGI入門教室第2版第6刷2011年発行」を参考書として使用しています。付属CDの中に必要なソフトがありインストールしています。Apacheの設定もkaneyanさんの指摘どうり記載されていました。 kaneyanさんの知識の深さに驚いています。数日前NECノートwindows7proffesinal32bitにwindows XP modeを載せてXPモードで試しましたがNECノートwindows2000sp4と同じ結果でした。次にex.computer windows7HomePremium64bitに付属CDから同じように試しましたが、結果はCGIスクリプトがそのままそっくり表示されました。1か月前にこの参考書でperlとApache をIEから最近のものを64bitにインストールして使用したときは正常に動いたのですが、テキストのアクセスカウンターの項で動作に不具合が出たので(私の操作ミスか入力ミスだと今では確信しています)修正するのに ノートにソフトを再インストールしたりしてかなりそれの繰り返しをやりました。が回復しませんでした。今回質問した時点ではデフォルト状態から始めました。何が原因なのかわかりません。ご教授お願いします。 なお、未完成のホームページのURLが違っていました。URLはhttp://www7b.biglobe.ne.jp/~asunarohei/indexhei.html です。出版社にも同じ内容で問い合わせしていますが、なかなか返事がありません。年寄りにとってkaneyanさん頼みです。お願いします。
- Kaneyan-R
- ベストアンサー率42% (1353/3155)
#! C:/perl/bin/perl ではなく #! C:/perl/bin/perl.exe にしてみては?
お礼
投稿ありがとうございました。 数度試してみましたが、結果は同じでした。 他の方法がありましたら教えてください。
- Gletscher
- ベストアンサー率23% (1525/6504)
回答にはならないと思いますが、そのコートを貼り付けて、ウチのLinuxでやってみたら問題なかったです。私のブラウザはFireFoxです。 Windowsだからかな? #! C:/perl/bin/perl# CGIヘッダーの出力print "Content-type: text/html\n\n";# htmlの出力print "\n"print と表示されるということは、ソースがそのまま出ているように思えますが、その次を見るとそうでもなく、この部分だけですね? perlのインストールしてあるディレクトリーは合っていますか? 改行コードがおかしくないですか? Terapadなら、「ファイル」→「文字/改行コードの指定保存」を見てください。 文字コードは、SHIFT-JISですか? JISですか? EUCですか? 改行コードは、CR+LFですか? CRですか? LFですか? この問題とは関係ないと思いますが、文字コードがSHIFT-JISなら、<head>と</head>の間に、以下の2行を追加した方が良いです。 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <style TYPE="text/css">
お礼
いろいろありがとうございました。 コードの表示がいろいろあるとは知りませんでした。勉強させてもらいました。 残念ながら結果は変わりませんでした。 また、教えてください。
お礼
今回もとてもご面倒見ていただきありがとうございました。残念ながら状況は変わりませんでした。 本当にご親切にしていただきありがとうございました。また質問する機会がありましたらよろしくお願いします。Kaneyan様のご健勝とますますのご活躍をご祈念いたします。 asunarokomata 拝