2

それがまったく意味をなさない後に呼び出すheader('Location:')ことは意味がありますか?die()

そうでない場合、なぜdie()PHPインタープリターによって自動的に実行されないのですか?はいの場合、いつ?

4

3 に答える 3

4

header('Location: ')ブラウザに新しい場所に移動するように指示するHTTPリダイレクトを作成します。

HTTP/1.1 301 Moved Permanently
Location: http://example.com/another_page.php
Connection: close

ブラウザはHTML本文を表示せず、リダイレクトに従うだけなので、HTML本文は必要ありません。die()そのため、またはのexit()後に呼び出しますheader('Location:')。スクリプトを終了しない場合、HTTP応答は次のようになります。

HTTP/1.1 301 Moved Permanently
Location: http://example.com/another_page.php
Connection: close

<!doctype html>
<html>
<head>
  <title>This is a useless page, won't displayed by the browser</title>
</head>
<body>
  <!-- Why do I have to make SQL queries and other stuff 
       if the browser will discard this? -->
</body>
</html>

PHPインタープリターによってdie()が自動的に実行されないのはなぜですか?

このheader()関数は、に限定されない生のHTTPヘッダーを送信するために使用されますheader('Location:')。例えば:

header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// ...more code...

die()このような状況では、HTTP応答本文を生成する必要があるため、呼び出しません。die()したがって、PHPが後に自動的に呼び出すかどうかは意味がありませんheader()

于 2012-05-30T23:21:03.787 に答える
3

私の個人的な意見die()では、スクリプトをこれ以上実行したくない時点で呼び出す必要があります。スクリプトを実行したくない場合は、スクリプトの直後にheader("Location: ...")配置する必要があります。die()

基本的に、これを行わないと、スクリプトが不必要な追加の計算を行う可能性があります。サーバーがユーザーをリダイレクトするため、ユーザーに「表示」されることはありません。

于 2012-05-30T23:15:07.897 に答える
1

良い例は、後世のためにここにコピーされたこのPHPユーザーノートで説明されています。


出力が終了したことをブラウザに通知した後、処理を続行するためのarr1の提案のシンプルで便利なパッケージ。

リクエストに何らかの処理が必要な場合は常にリダイレクトします(したがって、更新時に2回は実行しません)。これにより、作業が簡単になります...

<?php 
 function redirect_and_continue($sURL) 
 { 
  header( "Location: ".$sURL ) ; 
  ob_end_clean(); //arr1s code 
  header("Connection: close"); 
  ignore_user_abort(); 
  ob_start(); 
  header("Content-Length: 0"); 
  ob_end_flush(); 
  flush(); // end arr1s code 
  session_write_close(); // as pointed out by Anonymous 
 } 
?>

これは、ビデオの変換や大きな画像の拡大縮小など、時間がかかるタスクに役立ちます。

于 2012-05-30T23:33:33.190 に答える