2009-10-05 2 views
0

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

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

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

ответ

2

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

1

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

0

Вы можете использовать cronjobs для этого.

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

+0

Возможна, но не надежная. Вы должны быть уверены, что ваша страница посещается достаточно часто. – markus

+0

Нет, сайт не будет посещать один раз в день. это зависит от пользователя. – Sakthivel

+0

@ Sakthivel: ты ошибаешься. этого было бы достаточно, если сайт посещает кто угодно. остальное будет сделано моим сценарием. – markus

3

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

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

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

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

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

1

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

Что-то надежное, способное работать без присмотра за дни, месяцы, годы, до жары смерти веб-сервера.

Вы можете написать это. В php, без сомнения. Это будет процесс демона на вашем веб-сервере.

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

Он не может быть запущен внутри apache mod_php или через fastcgi. Эти скрипты умирают через некоторое время. Скажите 30 секунд как правило.

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

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

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

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

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

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

Смежные вопросы