• ベストアンサー

PHPとPerlのリダイレクト

こんにちは。 PHPとPerlのリダイレクトの処理ついて質問です。 PHPのリダイレクトには、exit;を付けないとその後の処理も行ってしまいます。 header("Location:index.php"); exit; Perlのリダイレクトにも、このexit;は必要でしょうか? print "Location:index.cgi\n\n"; exit; ← ? 以上です。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.2

PHPは、出力バッファが有効な場合全ての処理が終わってからWebサーバに結果を返すので、全ての処理が実行されます。 Perl はひとつ処理が終わる度に随時Webサーバを通じてブラウザに結果を返しているので、ブラウザ側がLocationヘッダーを受け取った時点でリダイレクト処理に移ってしまえば、セッションは切断されPerlの処理も中断されます。 従って > どこかで、リダイレクト後は処理を行わないから必要ない というのもあながち間違っていませんが、Locationヘッダーを送ったら即処理が止まるかというと、厳密には止まっていません。 Locationヘッダーを書き出した後の処理で、何らかのデータファイル等を書き換えるような処理を行っていると中途半端なデータができてしまう恐れもあるので、プログラム側で終了を明示する方が問題を起こさないと思います。

investigate
質問者

補足

PHPとPerlとでリダイレクト後の動きは違うようですね。 Perlを使っていたときにexitが不要と書かれているのを見て、 最初は書いていたのですが、なしにしてみました。 値も問題なく、Perlでは不要なものなのだと思いましたが、 問題が起きる場合があるため書いておくほうがいいのですね。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

Perl も exit を行わない限りその後の処理は実行されてしまいますので、exit を行うのが理想だと思います。

investigate
質問者

補足

どこかで、リダイレクト後は処理を行わないから必要ない、というような 記述を見たことがあるのですが、気のせいでしょうか・・・。 書いてあった方が、ここで終了することが分かりやすいとかいうことではなく、 その後の処理をさせたくないなら書かないと駄目ってことなんですよね?

関連するQ&A