Подтвердить что ты не робот

Есть ли функция, аналогичная функции setTimeout() (JavaScript) для PHP?

Вопрос вроде говорит все - есть ли функция, которая выполняет ту же функцию, что и функция JavaScript setTimeout() для PHP? Я искал php.net, и я не могу найти ничего...

4b9b3361

Ответ 1

Невозможно отложить выполнение части кода в текущем script. Это также не имеет большого смысла, поскольку обработка PHP скрипт происходит полностью на стороне сервера, и вы просто задержите общее выполнение script. Существует sleep(), но это просто остановит процесс в течение определенного времени.

Вы можете, конечно, запланировать PHP script для запуска в определенное время с использованием заданий cron и т.п.

Ответ 2

PHP не управляется событиями, поэтому setTimeout не имеет большого смысла. Вы наверняка имитируете его, и на самом деле кто-то написал Timer class, который вы могли бы использовать. Но я буду осторожен, прежде чем вы начнете программировать таким образом на стороне сервера в PHP.

Ответ 3

Здесь функция sleep, которая приостанавливает script в течение определенного времени.

См. также usleep, time_nanosleep и time_sleep_until.

Ответ 5

Несколько вещей, которые я хотел бы отметить о таймерах в PHP:

1) Таймеры в PHP имеют смысл при использовании в длинных сценариях (демоны и, возможно, скрипты CLI). Поэтому, если вы не разрабатываете такое приложение, вам не нужны таймеры.

2) Таймеры могут блокироваться и не блокироваться. Если вы используете sleep(), тогда это таймер блокировки, потому что ваш script просто зависает в течение определенного времени. Для многих задач блокировка таймеров в порядке. Например, отправка статистики каждые 10 секунд. Это нормально, чтобы заблокировать script:

while (true) {
    sendStat();
    sleep(10);
}

3) Неблокирующие таймеры имеют смысл только в приложениях, управляемых событиями, например websocket-server. В таких приложениях событие может происходить в любое время (например, входящее соединение), поэтому вы не должны блокировать свое приложение с помощью sleep() (очевидно). Для этого существуют библиотеки циклов событий, такие как reactphp/event-loop, что позволяет обрабатывать несколько потоков неблокирующим образом, а также таймер/интервал.

4) Возможны неблокирующие таймауты в PHP. Он может быть реализован с помощью функции stream_select() с параметром тайм-аута (см., Как он реализован в responsephp/event-loop StreamSelectLoop:: run()).

5) Существуют расширения PHP, такие как libevent, libev, event, которые позволяют выполнять таймеры (если вы хотите перейти на хардкор)

Ответ 6

Если вы не использовали AJAX для запросов live, PHP не был бы предпочтительным языком для этой проблемы. Сценарии PHP не hang и ждут другого ответа. Они не настойчивы. Javascript потребуется.

Даже для розыгрыша, функция javascript AJAX в паре с PHP script для синтаксического анализа и ответа соответственно будет именно тем, что вам нужно. Вы даже можете связать это с функцией sleep в php, чтобы сделать ее более реалистичной. Кроме того, я подготовил кучу разных операторов для анализа на сервере, вы могли бы установить размер sleep, необходимый для каждого оператора. Например:

MYSQL DATABASE EXAMPLE:

| ID | SLEEP | STATEMENT                                                   |
| 1  |   3   | Hello                                                       |
| 2  |   10  | I have been alright, nothing new.                           |
| 3  |   20  | This is a really long message that takes 20 seconds to type |

Итак, вы можете разобрать его следующим образом:

$query = mysql_query("SELECT * FROM `responses` WHERE `id`='3'");
$array = mysql_fetch_array($query);
sleep((int)$array['sleep']);   //convert sleep time to integer, sleep.
die($array['statement']);      //print the statement back to AJAX function

Ответ 7

если вам нужно выполнить действие после выполнения некоторого php-кода, вы можете сделать это с помощью эха

 echo "Success.... <script>setTimeout(function(){alert('Hello')}, 3000);</script>";

поэтому через некоторое время в клиенте (браузере) вы можете сделать что-то еще, например, перенаправить на другой php script или эхо-предупреждение

Ответ 8

http://php.net/manual/en/class.evtimer.php - это то, что вы ищете, вы можете иметь функцию, называемую в течение заданных интервалов, аналогичную setInterval в javascript. это расширение pecl, если у вас есть whm/cpanel, вы можете легко установить его через страницу установщика программного обеспечения/расширения.

Я не заметил, что этот вопрос связан с 2010 годом, и класс evtimer начал кодироваться в 2012-2013 годах. так как обновление старого вопроса, теперь есть класс, который может сделать это аналогично javascripts settimeout/setinterval.