2012-04-10 17 views
0

これは初めてのことですので、このウェブサイトで質問してください。私はインターネット接続速度をテストするために別のウェブサイトからスクリプトを入手し、else文を追加しました。速度が500を超えると、特定のページにリダイレクトされます。何らかの理由で、私はそれを動作させることができません。 <html>タグの前にob_start();を追加し、</html>タグの後にob_end_flush();を追加しました。下のコードをbodyタグの間に追加しました。私のPHP if文が動作しない

$kb=512; 
flush(); 
$time = explode(" ",microtime()); 
$start = $time[0] + $time[1]; 

for($x=0;$x<$kb;$x++){ 
    echo str_pad('', 1024, ''); 
    flush(); 
} 
$time = explode(" ",microtime()); 
$finish = $time[0] + $time[1]; 
$deltat = $finish - $start; 
$intspeed = round($kb/$deltat, 0); 
echo $intspeed; //just to check if $intspeed has a value 

if ($intspeed > 500) { 
    header("Location: test.php"); 
    exit(); 
} else { 
    header('Location: falcons/index.php'); 
    exit(); 
} 
+3

カスタムヘッダーを送信する前にスクリーンに何も印刷できません( 'echo'を使用してください)。画面に何かをエコーし​​てから、リダイレクトヘッダーを送信しています。それは問題です。エコーを削除します。 –

+1

ユーモラスに、 'echo $ intspeed'はリダイレクトを防ぎます –

+0

出力バッファリングはその周りに起こります...もちろん、そのコードが' ob_start() 'と' ob_end_flush() 'の間にある場合のみ彼は、前または後ではなく、むしろ使用すると言います。 – MichaelRushton

答えて

1

flush();コールを削除します。また、このコードがob_start()ob_end_flush()の間であることを確認してください。また、このコードの前には出力されません。

$kb=512; 

$time = explode(" ",microtime()); 
$start = $time[0] + $time[1]; 

for($x=0;$x<$kb;$x++){ 
    echo str_pad('', 1024, ''); 
} 
$time = explode(" ",microtime()); 
$finish = $time[0] + $time[1]; 
$deltat = $finish - $start; 
$intspeed = round($kb/$deltat, 0); 
echo $intspeed; //just to check if $intspeed has a value 

if ($intspeed > 500) { 
    header("Location: test.php"); 
    exit(); 
} else { 
    header('Location: falcons/index.php'); 
    exit(); 
} 
0

出力がまだ開始されていない場合にのみ、header()経由でリダイレクトできます。すでに(forループのように)ヘッダ出力がない場合は、 "Location"ヘッダを設定しても効果はありません。

"Location"ヘッダーを設定する前にheaders_sent()を使用することをお勧めします。デバッグ情報などが既に出力されている場合はフォールバックを使用してください。

+0

ありがとうございます。それは今働きます!私は、エコーとフラッシュ()を削除する必要があります。 – Filap

関連する問題