• ベストアンサー

PHPとPerlのリダイレクト

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

  • Perl
  • 回答数2
  • ありがとう数0

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

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

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

investigate
質問者

補足

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

その他の回答 (1)

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

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

investigate
質問者

補足

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

関連するQ&A

  • 301リダイレクトをするとドコモだけ末尾に「/」を入れてもサイトが移動

    301リダイレクトをするとドコモだけ末尾に「/」を入れてもサイトが移動しました。となってしまいます。 301リダイレクトさえできれば どのような方法でもできればいいのですが色々試してみても サイトが移動しましたと表示されています。 ■cgiで行ったこと print "Status: 301 Moved Permanently\n"; print "Location: http://******.co.jp/\n\n"; exit; ■PHPで行った事 header("HTTP/1.1 301 Moved Permanently"); header("Location: http://******.co.jp/"); ■apacheで行った事 RewriteCond %{HTTP_HOST} ^(*****\.com)(:80)? RewriteRule (.*) http://******.co.jp/[R=301,L] 1つ1つ別にやってみましたが、最後にスラッシュを入れる、絶対パスをいれても 表示されてしまいます。 302リダイレクトはどうしても入れることが出来ないので 大変困っております。 どうぞ宜しくお願い致します。

  • ◆cronでphpを実行しリダイレクトまで

    いつもお世話になっています。 cronでphpを起動させています。 そのphp内でリダイレクトで自分を指定させたい。 header("Location: http://hohe/test.php?cnt=$cnt"); exit; 前後の処理は割愛させて頂きます(ループ処理もあります)。 ブラウザから直接phpを実行するとちゃんとリダイレクトしているのですが、cronだとリダイレクトしていません。 宜しくお願いします。

    • 締切済み
    • PHP
  • phpでのリダイレクト処理について

    phpで index.php にアクセスがあった時に、 以下の様に top.php へリダイレクトさせたいと思います。 header("Location:top.php"); exit(); この時、top.phpが表示された時のブラウザのアドレスバーは index.php のままです。 アドレスバーのURLを top.php にする方法はないですか?

    • 締切済み
    • PHP
  • PHPでのリダイレクト

    PHPでウェブアプリを作成しています。 PHPでのリダイレクト方法として、 header("Location: xxxxx.php"); を使うことが多いのですが、HTML出力のあとで使おうとすると、 「Warning: Cannot modify header information - headers already sent by (~」というPHPエラーが発生します。 HTML出力前にリダイレクトができればいいのですが、 HTMLをかいたあとに、PHP処理をさせている処理構造上、header関数以外でリダイレクトする方法はあるのでしょうか?

    • ベストアンサー
    • PHP
  • 【php】ログイン後、元いたページにリダイレクト

    こんばんは。phpを勉強し始めたばかりの者です。宜しくお願いします。 会員制サイトを作っています。 そこで、 ページにログインなしで来ると、ログインページにリダイレクト、ログインすると、元いた場所にリダイレクトされるようにしたいです。 以下のような方法はセキュリティ的に問題ありますでしょうか? セッションに戻るページを覚えさせて、 if (!isset($_SESSION["name"])) { $_SESSION['return'] = $_SERVER["REQUEST_URI"]; header("Location: login.php"); exit; } ログイン処理を終えた後、 if(!empty($_SESSION['return'])){ $url = $_SESSION['return']; header("Location: $url"); exit; } else { header("Location: top.php");// 戻るページがない場合、トップページへ exit; } のようにして、戻ります。 が、期待した通りの動きはできたのですが、セキュリティ的に問題がないかどうか不安です。 もし、やめた方が良いのでしたら、どのような方法が考えられますでしょうか。 ご指導ください。宜しくお願いします。

    • ベストアンサー
    • PHP
  • リダイレクト失敗時のエラー取得(perl)

    はじめまして。 リダイレクト失敗時のエラー取得(perl)について質問させてください! CGI(Perl)で、 print "Location: (リダイレクト先URL(他サーバ))\n\n"; としたとき、リダイレクト先のサーバが稼働していなくて、ページが表示 されず、「サーバが見つかりませんでした」などと表示されることがよく あります。 サーバがダウンしているときは別のページを表示するようにしたいのです が、何か方法はあるでしょうかぁ? ●思い当たるキーワードでいろいろ検索してみましたが、該当する物を見 つけられませんでした。 ●下記のコードを試してみましたが、やっぱりダメでした。 →エラーとして認識されず、アドレスバーに他サーバのリダイレクト先URL が表示された状態で「サーバが見つかりませんでした」と表示されまし た。 eval { print "Location: (リダイレクト先URL(他サーバ))\n\n"; }; if ($@) { print "Location: (リダイレクト先URL(自サーバ))\n\n"; } ●「自サーバ」はniftyをしており、niftyではソケット通信が出来ませ ん。 よろしくお願いいたします~!

    • ベストアンサー
    • CGI
  • PHPを使ったリダイレクトを教えてください

    私はPHPについて全く知識がないのですが、 PHPを使ったリダイレクトを教えてください。 ネット上で調べて、 <?php header("Location: http://www.xxxxx.com/"); ?> こんなコマンドを使えばリダイレクトが出来るというのはわかったのですが、 そもそもPHP自体を使ったことがないため、 どのようにウェブサイト上に反映していいのかがわからないのです。 メタによる転送は認知していますが、 使い勝手が悪いのと、ブラウザ上の設定で防げてしまうようなので、 PHPを使いたいと思っております。 (アフィリエイトに使います ASPの許可はすでに貰ってます) .htaccessも考えましたが、 サイト事に設定が必要になってしまうので、 アフィリエイトサイトには不向きではないかと思っています。 もしよろしければ教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • perlでLocation

    Locationでは#xxxというのは使えないのでしょうか? #!/usr/local/bin/perl print "Location:xxx.cgi#xxx/?userID=$name\n\n"; exit; という風に書いています。 xxx.cgiはローカルにあるcgiでそのcgiの中身は表示できます。 しかしxxx.cgiの中の <xxxx.cgiの中身> print <<"EOM"; <html> . . . <A NAME="xxx>image</A> . . . </HTML> EOM exit; xxxのところでなく一番最初が表示されてしまいます。 どうすればいいのでしょうか?

    • ベストアンサー
    • Perl
  • PHPによる端末振り分けについて

    宜しくお願いします。 現在は、PERLでPC・各携帯キャリアへの振り分けを行っております。ソースは・・・ #!/usr/bin/perl #index.cgi # #ジャンプ先の設定 # #iモード $imode = "http://www.****.jp/i/index.html"; #EZweb $ezweb = "http://www.****.jp/e/index.html"; #J-Sky $jsky = "http://www.****.jp/j/index.html"; #パソコン $pc = "http://www.****.jp/pc/index.html"; # #ブラウザ情報の取得 # $brwsr = $ENV{'HTTP_USER_AGENT'}; # #判別 # #iモードの判別 if ($brwsr =~ /DoCoMo/){ print "Location: $imode\n\n"; } #EZwebの判別 elsif ($brwsr =~ /UP.Browser/){ print "Location: $ezweb\n\n"; } #J-Skyの判別 elsif ($brwsr =~ /J-PHONE/){ print "Location: $jsky\n\n"; } #その他(パソコン) else { print "Location: $pc\n\n"; } exit; という形で自動振り分けをしておりますが、これと同じ機能をPHPで作るにはどうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • php header

    <?php header("Location: http://www.example.com/"); exit; ?> 上記のheaderですと該当ページに飛んでしまいます。 直接飛んでしまうのではなく直接CGIにURLを送りたいのですが 関数等ありますか?わかりやすく言うとURLだけ送信したい。 clickした事にしたいです。