PHP, как создать таймер обратного отсчета?

Как это сделать:

"Вы будете перенаправлены на domain.com через 5..(4,3,2,1) секунд"

в пхп???


person Community    schedule 13.05.2009    source источник


Ответы (7)


Я почти уверен, что javascript - ваш лучший вариант. Единственный другой способ сделать это — перенаправлять на новый URL-адрес каждую секунду, что, на мой взгляд, излишне.

Вот полный исходный код примера обратного отсчета:

<html>
  <head>
    <meta http-equiv="refresh" content="5;url=http://example.com" />
    <title>Countdown Sample</title>
  </head>
  <body>
    you will be redirected to example.com in <span id="seconds">5</span>.
    <script>
      var seconds = 5;
      setInterval(
        function(){
          document.getElementById('seconds').innerHTML = --seconds;
        }, 1000
      );
    </script>
  </body>
</html>

Редактировать

Вот улучшенная версия с советом Alnitak:

Я изменил JavaScript, чтобы перенаправить пользователей и предотвратить обратный отсчет ниже 1, и я добавил тег <noscript> вокруг <meta> для пользователей без JavaScript.

<html>
  <head>
    <noscript>
      <meta http-equiv="refresh" content="5;url=http://example.com" />
    </noscript>
    <title>Countdown Sample</title>
  </head>
  <body>
    you will be redirected to example.com in <span id="seconds">5</span>.
    <script>
      var seconds = 5;
      setInterval(
        function(){
          if (seconds <= 1) {
            window.location = 'http://example.com';
          }
          else {
            document.getElementById('seconds').innerHTML = --seconds;
          }
        },
        1000
      );
    </script>
  </body>
</html>
person brianpeiris    schedule 13.05.2009
comment
Я бы предпочел не смешивать тег обновления HTTP с javascript. Есть шанс, что они не будут идеально синхронизированы, поэтому пользователь может увидеть «0 секунд» (или, что еще хуже, «-1 секунду») - person Alnitak; 13.05.2009
comment
Тег обновления (или заголовок) гарантирует, что пользователи без JavaScript также будут перенаправлены. Хотя вы правы, лучше не смешивать их. Я обновлю свой ответ. - person brianpeiris; 13.05.2009
comment
Я действительно не знаю, как это работает, но если секунды ‹= 1, то если им потребуется больше секунды, чтобы подключиться к новому хосту, не будет ли js продолжать работать, и они могут просто продолжать попытки подключения? - person Henry B; 13.05.2009
comment
@PintSizedCat Я почти уверен, что javascript больше не будет выполняться после изменения window.location. Я не уверен, как это проверить. - person brianpeiris; 13.05.2009
comment
Ответ perspx чище, потому что он записывает идентификатор интервального таймера и очищает таймер, когда истекает 5 счетчиков. - person Alnitak; 13.05.2009

Это лучше не делать в PHP, потому что это потребует от веб-сервера поддерживать соединение с клиентом открытым во время обратного отсчета.

Это было бы (ИМХО) гораздо лучше сделать в Javascript с setInterval().

person Alnitak    schedule 13.05.2009

Вы должны использовать javascript для визуализации обратного отсчета, в php вы можете установить таймер для перенаправления следующим образом:

header('refresh: 5; url=http://www.stackoverflow.com');

где refresh:x устанавливает время ожидания перенаправления в секундах.

person 0plus1    schedule 13.05.2009

Вы можете реализовать обратный отсчет Javascript с помощью функции setInterval(), вызываемой каждую секунду в течение 5 секунд, чтобы создать функцию таймера для обратного отсчета времени. По истечении времени вы можете использовать свойство location.href document для перенаправления пользователя на страницу; также было бы полезно создать жесткую ссылку, чтобы направить их на страницу, например, на случай, если Javascript отключен.

Например:

var timeLeft, id;

function startCountDown()
{
    timeLeft = 5;
    id = setInterval(countDown, 1000);
}

function countDown()
{
    timeLeft -= 1;

    //Update the text which states how much time is remaining until the
    //user is redirected here..

    if(timeLeft==0)
    {
        clearInterval(id);

        //Redirect to the desired URL
        document.location.href = "http://domain.com";
    }
}
person Alex Rozanski    schedule 13.05.2009

Краткий ответ: вы не можете.

Длинный ответ: PHP находится на стороне сервера, и поэтому, как только страница отправляется, PHP не имеет к этому никакого отношения. То, что вы ищете, возможно несколькими способами. Вы можете либо использовать javascript (который позволяет выполнять «визуальный» обратный отсчет), либо установить метатег обновления в элементе документа, как таковой: ‹meta http-equiv="refresh" content="5;url=http://yoursite.com"›

person Christian P.    schedule 13.05.2009

Спасибо за ваш отзыв

                function timer(stamp)
                {
                    var temp=stamp;
                    temp=temp-1;
                    document.getElementById('mylbl').innerHTML = temp;
                    if(temp<=0)
                    {
                        window.location = "http://www.tasolglobal.com"
                        exit();
                    }
                    setTimeout("timer("+temp+")",1000); 
                }



    </script>

</head>

<body bgcolor="black" text="white" onload="timer(10+1)" >

    <?php
        //$sec=5;
        $to=$_REQUEST['from'];          //Set your email address where you want to get feedback
        $from=$_REQUEST['from'];        //This will be the senders email add
        $message=$_REQUEST['mesg'];     //This contains message from feed fackback form
        $subject=$_REQUEST['subject'];      //This contains subject of Feedback form. You can also set value as                                     feedback so you can find feedback mail easily
        $header="From: $from";          //Header of the feedback mail
        mail($to,$subject,$message,$header);

        echo "<br><br><h1>Thank You For Your Feedback...
            </h1><br><font color=red size=3>Your Will Be Redirected To HOME PAGE... Within ";
            echo "<label id=mylbl></label>" ;
        echo " Seconds";            
    ?>
</body>

person Bhaumik    schedule 07.02.2011
comment
Пожалуйста, добавьте ‹script type=text/javascript›, прежде чем копировать этот скрипт. - person Bhaumik; 07.02.2011

Вы можете смешивать javascript и php, когда вы входите на страницу, вы получаете дату, до которой вам нужно выполнить обратный отсчет из базы данных через php, а затем отсчитывайте ее с помощью javascript. Что-то подобное используется http://free-countdown.co.nr/.

person Community    schedule 08.07.2009