Проблема с PHP со сном () и перенаправление

У меня есть следующий немой код:

<? 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 вещи.

  1. Заголовок HTTP Refresh
  2. Мета-обновление
  3. Обновление Javascript

Примечание. Обновление мета устарело (хотя я показал в примере). Рекомендуется заголовок HTTP Refresh.

Из документации PHP :

Помните, что header () должен быть вызван до отправки любого фактического результата либо с помощью обычных тегов HTML, пустых строк в файле, либо из PHP. Очень распространенная ошибка для чтения кода с включением или требованием, функциями или другой функцией доступа к файлам, а также пробелы или пустые строки, которые выводятся перед вызовом header (). Та же проблема существует при использовании одного файла PHP / HTML.

Таким образом, вы не можете использовать функцию header () после эха .

Я предлагаю вам вместо этого использовать javascript или метатег.

Я думаю, что вы ищете header('Refresh: 6; url=http://google.com/') ; делать перенаправление

буферизация и спящий сценарий не нужны.