Перенаправить с таймером в PHP? - PullRequest
6 голосов
/ 14 декабря 2009

Как я могу сделать перенаправление с PHP через, скажем, 10 секунд ...

Я много об этом читал, похоже, что было бы лучше с javascript. Но PHP сэкономит мне много кода.

Так как я могу сделать перенаправление с таймером в PHP?

Спасибо

Ответы [ 11 ]

32 голосов
/ 14 декабря 2009

Вы можете заставить ваш скрипт PHP спать 10 секунд,

sleep(10);

, но конечному пользователю это покажется как неотвечающий сервер. Лучше всего использовать метаобновление,

<meta http-equiv="refresh" content="10;url=http://google.com">

или javascript.

setTimeout(function(){
  window.location = "http://google.com";
}, 10000);

Найдено в комментариях от Даниила:

header('Refresh: 10; URL=http://yoursite.com/page.php');

идеально подходит для этой ситуации, так как для этого не требуется JavaScript или HTML.

7 голосов
/ 02 октября 2010

заголовок ('Обновить: 10; URL = http://yoursite.com/page.php');

Поместите этот PHP-код в раздел заголовка страницы, иначе он не будет работать.

2 голосов
/ 24 сентября 2015
<?php

      header( "refresh:10; url=https://example.com/index.php" );

?>

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Redirect with countdown</title>

<style type="text/css">
.myClass {
           font-family: verdana; 
           font-size: 16px; 
           font-weight: normal;  
           color: black;
           line-height: 30px;
         }
</style>
</head>
<body>
<script type="text/javascript">

 (function () {
  var timeLeft = 10,
  cinterval;

  var timeDec = function (){
  timeLeft--;
  document.getElementById('countdown').innerHTML = timeLeft;
  if(timeLeft === 0){
  clearInterval(cinterval);
    }
};

cinterval = setInterval(timeDec, 1000);
})();

</script>
Redirecting in <span id="countdown">10</span> seconds.
<br><br>
<span class="myClass">Thank you! Your submission has been received!</span>
</body>
</html>
2 голосов
/ 14 декабря 2009

Это плохая идея, чтобы заставить скрипт PHP спать. На самом деле это простой способ DoS для вашего сервера;) PHP-скрипт в памяти потребляет достаточно ресурсов, особенно если он работает как CGI.

2 голосов
/ 14 декабря 2009

Вы хотите выполнить перенаправление на стороне клиента:

<meta http-equiv="refresh" content="5;url=http://yourdomain.com"/>

но если вы чувствуете, что это должно быть в PHP, вы можете сделать что-то вроде:

<?php

// wait 5 seconds and redirect :)
echo "<meta http-equiv=\"refresh\" content=\"5;url=http://yourdomain.com\"/>";

?>
1 голос
/ 14 декабря 2009

PHP - это, вероятно, неправильная технология для этого, так как он работает на стороне сервера и не будет предоставлять полезную обратную связь пользователю во время задержки.

Это не так уж много кодирования в Javascript. Смотрите эту ссылку для очень простого способа реализовать это на своей странице

0 голосов
/ 21 июня 2017

Создайте файл, например: «go.php», с кодом

<?php
$site = $_GET['iam'];
sleep(5);
Header ("Location: ".$site."");
exit();
?>

<a href="http://whatever.com/go.php?iam=http://google.com">Link</a>

или как этот, без "сна"

<?php
$site = $_GET['iam'];
Header('HTTP/1.1 301 Moved Permanently');
Header("Refresh: 10; URL=".$site."");
exit();
?>

<a href="http://whatever.com/go.php?iam=http://google.com">Link</a>
0 голосов
/ 20 апреля 2016

Мне удалось сделать это с помощью простой функции на PHP

function RedirectToURL($url, $waitmsg = 0.4)
{
    header("Refresh:$waitmsg; URL= $url");
    exit;
}

и вы звоните из своего PHP за 2 секунды до переадресации. Обратите внимание, что $ waitmsg = 0.4 используется для определения значения по умолчанию.

RedirectToURL("http://website.php", 2);

Если вы хотите перенаправить после отправки формы, вы можете попробовать

if(isset($_POST['submitted']))
{
       echo '<div style="text-align:center; margin-left:auto; margin-right:auto"><br><br>Sucess. Thanks for contribution.</div>';
       RedirectToURL("http://thewebsiteilookforaftersubmit", 2); // I want to wait 2 seconds and not 0.4 as defined by default
}
0 голосов
/ 24 апреля 2013

попробуйте этот скрипт, и он будет работать!

<?php
$msg ="This Is Just Checking";
header('Refresh: 5; URL=http://www.google.com.pk');
?>

<body>
<?php echo $msg  ?>
</body>
</html>
0 голосов
/ 14 декабря 2009

Другой способ, о котором стоит упомянуть, - отправка HTTP-заголовка Location с помощью функции PHP header () . Итак, если вам нужно надежное решение, которое позволяет избежать javascript и мета-тегов при сохранении адаптивности веб-приложения, это может быть создание iframe (или фрейма) и загрузка туда php-скрипта, который содержит следующее:

sleep(10);
header("Location: http://my.redirect.location.com");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...