0

ここに私がテストした簡単なスクリプトがあります:

<?php

require 'dbcon.php';

header("location:http://google.com");

$time1 = time();

for($i=0;$i<=9999999;$i++){
    $j += $i * $i * $i * $i;
}

$time2 = time();

$total = $time2-$time1;

mysql_query("insert into test values('$total')");

?>

このスクリプトの実行には約 15 秒かかり (テストテーブルに 15 が挿入されます)、これらの秒後、ページは指定されたドメインにもリダイレクトされます。

私の質問は、なぜこれが起こるのですか?

私の実際のコードでは、ユーザーを Web ページにリダイレクトしてから、残りのコードを実行してデータベースに保存したいので、ユーザーはあまり待つ必要がありません。それはどのように行われますか?

更新 1: この質問に答えてください:
最初にユーザーをリダイレクトしてから、データを mysql に挿入します。たとえば、最初にユーザーの IP を取得します。次に、彼をリダイレクトし、IP などからユーザーの国を検出し、情報を mysql に挿入します。それは何とか可能ですか?

UPDATE2: curl拡張機能を
使用して別のサイトからユーザーの国と地域を取得し、データベースに保存したいと考えています。だから数秒かかる…

4

2 に答える 2

5

header("Location: ...");ヘッダーを設定するだけで、それ以上は何もありません。これが、Location ヘッダーを設定しないことによって自分が何に巻き込まれるのかを正確に把握していない限り、常にexit、またはLocation ヘッダーを設定する必要がある理由です。die()

あなたがやろうとしていることに関しては、それは悪い考えです。リクエストに 15 秒かかるように意図的に設定することは、DOS 攻撃を要求しているだけです。

于 2012-09-10T21:55:12.893 に答える
-1

代わりにこれを試してください:

header("location:http://google.com");
exit;

ヘッダーを呼び出した後に終了すると機能します。

于 2012-09-10T21:55:09.403 に答える