2012-04-10 2 views
0

Это мой первый вопрос, заданный на этом сайте, поэтому, пожалуйста, несите меня. У меня есть сценарий с другого сайта для проверки скорости подключения к Интернету и добавления if else. Если скорость больше 500, она будет перенаправляться на определенную страницу. По некоторым причинам я не могу заставить его работать. Я добавил ob_start(); перед тегом <html>, а также добавил ob_end_flush(); после тега </html>. Я добавил код ниже между тегами тела.my php if statement не работает

$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() 'OP говорит, что он использует, а не до или после. – 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), настройка заголовка «Местоположение» не влияет.

Я рекомендую использовать headers_sent() перед настройкой заголовка «Местоположение» и иметь резервную копию в случае, если какая-то отладочная информация или что-то еще уже начато.

+0

спасибо. Он работает сейчас! я должен удалить эхо и флеш(). – Filap