e日記風 独り言

#気まぐれ & 気まま & 天邪鬼な老いぼれ技術屋の日々の記録のうち、主に Perl・CGI・HTMLなど Web技術に関連した記事です。
右端上端の同一カテゴリージャンプボタンで同じカテゴリーの他の記事を順番にご覧いただけます。
Access Counter:  総アクセス数

楽 天 の 商 品

-2293- 再び Perl
= 今日は画像なし m(_ _)m =
唐突にまた perlの忘備録的メモ。MSの AIサーチ Bing で「perl で "End of script output before headers"エラーが出る原因は何?」と聞くと

"End of script output before headers"エラーが出る原因は、PerlスクリプトがCGIとして実行されている場合、スクリプトがHTTPヘッダを出力する前にスクリプトの出力が終了してしまった場合に発生します。このエラーは、スクリプトの出力がHTTPヘッダの出力よりも先に行われた場合に発生します。このエラーを解決するためには、スクリプトの出力がHTTPヘッダの出力よりも先に行われないようにする必要があります。具体的には、スクリプトの最初の行に以下のコードを追加してください。
print "Content-type: text/html\n\n";
これにより、HTTPヘッダが正しく出力されるようになります。また、Perlスクリプトが文法的に間違っていない場合でも、このエラーが発生することがあります。この場合は、スクリプトの出力がHTTPヘッダの出力よりも先に行われているかどうかを確認してください。

などと返ってくる。
ただ、同じコードでも perlのバージョンなどの環境によってエラーにならない場合もあったりして、未だに確たる原因をつかめないでいる。
唯一 関連がありそうな操作は

if($ENV{'QUERY_STRING'})
  #環境変数から$QUERY_STRINGを取り出す
  my $query = $ENV{'QUERY_STRING'};
  #「&」で「変数名=数値」の形に分割
  foreach (split(/&/, $query)) {
    #「=」で分解して$nameと$valueに代入
    (my $name, my $value) = split(/=/, $_);
    $rcv{$name}=$value;
  }
  $pn = $rcv{'pnumber'};
  $ans = $rcv{'cnt'} if defined($rcv{'cnt'});
}

のようなコードで、$rcv{'cnt'}が未定義値だった場合 $ans は未定義のまま。(my $ans; などの宣言は事前にしている。)
この続きで if($ans eq "1") {} などとすると、"End of script output before headers"エラーが出るような気がする。ただ perl のバージョンや環境によるのか? 私の場合同じコードでも デスクトップ機の方ではエラーは出ない。Noteの方では出たり出なかったりするような気がする。
とにかく、なるべく早く
print "Content-type: text/html\n\n";
を出力する習慣をつけるのが吉?
2023/06/20


このページ(pdiary_2293.html)にコメント/質問をどうぞ
タイトル(30文字以内)
コメント
お名前(ID:10文字以内)
URL(HP or ブログをお持ちの方)
パスワード*
タイトル・コメント・ID は必須です
このページ(pdiary_2293.html)への今までのコメント/質問
このページにはまだ表示できる投稿がありません。

Back to Page top