• ベストアンサー

perlでのCGI

perlでCGIを書くときは最初の行に Content-Type: text/htmlと書くという認識で正しいですよね? 最初の行にその文章を書き二行目は空白にして三行目からスクリプトを書いたのですが なぜか一行目のContent-Type: text/htmlという文章がwebに表示されてしまいます… これはどのようにしたら良いのでしょうか 回答お願い致します。

  • CGI
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
回答No.1

こんにちは。 「Content-Type: text/html」を書いた後に二行目を空白にして三行目からスクリプトを書いたということですが、この時改行(\n)は出力されましたでしょうか。 以下、参考までに例を記載します。 ------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html\n"; print "\n"; print "Hello World!"; ------------------------------------------------- ご参考になりましたら、幸いです。

shiro857
質問者

補足

回答ありがとうございます。 tamato_teaさんのスクリプト書いたところwebページにはこのように表示されました。 #!/usr/bin/perl print "Content-type: text/html\n"; print "\n"; print "Hello World!"; スクリプトに書いた内容が表示されてwebページとして機能していないです。 これは一体何が悪いのでしょうか。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

原因は、CGIスクリプトの拡張子を間違えている。または、CGIを使うという設定が正しく出来ていない。 >perlでCGIを書くときは最初の行に >Content-Type: text/htmlと書くという認識で正しいですよね? が、文字通りの意味であれば、あと、他の方の回答の通り間違いです。

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

通常、CGIのファイルをperl言語などスクリプトで記述する場合 1行目はシェバング行と言って、CGIとして実行するための言語処理系の実行ファイルを 「#!」の後ろにフルパスで記述します 標準的なUNIX系だと「/usr/local/bin/perl」やRedHat系のLinuxでは「/usr/bin/perl」などと記述します 1行目と勘違いされている 「Content-type: text/html\n\n」はブラウザに対する命令(HTTPヘッダと言いたくさんの命令があります)で、これから送るデータはHTMLで記述されたテキストデータですよとブラウザに教えるものです データを送る前に命令の終わりのしるしとして改行コードを2回送信しないと、残りのHTMLデータもブラウザへの命令と思われてしまいます Webに表示と書かれていますが、正確にはブラウザに表示されるということかと思いますが、ブラウザに上記HTTPヘッダが表示されることはありません 表示されるということはソースそのものがおかしい(perlのプログラムで無い)か、CGIの実行環境の体をなしていないかのどちらかです 参考までに基本的な簡単なperlによるCGIの例(4行)を記述しておきます #!/usr/bin/perl print "Content-type: text/html\n\n"; print '<html><body>sample</body></html>'; exit; 以上、ご検討を祈ります

shiro857
質問者

補足

参考のcgiの例を入力しweb上で確認したところスクリプトがそのまま表示されました。 #!/usr/bin/perl print "Content-type: text/html\n\n"; print '<html><body>sample</body></html>'; exit; このように表示されたのですがどこが悪くてできないのでしょうか。

関連するQ&A

  • 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ヘッダーの出力が不要の場合の判断方法を教えていただければと思います。 よろしくお願いいたします。

  • CGI初心者です。設置したいのですがperl5?

    CGI初心者です。あるCGIを設置したいのですが、もしかしてこれはperl5が必要になるんじゃないかと悩み始めました。 というのも、CGI本体は動かず、サポート掲示板にはperlのヴァージョンが低くて使えなかったという発言もありました。 本来はサポート掲示板でお話しする義だとは思うのですが、管理人さんが忙しいのか、先日から書き込みをなさっていません。 エラー報告スクリプトを設置してブラウザで何のエラーが出ているのか見てみました。 以下のような記述です。みなさんにはHTMLソースではないかという人もいますが、私にもそう見えますが、エラー報告スクリプトで出るのはこの表示だけなんです。 CGIスクリプトはKENTさんのYYBBSで、それの設置は手軽にできましたが、スパム対策用のこちらの掲示板はうまくできませんでした。 わかる方いらっしゃったら教えてください。不勉強ですみません。 -------------- Can't locate ./registpl.cgi in @INC (@INC contains: /usr/local/lib/perl5/5.8.9/BSDPAN /usr/local/lib/perl5/site_perl/5.8.9/mach /usr/local/lib/perl5/site_perl/5.8.9 /usr/local/lib/perl5/5.8.9/mach /usr/local/lib/perl5/5.8.9 .) at ./yybbs.cgi line 56. Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS"> <META HTTP-EQUIV="Content-Style-Type" content="text/css"> <STYLE type="text/css"> <!-- body,td,th { font-size:13px; font-family:"MS UI Gothic, Osaka, MS Pゴシック"; } a { text-decoration:none; } a:hover { text-decoration:underline; color:#DAA520; } .n { font-family:Verdana,Helvetica,Arial; } .b { background-color:#FFFFFF; color:#B8860B; font-family:Verdana,Helvetica,Arial; } .f { background-color:#FFFFFF; color:#B8860B; } --> </STYLE> <title>YY-BOARD v5.8 antispam edition v7.7.2 (BBSantispam.pm version 2.1 (2006/09/11)) (設置に関する質問は改造版配布元の掲示板まで)</title></head> <body background="./img/hane_w4.png" bgcolor="#000000" text="#EEE8AA" link="#EEE8AA" vlink="#DAA520" alink="#DAA520"> <font color="#FFFFFF" face="Verdana,Helvetica,Arial">000001</font><br>

    • ベストアンサー
    • CGI
  • perlでHTML出力時の文字コード

    Perlスクリプト中でHTML出力しているのですが、print "Content-type: text/html\n\n";と記述するとEUCで正常に表示され、print "Content-type: text/html; charset=Shift_JIS\n\n";と明示的にSJISを指定すると空白ページが表示されてしまいます。このスクリプトの他の場所ではprint "Content-type: text/html; charset=Shift_JIS\n\n";で正常にSJISで表示されます。どうしてだかわかりません。どなたかご教授お願いします。

  • SSIの『#exec cmd』と『#exec cgi』の違いがよくわかりません

    SSI初心者の者です。 参考書(CGIプログラミング入門/翔泳社)を見ながらCGIとSSIの勉強をしてるのですが、SSIの『#exec cmd』と『#exec cgi』の違いがよくわかりません。 本には前者はPerlスクリプトで後者はCGIスクリプトの場合に使うって書いてあるのですが、この2つってどう違うのですか? 前後の文脈から察するにCGIスクリプトは『print "Content-Type: text/html"』があって、 Perlスクリプトはこれが無いものと読み取れるのですが そうなのでしょうか? 初心者向けに御回答していただけますよう、よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • cgi(perl)でパラメータが渡せない

    以下のプログラムでnum=9が伝わらないので、ミスをご指摘ください。 グラフィカルなアクセスカウンタを表示させようとしていますが うまくいかないのでテキストモードでデバッグしています。 [ /usr/local/apache2/htdocs/gif-view.html ] <html> <head> <meta http-equiv="Content-type:" content="text/html; charset=UTF-8"> <title>gif-view</title> </head> <body> <iframe src="/cgi-bin/gif-test.cgi?num=9"></iframe> <!-- <img src="/cgi-bin/gif-test.cgi?0" width=50 height=50> --> </body> </html> [ /usr/local/apache2/cgi-bin/gif-view.cgi ] permission は 755 にしています。 #!/usr/bin/perl print "Content-Type: text/plain;\n\n"; print "gif-test.cgi\n"; $prm0 = @ARGV[0]; if($prm0 = "") { print "Param is exist\n"; } else { print "Param is empty\n"; 実行結果として gif-test.cgi Param is empty となります。 httpd.conf で Script Alias /cgi-bin/ "/usr/local/apache2/cgi-bin/" を有効にしています。

    • ベストアンサー
    • Perl
  • CGIでファイルが読み込めない

    CGI初心者です。 (osはlinuxです。) #!/usr/local/bin/perl use strict; use CGI; my $file=new CGI; open(DATA,"/home/data.txt"); $file=<DATA>; close=(DATA); print "Content-type: text/html\n\n"; print "data=$file"; このスクリプトで、/home/data.txt(フルパスです)に書かれているデータを1行だけをブラウザで表示させたいのですが、表示できません。 どこがおかしいのか教えてください。 ちなみにdata.txtには実際に「abc」という文字1行しか入れていません。

    • 締切済み
    • CGI
  • Perl CGIの中で # を使ってコメントアウト出来ると思いますが、

    Perl CGIの中で # を使ってコメントアウト出来ると思いますが、 print "Content-type: text/html\n\n"; &aaa ("<p style='color:#eee'>色</p>"); とかで、'color:#eee' の色指定で # の部分が 誤認識される環境は無いでしょうか?

    • ベストアンサー
    • CGI
  • Perlからjavascript構文の出力について

    はじめまして。 現在javascriptを勉強中の者です。 PerlからHTML構文内にjavascript構文を追記し出力しようとしていますが、追記してPerlを実行させただけでInternal Server Errorとなってしまいます。 過去ログをいくつか見させて頂きましたが、自分のソースのどこが悪いのかさっぱりです;; やりたいことは、登録完了ポップアップを表示させるだけです。 表示条件等は別として、まずjavascript構文をソースに追記してポップアップを表示させたいです。 どうか良きアドバイスをお願い致します。 #!/usr/bin/perl require "cgi-lib.pl"; print "Content-type: text/html\n\n"; print qq! <HTML> <HEAD> <META Http-Equiv="Content-Type" Content="text/html;charset=EUC-JP"> <META name="robots" content="noindex,nofollow"> <TITLE>登録画面</TITLE> </HEAD> <BODY> <script type="text/javascript"> <!-- alert("登録完了"); // --> </script> <FORM ACTION="test.cgi" METHOD="post"> <FONT SIZE="4"><B>登録画面</B></FONT>  </BODY> </HTML> !;

    • ベストアンサー
    • Perl
  • PerlでCGIを制作している初学者です。

    PerlでCGIを制作している初学者です。 画像付きのアンケートを作ろうとしているのですが、 その際のページの切り替えがうまくいきません。 普通に1ページに、ボタンやフォームを配置したアンケートは作れるのですが、 自身が作りたいのは、紙芝居のごとく、 1ページ目に画像とアンケートの選択肢であるチェックボックスがあり、 チェックボックス入力後に回答を押すと同時に、配列へチェックボックスの答えを格納し、 2ページ目のアンケートへ移るというものです。 1ページ目や2ページ目のhtmlファイルならびにcgiファイルは用意できているのですが、 1ページ目の返答ボタンをおした際の処理の記述がわかりません。 例えば、 1ページ目 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> <CENTER> <img src="sample.jpg" alt="01" width=800px height=600px> <FORM method="POST" action="post.cgi"><BR> <INPUT type="radio" name="answer" value="010" checked>complete mismatch  <INPUT type="radio" name="answer" value="011">mismatch  <INPUT type="radio" name="answer" value="012">neutral  <INPUT type="radio" name="answer" value="013">match  <INPUT type="radio" name="answer" value="014">complete match  <BR> <BR> <INPUT type="submit" name="submit" value=" SEND "> <BR> </FORM> </CENTER> </BODY> </HTML> と記述し、 post.cgi #!/perl/bin/perl print "Content-type: text/html\n"; print "\n"; read(STDIN, $data, $ENV{'CONTENT_LENGTH'}); print "REQUEST_METHOD : $ENV{'REQUEST_METHOD'}<br>\n"; print "CONTENT_LENGTH : $ENV{'CONTENT_LENGTH'}<br>\n"; print "DATA : $data<br>\n"; としたとき、 1ページ目でsample.jpgについての意見をラジオボタンで選択し、それをpost.cgiにて表示させるというサンプル(ここを後で変数の格納に変えます)ですが、この時、1ページに似た構成の2ページ目のアンケートへのリンクの仕方がわかりません。 イメージ的には、 1ページ目表示→回答を配列[0]に格納→2ページ目表示→回答を配列[1]に格納→・・・ 最終的には、各ページの回答を記録した配列を出力します。 以上のようなことを実現したいのです。 WEBなどを探してみたのですが、1ページにボタンやフォームがたくさん埋め込まれたものは発見したのですが、この紙芝居的なアンケートのヒントになりそうなものが見つかりませんでした。 アドバイスや、忠告などで結構ですので、回答を頂けると幸いです。

    • 締切済み
    • CGI
  • 「 <!--#exec cgi="***.cgi" --> 」が表示されません

    「main.cgi」というファイルを作り、単純にHTMLを表示するだけのCGIファイルを作成しました。 こんな感じ ------------main.cgi------------ #!/usr/local/bin/perl print "Content-type:text/html\n\n"; print <<EOM; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title></title> </head> <body> <略> </body> </html> EOM __END__ -------------------------------- それで、ほかのHTMLファイルに <!--#exec cgi="main.cgi" --> と入力してそのページを見てみると、 [an error occurred while processing this directive] 上の文章が表示されていました。 どうすれば「main.cgi」の内容を表示することができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl