Я разрабатываю веб-приложение, которое требует событий. Пользователь создает событие в определенное время, и мне нужно, чтобы скрипт выполнялся и активировал событие в точное время, чтобы событие могло начаться. Любые идеи о том, как я могу это сделать? Я googled и искал через переполнение стека, но все, с чем я столкнулся, было многократным исполнением в определенное время. То, что мне нужно, – это выполнение при автоматическом установлении времени. Надеюсь, ты поможешь мне, я в отчаянии.
У вас есть 3 варианта. Моя рекомендация: используйте cron, если можете, пользователь, если вам нужно, и демон в крайнем случае.
(1) cron (как указано в комментариях)
cron – это планировщик для Linux-систем, который будет запускать задание командной строки в вашей системе. Вы заходите на свой сервер через ssh, введите crontab -e
и добавьте следующую строку:
4 5 * * * php /path/to/my/script.php
Это будет запускать скрипт в 5:04 утра каждый день.
<?php // /path/to/my/script.php // Do something
Некоторые услуги хостинга позволяют вводить задания cron с помощью графического интерфейса. Существуют также внешние службы cron, которые будут вызывать URL-адрес для вас в определенное время.
(2) демон
Это самый продвинутый вариант, а также наименее надежный: вы запускаете сценарий командной строки, который содержит бесконечный цикл. Затем скрипт проверяет состояние и отвечает на него. Поскольку это может привести к сбою после нескольких месяцев работы, у вас должен быть второй скрипт для его перезапуска в случае его возникновения. Это очень много работы, но это самый гибкий подход.
<?php while (1) { // fetch $last_exec_timestamp from database if ($last_exec_timestamp < time() + 86400) { // set last_exec_timestamp to now in database // do something } sleep(5);
}
3. Пользовательский
Если у вас есть приличный объем трафика на вашем сайте, вы можете просто включить задание в нижний колонтитул страницы, когда больше нет вывода. Убедитесь, что этот код работает быстро, или неудачный пользователь будет его ждать.
<?php // fetch $last_exec_timestamp from database if ($last_exec_timestamp < time() + 86400) { // set last_exec_timestamp to now in database // do something }
Также есть более привлекательные подходы к «управляемым пользователем», которые я лично не тестировал в другом вопросе переполнения стека .
Что вы ищете, так это CRON JOBS
http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/