У меня есть следующий немой код:
<? echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>"; sleep(6); header('Location: http://google.com/'); ?>
Почему код HTML не отображается в браузере перед сном 6 секунд, а затем перенаправляется? Коды вообще не выводят код HTML, ждет 6 секунд и отправляет меня в место. Что я делаю неправильно?
Вам нужно будет что-то сделать (это не сработает):
<?php echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>"; @ob_flush(); //flush the output buffer flush(); //flush anything else sleep(6); //wait header('Location: http://google.com/'); //redirect ?>
Однако : это не сработает, как ожидалось, вы не можете перенаправить браузер после отправки контента (PHP будет бросать и ошибаться и сообщать об этом)
Вместо этого вы должны:
<?php echo "<html><meta http-equiv=\"refresh\" content=\"6;URL='http://YOURURL.com/'\"><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>"; ?>
Если <meta http-equiv="refresh" content="6;URL='http://YOURURL.com/'">
является тегом HTML, чтобы сообщить браузеру перейти к предоставленному URL-адресу через 6 секунд
Чтобы избежать добавления метатега, вы также можете сделать это:
<?php header('Refresh: 6;URL=http://www.YOURURL.com/'); echo "<html><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></html>" ?>
Но чтобы быть в безопасности, вы должны добавить как заголовок, так и метатег!
Это не будет работать. Потому что первое эхо начнет выводиться. После этого заголовок будет просто терпеть неудачу. Однако вы можете сделать это с заголовком обновления на стороне PHP.
<?php header('Refresh: 5;URL=http://www.google.com/'); // refresh header echo "<html><head>"; // meta refresh echo "<meta http-equiv=\"refresh\" content=\"5;URL=http://www.google.com/\" />"; echo "</head><body><br><br><br><div id='loading'><p><img src='loader.gif'> Please wait 6 seconds...</p></div></body></html>"; ?> <script type="text/javascript"> // javascript refresh window.setTimeout(function(){ location.href="http://www.google.com"; },5000); </script>
На вышеупомянутом скрипте было обработано 3 вещи.
Примечание. Обновление мета устарело (хотя я показал в примере). Рекомендуется заголовок HTTP Refresh.
Из документации PHP :
Помните, что header () должен быть вызван до отправки любого фактического результата либо с помощью обычных тегов HTML, пустых строк в файле, либо из PHP. Очень распространенная ошибка для чтения кода с включением или требованием, функциями или другой функцией доступа к файлам, а также пробелы или пустые строки, которые выводятся перед вызовом header (). Та же проблема существует при использовании одного файла PHP / HTML.
Таким образом, вы не можете использовать функцию header () после эха .
Я предлагаю вам вместо этого использовать javascript или метатег.
Я думаю, что вы ищете header('Refresh: 6; url=http://google.com/')
; делать перенаправление
буферизация и спящий сценарий не нужны.