Как автоматически вызывать php-скрипт каждый день для отправки автоматических писем

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

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

Теперь я должен дать АДМИНИСТРАТОРУ возможность установить дату начала и окончания напоминания, в течение которых вызовы должны автоматически выполняться к моему сценарию напоминания на php и прекращаться по дате окончания напоминания.

Что я узнал из SO/google, так это то, что я могу настроить cron (в LINUX) для автоматического вызова моего Rememberusers.php, но у меня нет доступа к оболочке для этого.

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

Есть ли другие встроенные методы?

Любые идеи?


person PSN    schedule 07.10.2014    source источник
comment
Я бы связался с вашим веб-хостингом, чтобы узнать, можете ли вы в любом случае настроить crons. Я думаю, что потребность в заданиях cron является довольно распространенным запросом, поэтому многие хосты могут каким-то образом настроить их, даже без доступа к оболочке.   -  person Kai    schedule 08.10.2014
comment
какой тип хостинга у вас есть, даже без оболочки, многие хосты предлагают задания cron через cpanel   -  person    schedule 08.10.2014
comment
Скажите, даже если я настрою доступ к cron, сможет ли он сохранять данные из моего index.php (мой веб-сайт) и выдавать запросы с одними и теми же данными каждые 24 часа?   -  person PSN    schedule 08.10.2014
comment
да, может...... ну, cron ничего не делает, кроме запуска скрипта, всю тяжелую работу должен сделать скрипт   -  person    schedule 08.10.2014
comment
Если у вас есть доступ к планировщику на другой машине, которая включена и работает (не как рабочий стол, который вы выключаете каждую ночь), вы можете создать задачу для вызова вашего сценария напоминания.php с интервалом, проверяя, выполнялся ли он в последние 24 часа. часов и работает, если нет. Я бы не стал использовать sleep(), так как думал, что это заблокирует ресурсы для этого скрипта.   -  person Jared Farrish    schedule 08.10.2014


Ответы (4)


Используйте посетителей вашего сайта, чтобы инициировать событие. Отправьте сообщение, а затем проверьте, прошел ли 1 день. Тогда пошлите другой. Вы все еще должны обратить внимание, чтобы не двойное/тройное/... отправить deu на синхронизацию.

По истечении времени используйте MySQL (или системный) MUTEX, чтобы обеспечить только одну отправку.

person CodeAngry    schedule 07.10.2014
comment
А если нет посетителей? - person PSN; 08.10.2014
comment
@PSN Не повезло. Используйте системный cronjob. Или вызвать визит из другого места. - person CodeAngry; 08.10.2014

Да, ты можешь! Что вам нужно сделать, так это использовать задания cron. Задания Cron, по сути, говорят серверу выполнять скрипт (PHP или что-то другое) через равные промежутки времени. Задания Cron очень мощные и настраиваемые, так как вы можете установить практически любой интервал для своего cron.

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

Надеюсь это поможет.

person Ramsay Smith    schedule 07.10.2014
comment
@Dagon На самом деле да. Он спрашивал о том, как настроить задание cron, и я действительно дал ответ, как это сделать, а не просто сказал ему, что он должен использовать cron. Где твой ответ? - person Ramsay Smith; 08.10.2014
comment
Простите, если задам банальный вопрос. Насколько я понимаю, cron просто вызывает скрипт через заданные промежутки времени. Моему Rememberusers.php нужны данные из формы с моей веб-страницы. На основе этих данных он выдает запросы. Может ли cron сохранять эти данные и передавать их в мой скрипт через равные промежутки времени. Кроме того, мне придется автоматизировать cron, чтобы он запускался и заканчивался, когда этого хочет АДМИН. и обычно администратор вводит эти данные в форму моей веб-страницы. - person PSN; 08.10.2014
comment
@PSN — вы создаете таблицу, которая принимает данные формы, о которых вы говорите; когда он будет отправлен, поместите его в свою таблицу, а затем задача cron запустит скрипт, который считывает данные из вашей таблицы и делает то, что он говорит. cron специально не принимает данные ниоткуда; это всего лишь способ автоматизировать выполнение скрипта на основе какой-то задачи (поэтому в Windows это называется запланированной задачей). - person Jared Farrish; 08.10.2014
comment
Если вы хотите, вы можете сделать так, чтобы ваш сценарий, обрабатывающий ввод формы, сохранял эти данные в файл, а затем запланированный сценарий просто обращался к данным в файле. Что касается начала и окончания, cron может проверить и выполнить только в том случае, если текущее время находится между начальной и конечной датами, введенными АДМИНИСТРАТОРОМ, которые будут в файле. Вы также можете хранить данные в MySQL, если это имеет смысл. - person Ramsay Smith; 08.10.2014
comment
@RamsaySmith... Хорошая идея. Позвольте мне реализовать это и проверить. Спасибо ребята. - person PSN; 08.10.2014

Попробуйте с этим PHPCron

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

http://katyscode.wordpress.com/2006/10/17/phpcron-running-scheduled-tasks-from-php-on-a-web-server/

person esdebon    schedule 07.10.2014
comment
@esbedon Я посмотрю на ваш ответ позже и проверю, работает ли он :-) - person PSN; 08.10.2014

Я понимаю, что у вас нет доступа к Shell, но заглядывали ли вы в cPanel, чтобы узнать, есть ли там возможность настроить задание cron?

person Atzaman    schedule 07.10.2014
comment
комментарий, а не ответ - person ; 08.10.2014
comment
ну, я не могу комментировать, так как у меня недостаточно репутации, чтобы сделать это - person Atzaman; 08.10.2014
comment
Ребят, у меня ни шелла, ни cpanel вообще нет. Мне не нужно какое-либо внешнее приложение для выполнения моей работы, поскольку ИТ-отдел должен быть уведомлен, когда мне нужно загрузить cpanel, чего я не хочу. Мой код будет отправлен клиенту. Обычно вам не нужно, чтобы у клиента была cpanel. - person PSN; 08.10.2014
comment
php не имеет внутреннего планирования, вы должны полагаться на внешний источник, или вы просто не можете этого сделать - person ; 08.10.2014
comment
@Dagon Я думаю, что ответ Рамзи Смита имеет смысл, но ему тоже нужен cron, чтобы сделать это :-( - person PSN; 08.10.2014
comment
Когда кто-то отправляет свой еженедельный отчет, можете ли вы не заставить скрипт проверять, сделали ли это все остальные, и отправлять электронное письмо всем, кто не сделал этого в установленные сроки? т.е. Я отправляю свой отчет... при принятии отчета скрипт также проверяет, отправили ли другие отчеты, и если нет, отправляет им электронное письмо. - person Atzaman; 08.10.2014
comment
@Атзаман.. Да. на самом деле это было первое, что я реализовал. Но, увы, нам нужна специальная вкладка напоминаний АДМИНИСТРАТОРА, чтобы отправлять напоминания, которыми АДМИН может управлять. Я имею в виду, что ADMIN хочет иметь контроль над тем, когда напоминания начинаются и заканчиваются. - person PSN; 08.10.2014
comment
Немного сложно без cron... Я думаю, другим решением было бы хранить настройки напоминания ADMIN в базе данных и просто запускать сценарий напоминания при первом входе в систему каждый день. - person Atzaman; 08.10.2014