PHP – Задержка при перенаправлении

Я использую следующий код для использования в качестве формы обнуления скрипта ссылки, и он работает отлично, но он просто перенаправляет их прямо на целевой URL.

Как мне приступить к созданию 5-секундной задержки, чтобы я мог отображать некоторые рекламные объявления в течение 5 секунд, прежде чем перенаправлять их?

Solutions Collecting From Web of "PHP – Задержка при перенаправлении"

Как насчет использования sleep () ?

 function method1(...) { sleep(5); ... rest of the code 

Обратите внимание, однако, что более рекомендуется использовать ответ Ваге Шадунца , который вместо этого использует header() .

Вы можете отправить php-заголовок с обновлением тайм-аута. http://php.net/manual/en/function.header.php

 <?php header( "refresh:5; url=wherever.php" ); ?> 

Заголовок refresh выполняет эту работу, но я хотел бы выделить некоторые потенциальные проблемы:

  • Он не указан в стандарте HTTP. Википедия говорит:

    Проприетарный и нестандартный: расширение заголовка, представленное Netscape и поддерживаемое большинством веб-браузеров.

    Но он существует уже почти 20 лет, и я не знаю ни одного браузера, который его не поддерживает (не удалось найти ссылку)

  • Некоторые браузеры не используют кеш на странице, перенаправленной с refresh . Это было продемонстрировано для Internet Explorer: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/meta-refresh-causes-additional-http-requests.aspx, и я могу воспроизвести его на Fire Fox. У Chrome нет этой проблемы.

Альтернатива: JavaScript

Вы можете добавить JavaScript на промежуточную страницу, которая откроет новую страницу через X секунд. Добавьте это в нижней части страницы, чтобы перенаправить на http://www.example.com/target через 5 секунд:

 <script type="text/javascript"> window.setTimeout(function() { window.location.href='http://www.example.com/target'; }, 5000); </script> 

комбинирование

В качестве бонуса вы можете вернуться к заголовку refresh если JS отключен, используя meta директиву http-equiv которая сообщает браузеру действовать так, как будто был отправлен определенный HTTP-заголовок. Поскольку он является частью источника HTML, его можно обернуть в элемент <noscript> . Добавьте это в свой <head> дополнительно к приведенному выше JavaScript:

 <noscript> <meta http-equiv="refresh" content="5;url=http://www.example.com/target" /> </noscript> 

Теперь страница перенаправляет с помощью JavaScript, если она доступна для максимальной производительности, и использует refresh противном случае.