CGIスクリプトの結果が表示しない

このQ&Aのポイント
  • Windows2000 Professional SP4でActivePerl5.8.8とApache2.0.54を使用して、CGIスクリプトを実行しています。
  • しかし、IEバージョン5ではページが表示されず、「表示できません」というエラーが出ます。
  • Apacheは正常に動作しており、CGIスクリプトも正しく作成されていますが、なぜ結果が表示されないのか原因がわかりません。また、Windows7 64bitでも同じ問題が発生しました。
回答を見る
  • ベストアンサー

CGIスクリプトの結果が表示しない

windows2000 proffesinal sp.4でActivePerl5.8.8..819・・・・、Apache2.054の環境で"10日で覚えるPerlCGI"を使用。IEバージョンは5でページを「表示できません」のエラーがときたまでる。 上記環境でApacheは正常に動作。TeraPad使用。CGIスクリプト1-2.cgiとして作成。 #! C:/perl/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; print "<DOCTYPE HTML PUBLIC \n-//W3C//DTD HTML4.01//EN\">\n"; print "<html>\n"; print "<head><title>Hello HTML</title></head>\n";# htmlの出力 print "<body><p>こんにちわ。これはHTML文書の例です。</p></body>\n"; print "</html>\n"; 上記スクリプトを1-2.cgiとしてApaghe2-htdocs-tendaysに保存 IEのURLに:: http://127.0.0.1/tendays/1-2.cgiと入力・・・そして下記の表示が出ました。 #! C:/perl/bin/perl# CGIヘッダーの出力print "Content-type: text/html\n\n";# htmlの出力print "\n"print こんにちわ。これはHTML文書の例です。 \n";print" "; 原因を教えてください。windows7 64bit でもこのようにスクリプトだけが表示されたことがあり(perl,Apacheのバージョンも最近のものを使用)その時は、相談室にお世話になりながら自分の 未熟さにあきれお尋ねしなかったのですが、最後HTML5を習えばのお答えで、今。参考書を買って人通り見たのですが、フォームメールや掲示板はやはり裏でCGIが動作しているので。また古いパソコンで始めたのでしたが最初からつまずきました。doreamweaber もあるのですが、能力がないのに 人様の作成したフりーソフトをスクリプトの意味が分からず貼り付けるのはいささか情けないかなと 考えています。最終的にはそうなると思っていますが、できればsendmailを使用したCGIスクリプトとかんがえています,が。とりあえず一歩一歩づつと思っています。10年以上前に作成したホームページをアップしっぱなしです。メールが送信できません。当時のプロバイダーがocnでその時提供されたもので裏でCGIが動いているなんて知りませんでした。今biglobeです。 自分の作りかけのホームページのURLは http://www7b.biglobe.ne.jo/~asunarohei/indexhei.htmlです。メールのスクリプトを貼り付けたいのです。それと掲示板をリンクさせたいです。 わからないことだらけで、ご迷惑かけますがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Kaneyan-R
  • ベストアンサー率42% (1240/2888)
回答No.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」の内容を確認して下さい。 質問や補足文を見ると、半角英数と全角英数がごちゃ混ぜになっているようですので、全角文字になっていないか等注意して下さい。

asunarokomaru
質問者

お礼

今回もとてもご面倒見ていただきありがとうございました。残念ながら状況は変わりませんでした。 本当にご親切にしていただきありがとうございました。また質問する機会がありましたらよろしくお願いします。Kaneyan様のご健勝とますますのご活躍をご祈念いたします。                                      asunarokomata 拝

その他の回答 (4)

  • Kaneyan-R
  • ベストアンサー率42% (1240/2888)
回答No.4

>指摘どうり記載されていました。 となると・・・ 私の環境は 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だけの問題だと思います。

asunarokomaru
質問者

お礼

早速のご返事ありがとうございます。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% (1240/2888)
回答No.3

>数度試してみましたが、結果は同じでした。 となると・・・そもそもApacheの設定がされていないだけではないでしょうか・・・ httpd.confの書き換えやりました? <Directory "~Apache/htdocsのパス~"> ・ ・ ・ Options Indexes FollowSymLinks ・ ・ ・ </Directory> と言うところがあると思いますので Options Indexes FollowSymLinks Options +ExecCGI AddHandler cgi-script .cgi と、2行追加して下さい。 で、あとはApacheをrestart。

asunarokomaru
質問者

お礼

ありがとうございます。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% (1240/2888)
回答No.2

#! C:/perl/bin/perl ではなく #! C:/perl/bin/perl.exe にしてみては?

asunarokomaru
質問者

お礼

投稿ありがとうございました。 数度試してみましたが、結果は同じでした。 他の方法がありましたら教えてください。

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.1

回答にはならないと思いますが、そのコートを貼り付けて、ウチの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">

asunarokomaru
質問者

お礼

いろいろありがとうございました。 コードの表示がいろいろあるとは知りませんでした。勉強させてもらいました。 残念ながら結果は変わりませんでした。 また、教えてください。

関連するQ&A

  • cgiについて教えて下さい。

    cgiについて教えて下さい。 ■cgiが実行できません。 ・os:windows7(64bit) ・apache2.2.16(windows32bit)※ローカル ・ActivePerl(インストール済み) ※httpd.confファイル(現状) ・Options Index FollowSymLinks Includes ExceCGI ・AllowOverride All ・AddHandler cgi-script.cgi ・AddType text/html.shtml ・AddOutputFilter INCLUDES .shtml ■http://localhost/abc/test.cgi を実行すると表示できず。 ・http://localhost/ にはアクセスできます。 ※windowsネットワーク診断/トラブルシューティングの結果 →リモートデバイスまたはリソースが接続を受け付けません。 ■上記、test.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>"; 以上、宜しくお願い致します。

    • 締切済み
    • CGI
  • 私の作ったCGIスクリプトを見てください。どこが間違えていますか

    アクセスありがとうございます。 Red Hat Linux8.0でサーバを構築してCGIスクリプトを実行しようとしているのですが、どうもうまくいきません。 私が作成したCGIスクリプトは次のようなものです。 ファイル名「first.cgi」 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>First CGI</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "文字を表示するCGIです。\n"; print "</BODY>\n"; print "</HTML>\n"; そして文字コードを「EUC」、改行コードを「LF」に変換しサーバにアップロードしました。 その後SSHでサーバにログインし $ chmod 755 /home/burn/public_html/first.cgi と「first.cgi」に実行権限を追加し $ /home/burn/public_html/first.cgi と作成したCGIスクリプトをテストしてみたのですが : bad interpreter: No such file or directory とエラーメッセージが表示されてしまいます。 「そのようなファイルやディレクトリはありません」というような意味でしょうか。 しかし、そんなはずはないと思います。 $ ls /home/burn/public_html first.cgi と「ls」コマンドを実行すれば「first.cgi」が表示されるのですから。 他に何かする必要があるのですか。 このCGIスクリプトを動作させるにはどうすればいいのか教えてください。

  • cgiでコードがそのまま表示されてしまいす。

    CGIを勉強中なのですがブラウザにコードがそのまま表示されてしまいます。 OSはビスタ、ソフトはActivePeal5.7.8.813とapache_2.0.54を使っております。 会社のパソコン(XP)だとスムーズに行くのですが、自宅のビスタだとそうはなりません。 他の方の質問を参考にいろいろ試したのですが、解決できません。 #! c:/perl/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; こんなかんじでブラウザに表示されます。 どの様な対処方法がありますでしょうか?

    • 締切済み
    • CGI
  • レンタルサーバーでperlのcgiファイルを実行する手順を教えて下さい

    レンタルサーバーでperlのcgiファイルを実行する手順を教えて下さい。 レンタルサーバー会社からは、「cgi-bin」フォルダにcgiファイルを配置(アップロード)すれば ブラウザで見れると説明を受けました。 用意したcgiファイルは以下の内容です。 _____________________________ #! c:/perl64/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; #さいころを振る。 $n = int(rand 6) + 1; #HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0.1//EN\">\n"; print "<html>\n"; print "<head><title>Perlでさいころ</title></html>\n"; print "<body>"; print "<p>さいころの目は<big>$n</big>です。</p>\n"; #御言葉を出力 if($n == 4){ print "<p>ふ、不吉な・・・。4が出ました。</p>\n"; } print "<body></html>"; __________________________________________ 一行目が原因でしょうか。ローカルで作成した、cgiファイルをレンタルサーバーに配置(アップロード)し ブラウザから見たいと考えております。 ご存知の方、教えて頂けないでしょうか。 宜しくお願いします。

  • エラー表示の意味を解説してください

    CGI初心者です。自分の端末でサーバ設定し、テスト中の段階です。htmlファイルはブラウザからきちんと表示されました。が、CGIファイルを表示させようとすると、 CGI エラー - Content-Type ヘッダが正しくありません。 CGI 出力メッセージ: Can't open perl script "C:\www\hiro\ISO": No such file or directory とエラーがでます。ちなみに、スクリプトには #!/usr/bin/perl print"Content-type: text/html\n\n"; print"<HTML>\n"; print"<HEAD>\n"; print"<TITLE>CGI No1</TITLE>\n"; print"</HEAD>"; print"<BODY>\n"; print"CGIプログラム No.1,テスト成功!\n"; print"</BODY>\n"; print"</HEAD>\n"; と記述しました。なにがいけないのか教えてください。

    • ベストアンサー
    • CGI
  • perl CGIでのhttpヘッダー出力 (Content-type:

    perl CGIでのhttpヘッダー出力 (Content-type: text/html\n\n) が不要な場合について perlでCGIを作成しています。 多くの場合は、httpのヘッダー出力(Content-type: text/html\n\)を行っています。 毎回ではないですが、HTTPヘッダーの出力が不要な場合が存在します。 (HTMLにContent-type: text/html\n\が出力され表示されます。) そこで、HTTPヘッダーの出力が不要の場合の判断方法を教えていただければと思います。 よろしくお願いいたします。

  • Apacheでcgiができないんです。

    以下のホームページと同じように、設定したのですが。。。 http://www.futomi.com/lecture/apache/config.html 下のcgiは実行できます。 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>Apache</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<H2>Welcome to my computer, Apache Server!</H2>\n"; print "</BODY>\n"; print "</HTML>\n"; しかし、下のcgiは実行できません。htmlファイル、cgiファイル共に、あるホームページからコピペしたので、間違いないと思います。ここではhtmlファイルは書きませんが、以下のURLです。 http://www2j.biglobe.ne.jp/~apollo/server/apacuse.html #!/usr/local/bin/perl $countfile= "count.dat"; open(IN, "< $countfile"); $count = <IN>; close(IN); $count++; open(OUT,"> $countfile"); print OUT $count; close(OUT); print "Content-type: text/plain\n\n"; print $count;

    • ベストアンサー
    • CGI
  • 普通のhtmlからcgiを呼び出す方法

    なんとか解らないなりにいろいろ勉強しているものです。 よく、普通のHTMLにカウンターなどをつける際に <IMG src="/cgi-local/it-mark.cgi?itservicemark"> とか言うようなかんじでしています。 自分もこのような形でカウンターではなく画像をhtmlに貼りたいのですが、うまく行きません(下記参照) //////////////////////////////////////////// #!/usr/local/bin/perl $itservice_mark = int(itservicemark); # Content-typeヘッダ出力 print "Content-type:text/html\n\n"; # HTML出力 print << "END_OF_HTML"; <IMG src="../image2/common/common-name3.gif" border="0"> END_OF_HTML ///////////////////////////////////////////// このような具わいで作っても普通のhtmlはcgiをよんでくれないのでしょうか?誰か宜しくお願い致します。

    • 締切済み
    • CGI
  • CGI勉強中(初心者です)

    #!/usr/bin/perl print "content-type:text/html\n\n"; print "<HTML>\n"; print "<head><title>CGI</title></head>\n"; print "<BODY>\n"; print "<H1><FONT COLOR=\"#FF0000\">こんにちは</FONT></H1>\n"; print "</BODY>\n"; print "</HTML>\n"; というCGIつくりました。 プロバイダの説明には Perlの場所 /usr/bin/perl または /usr/local/bin/perl となっていますが、 どこにどう置いて(ホームディレクトリでしょうか?)、どうやって起動させてよいのかさっぱりわかりません。 ご教授ください。

    • ベストアンサー
    • CGI
  • cgiが動きません。。。

    つい最近、perlを勉強し始めた超初心者です。 ローカル(?)でcgiを作成したり、動かしたりしていたのですが、ホームページを開設してみようと思い立ちました。 早速、開設はしたものの、問題のcgiがまったく動いてくれません・・・ プロバイダはbiglobeです。まず、テスト用として「kantan.cgi」を用意しました。中身は #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "Hello world\n"; exit; です。ローカルではきちんと表示されます。 biglobeのwebFTPで「/public_html」に転送後、パーミッションを755に変更しました。 「http://www7a.biglobe.ne.jp/~*****/kantan.cgi」を開くと、「ページを表示できません」と表示されてしまいます。 「HTTP 500 - 内部サーバー エラー 」と書いてありますが、私には何のことだかサッパリわかりません。 アドバイスをいただけると助かります。よろしくお願いします。

    • ベストアンサー
    • CGI