手打ちしたコードがエラーになってしまう現象

このQ&Aのポイント
  • 手打ちしたコードがエラーになってしまう現象について調査しています。Windowsで参考書のコードを手打ちして実行するとブラウザでサーバーエラーが発生しますが、参考書のサンプルコードをUnix機にアップして実行すると問題ありません。どうしてこのような現象が起きるのか疑問です。
  • 手打ちしたコードと参考書のコードは同じ内容&シンタックスエラーがないのに、ブラウザで確認するとサーバーエラーが出てしまいます。サンプルコードを上記の方法で実行すると正常に表示されるため、文字コードの問題を疑っています。
  • 手打ちしたコードがエラーになってしまう現象について調査中です。Windowsで参考書のコードを手打ちして実行するとブラウザでサーバーエラーが発生しますが、参考書のサンプルコードをUnix機にアップして実行すると問題ありません。文字コードの問題が原因かもしれないと考えています。
回答を見る
  • ベストアンサー

手打ちしたコードがエラーになってしまう現象

こんにちは。 ActivePerlの参考書を使っています。 会社ではSolarisにApacheがあるので、普段から使用しているWindowsで 参考書のコードを手打ちで作り、それを(tera termで)viエディター上に貼り付けして、ファイルを 作成実行しているのですが、手打ちしたコードと参考書のコードでは、 同じ内容&シンタックスエラーもでないのに、ブラウザで確認しようとすると サーバーエラー(500)が出てしまいます。 それで、参考書に添付されているサンプルコードを(内容自体はいじりません)、 上記の方法でUnix機にアップして実行すると上手く表示されます。 diffコマンドで比較してもカンマの位置とか、見やすい様にスペースを入れている、 コメントの描写が異なっているだけなのですが、どうしてこんな現象があるのでしょう?? 文字コードが原因だと睨んでいるのですが、このような現象はありえますでしょうか?? 以下に手打ちしたコードを載せて置きます。 (アクセスカウンターを表示) ----------------------------------------------- #!/usr/local/bin/perl $COUNTFILE='./count.dat'; open(FILE, "+<$COUNTFILE") or die("Err"); eval{ flock(FILE, 2); }; $cnt = <FILE>; seek(FILE,0,0); print FILE ++$cnt; close(FILE); print <<EOF; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>あくせすかうんと</title></head> <body> <p>あなたは……$cnt番目の訪問者です。</p> </body></html> EOF ------------------------------------------------ よろしくお願いします。

  • 5dai
  • お礼率66% (4/6)
  • Perl
  • 回答数1
  • ありがとう数1

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

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

 Content-type: text/html の下に改行を加えてみてください。  HTTPでは、ヘッダの終了は「2連続の改行」ですので、これではヘッダ内にHTMLが記述されていることになってしまいます。  また、スペースなどに誤って全角文字を使用していないか、最後の行に改行がちゃんとあるか、等も確認してみてください。

5dai
質問者

お礼

deagleさん回答ありがとうございます。 確かにその通りでした。あっという間にできました。 ヘッダのことなって全然理解してないままでしたので。。 調べ方の範囲を違った視点で見ようと思います。

関連するQ&A

  • perl内のhtml文を、ループさせたいのですが、これってできないんでしょうか?

    たびたび申し訳ありません。周りに聞く人もいなく、まったくの初心者ですので、なにとぞお願いいたします。 下記の「ここから~ここまで」の$iの値を変えながらループさせたいのですが、まったくうまくいきません。なにかいい方法あったら教えてください。 それとも、こんな書き方じゃダメなんでしょうか? #!/user/bin/perl open(IN,"data.csv"); #flock IN,2; @line = <IN>; #flock IN,8; close(IN); $cnt = 0; foreach(@line){ ($sina[$cnt],$jpg[$cnt],$pr[$cnt],$kakaku[$cnt]) = split(/\,/,$_); $cnt++; } print<<"EOF"; Content-type: text/html <HTML> <HEAD> <TITLE>やぁ!</TITLE> </HEAD> <BODY> EOF ###################ここから print<<"EOF"; <TABLE border="1"> <COL span="4" width="100"> <TBODY> <TR> <TD width="300">$sina[$i]</TD> <TD width="300">$jpg[$i]</TD> <TD width="300">$pr[$i]</TD> <TD width="300">$kakaku[$i]</TD> </TR> </TBODY> </TABLE> EOF ##################ここまで print<<"EOF"; </BODY> </HTML> EOF

    • ベストアンサー
    • CGI
  • コードのエラーする原因

    http://home.e02.itscom.net/shouji/pc/js/p-7.html このサイトを見ながらjavascriptの練習をしていたのですが、 上頁の一番上のコードをもともと僕が使っているhtmlのテンプレの上から 一行ずつ手打ちでコードを移していきました。 <!DOCTYPE html> <html> <head> <title>practice</title>  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta name="viewpoint" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user0scalable=no;"/> <link href="jqueery-ui.css" rel="stylesheet"> <script type="text/javascript" src="jquery-x.x.x.min.js"></script> <script src="jquery-ui.js"></script> </head> <frameset rows="*, 80"> <frame name="upper" noresize src="upper.html"> ←ここと下はファイル名若干変えています。 <frame name="lower" noresize src="lower.html"> <noframes> <body>このページは、フレーム機能ブラウザでご覧ください。</body> </noframes> </frameset> </html> 一行目から</head>までは私の既存のものでそれより下は 上頁のものを打ったものなのですが、上頁の下2つのコード(この2つには原因はありません)を用意し 試しても上手く行きませんでした。 そこでこのコードのどこに原因があるのかを突き止めるべく 手打ちのものを一部消して上頁のものをコピペする作業を 消す場所を変えて何度か試してみたのですが、 結局上の2,3行の<html><head>をコピペして手打ちのと入れ替えると上手く行ったり、 まずコピペしてから手打ちでテンプレのように修正していくと上手く行ったりして結局原因がわかりませんでした。 私の見たところコピペも手打ちも全く同じコードに見えるのですが 実行してみると手打ちの方はうまくいかない。なんて時にどこに原因があるのでしょうか? 単純にどこか打ち間違いをしているだけなのでしょうか。 わかる方いたら教えてください。 よろしくお願いします。

  • 秀丸で改行が増える現象。

    秀丸 でHTMLファイルを開いた時(IEのソースを見るとか)に改行が増える現象についてご質問したい事があります。自身で色々と調べたのですが、まったくわからず、お力を借りたいと思います。 HTMLファイルを開いた時(ソースを見るなど)に 改行が ↓見た目はこんな感じになるはずのものなのですが ------------------------------------ <html> <head><title>たいとる</title></head> <body>ぼでー</body> </html> ------------------------------------ ↓こんな感じになってしまいます。 ------------------------------------ <html> <head><title>たいとる</title></head> <body>ぼでー</body> </html> ------------------------------------ 対処法がわからなく困っています。 どなたかおわかりになるかた、教えてください。 長くなりましたが、よろしくお願いします。

  • FedoraCore3の/var/www/html/に

    x.cgi: #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>world</TITLE></HEAD>\n"; print "<BODY>\n"; print "<H2>Hello</H2>\n"; print "<HR>\n"; print "</BODY>\n"; print "</HTML>\n"; を配置して他のPCからこのファイルを読みだしたのですがこのコードがそのまま表示されてしまい Perlが実行されません 何が原因でしょうか?

    • ベストアンサー
    • Perl
  • CGIについて…エラーで表示されません。

    CGIの勉強を始めたばかりの初心者です。 参考書を読んでいて、サーバーの時間を取得して表示する…っていうので、 本の通りに記述したのですが、表示されないんです。 (まだ途中段階で、とりあえずhtmlを記述した所です。) 最初、print"<html>\n";等、全部区切って書いてみた時は、 サーバーの時間は表示されましたが、ブラウザでソースを表示すると、htmlは、 </body> </html> しか表示されていませんでした。 (間違ってるのかな?と思って見直したり書き直したのですが…何度やっても同じでした。) なので、print <<EOF; ~ EOFの中に記述してみたところ、 サーバーエラーになってしまって、表示されないんです。 無料のサービスのサーバーで、自作CGIもOKです。 サーバーのヘルプに書いてあったのを読んで、 cgi-binというディレクトリに入れて、パーミッションも755に設定しました。 どこかおかしいのでしょうか?それともサーバーの問題でしょうか? #!/usr/local/bin/perl print"Content-type:text/html\n\n"; $now=localtime(time); print <<EOF; <html> <head> <title>SAMPLE</title> </head> <body> $now </body> </html> EOF

    • ベストアンサー
    • CGI
  • 同じコードを使っているのにエラーはなぜ?

    ●質問の意味 先日、似たような質問をいたしました。 「未定義の変数」の定義について(PHP) http://okwave.jp/qa/q8060182.html それと同じようなコードを書いていますが、 エラーが出ます。なぜでしょうか? ご存知の方、よろしくお願いします。 ●質問の補足 下記のコードの3行目 $page = isset($_GET['page']) ? intval($_GET['page']) : 1; についてエラーが出ています。 コメントアウトしている //$page =$_REQUEST['page']; は、参考文献の方のコードですがこちらでもエラーが出ます。 ●参考文献 たにぐちまこと「よくわかるPHPの教科書」(P215)の update.phpファイル ●開発環境 windows8 xammp1.8.1 ●コード(update.php) <?php require('dbconnect.php'); //$page =$_REQUEST['page']; $page = isset($_GET['page']) ? intval($_GET['page']) : 1; if ($page == '') { $page = 1; } $page = max($page, 1); //最終ページを取得する $sql = 'SELECT COUNT(*) AS cnt FROM my_items'; $recordSet = mysql_query($sql); $table = mysql_fetch_assoc($recordSet); $maxPage = ceil($table['cnt'] / 5); $page = min($page, $maxPage); $start = ($page - 1) * 5; $recordSet = mysql_query('SELECT m.name, i. * FROM makers m, my_items i WHERE m.id=i.maker_id ORDER BY id DESC LIMIT ' . $start .',5'); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="style.css" /> <title>Webシステムをつくる</title> </head> <body> <div id="wrap"> <div id="head"> <h1>トップページ</h1> </div> <div id="content"> <p style="margin-top: 20px"> <table width="100%"> <tr> <th scope="col">ID</th> <th scope="col">メーカー</th> <th scope="col">商品名</th> <th scope="col">価格</th> </tr> <?php while ($table = mysql_fetch_assoc($recordSet)) { ?> <tr> <td><?php print(htmlspecialchars($table['id'])); ?></td> <td><?php print(htmlspecialchars($table['name'])); ?></td> <td><?php print(htmlspecialchars($table['item_name'])); ?></td> <td><?php print(htmlspecialchars($table['price'])); ?></td> </tr> <?php } ?> </table> <ul class="paging"> <?php if ($page > 1) { ?> <li><a href="index.php?page=<?php print($page - 1); ?>">前のページへ</a></li> <?php } else { ?> <li>前のページへ</li> <?php } ?> <?php if ($page < $maxPage) { ?> <li><a href="index.php?page=<?php print($page + 1); ?>">次のページへ</a></li> <?php } else { ?> <li>次のページへ</li> <?php } ?> </ul> </p> </div> <div id="foot"> <p><img src="images/txt_copyright.png" width="136" height="15" alt="(C) H2O Space. MYCOM" /></p> </div> </div> </body> </html>

    • ベストアンサー
    • PHP
  • perl の printでのファイルへの指示にて

    独学でmacでパールを勉強しています。 始めてからまだ1週間くらい。 教科書みながら、print命令でファイルハンドルに指示を出してるのですが、 書き込めはできるのですが、 ファイルが無い場合、 新規に自動でファイルが作成されるはずとの記載があったのですが、 何故か、自動でファイルが生成されません。 調べても、設定が必要等言われてますが、 mac自体も初心者でほとんどわかりません。 どのような設定にすればいいのでしょうか? また、ソースに何か悪い所があるのでしょうか? お助けください。   ちなみに下記がソースです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーー #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>アクセスカウンタ</TITLE></HEAD>\n"; print " <BODY>\n"; print "<H1>test</H1><HR>\n"; if ( open ( FH , "count.txt")){ $cnt = <FH>; close( FH ); $cnt++; print"<CENTER>あなたは${cnt}人目の訪問者です。</CENTER>\n"; if ( open(FH, ">count.txt" )){ print FH $cnt; close(FH); } else { print "ファイルの書き込みオープンに失敗しました。\n"; } } else { print "ファイルの書き込みオープンに失敗しました。\n"; } print "</BODY>\n"; print "</HTML>\n"; __END__ ーーーーーーーーーーーーーーーーーーーーーーーーーー

    • ベストアンサー
    • Perl
  • PERLでのヒアドキュメントの呼び出し

    以下のようなCGIの改造を行いたいのですが、 sub abc{ ・ ここ1  ・ $check1=<<"EOF"; <HTML><HEAD><TITLE>test</TITLE></HEAD><BODY>  ・ <img src="$directryname[0]" width = "80">  ・ </BODY></HTML> EOF ここ2 print $check1; exit; ここ1、もしくはここ2のところに $directryname[0] = "http://abc/aa/a.jpg"; を入れてもsub abc内のimgタグで..jpgが表示されません。 ヒアドキュメントでぐぐって見ましたが、適切な回答が得られませんでした。よろしくお願いします。

    • ベストアンサー
    • Perl
  • ヒアドキュメントとクラスの基本的?な質問です

    PHPのヒアドキュメントを使ってHTMLのクラスを使ろうと思っているのですがいきなりわからなくなってしまいました。下のソースのどこがいけないのでしょうか。 エラー内容は Parse error: parse error, unexpected $end in \Html.php on line 19 です。よろしくお願いします。 index.php <?php require_once("./Html.php"); $html = new Html(); print $html->NoFrame(); ?> Html.php <?php class Html{ function Html(){ } function NoFrame(){ $html = <<<EOF <html> <head> <title> </title> </head> <body> おーい </body> </html> EOF; return $html; } } ?>

    • ベストアンサー
    • PHP
  • If文について教えてください。

    下記のようなプログラムで、結果を”間違っています。”にしたいのですが、 結果は”OK”となってしまいます。 どうすればいいのでしょうか? #!/usr/bin/perl $a="aaa"; $b="ccc"; if ( $a != $b ){ chigau(); } print<<"EOF"; Content-type: text/html <HTML> <BODY> OK </BODY> </HTML> EOF sub chigau { print<<"EOF"; Content-type: text/html <HTML> <BODY> 間違っています。 </BODY> </HTML> EOF exit; }

    • ベストアンサー
    • Perl

専門家に質問してみよう