Запустите php-файл за определенный промежуток времени - PullRequest
0 голосов
/ 05 октября 2009

Я разрабатываю веб-страницу, где мне нужно автоматически отправлять электронную почту конкретному пользователю [зависит от значения базы данных] в определенное время [без вмешательства человека].

Например, у меня есть файл с именем Send_mail.php. Он будет выполняться один раз в день по сценарию [не по Cron или другим способом]. Пожалуйста, направьте нас в этом.

Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 05 октября 2009

Единственный вариант, о котором я могу подумать, что в любом случае не будет вызывать cron, - это иметь скрипт, который после запуска продолжит работать бесконечно. Пока что я согласен со всеми остальными, что это не то, для чего предназначены php-скрипты, а - это , что cron явно предназначено для этого.

Но сделать это только с помощью php было бы довольно сложно. Вам придется запускать сценарий таким образом, чтобы он был не из браузера (поскольку закрытие браузера убило бы сценарий), а не из командной строки (если пользователь, инициировавший сценарий, не всегда входил в систему). на стороне сервера).

Не говоря уже о том, что выполнение сценария таким образом, вероятно, приведет к увеличению времени с точки зрения использования памяти и может замедлить любую другую активность до сканирования, что, я думаю, не то, что вам нужно.

По сути, php-скрипты запускаются, когда что-то говорит. Если вы хотите, чтобы он работал надежно в течение дня, что-то должно открыть скрипт. Если у вас нет уверенности в том, что кто-то хотя бы раз посетит какую-то страницу на сайте (чтобы вы могли использовать метод Мариуса), то вам нужно будет запустить его для какой-нибудь серверной программы (что звучит очень похоже на cron мне).

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

2 голосов
/ 05 октября 2009

Вы говорите «не через cron». Зачем? Cronjobs предназначены именно для таких случаев! Нет лучшего способа сделать это!

1 голос
/ 05 октября 2009

Если не по хронам, вам нужно, по крайней мере, что-то еще, чтобы раскручивать колеса один раз в день.

Нечто надежное, способное работать без присмотра в течение нескольких дней, месяцев, лет, до полной смерти веб-сервера.

Вы могли бы написать это. В php нет сомнений. Это будет процесс-демон на вашем веб-сервере.

Это должно быть запущено при каждом запуске. Следует проверить, когда выполнялось последнее задание, и решить, нужно ли запускать другое. Будучи ежедневным, он может спать () в течение нескольких часов (скажем, 1 или 2) и проверять, прошло ли время отправки, затем выполнить свою работу и вернуться в режим сна.

Его нельзя запустить внутри apache mod_php или через fastcgi. Эти сценарии умирают через некоторое время. Скажи 30 секунд, как правило.

Он может быть запущен через программу веб-сервера, а не во время запуска, да, через system() вызов nohup в исполняемом файле командной строки php, что-то вроде:

<?php system('nohup php jobrunner.php'); ?>

Джобруннер должен проверить, не запущены ли уже другие его копии, и в этом случае покончить жизнь самоубийством. Он не должен запускаться или перезапускаться веб-пользователем без ввода пароля.

И, будучи разработанным заново с нуля, он может содержать новые ошибки и риски безопасности.

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

В целом, cron является безопасным, быстрым, обслуживаемым, известным системным администраторам, хорошо принятым, уже работает и доступен в дешевых хостинговых компаниях, которые не предоставляют командной строки или доступ к системе ().

1 голос
/ 05 октября 2009

Необычно не использовать cron для этого. Если он доступен через Интернет, вы можете запустить скрипт на http://yourwebsite.com/Send_mail.php. Это может быть с любого компьютера, использующего программное обеспечение, которое запланировано на выполнение запроса GET каждый день, и т. Д. Это клиентский запрос.

0 голосов
/ 05 октября 2009

Вы можете использовать cronjobs , чтобы сделать это.

Если cronjob недоступен и если сайт посещают хотя бы раз в день, поместите код на страницу. Каждый раз, когда страница загружается, она проверяет, следует ли отправить электронное письмо пользователю или оно уже было отправлено в этот день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...