Запустить задание Cron на контроллере CodeIgniter, который требует, чтобы я вошел в систему? Должен ли я использовать публичную / частную функцию в такой ситуации?
Я хочу запускать URL каждый день в 13:00, который проверяет, были ли изменены некоторые переменные, выполняя запрос к внешнему API, а если изменился - сохраняйте новые переменные и уведомляю меня по электронной почте.
Рабочая среда:
Я использую CodeIgniter MVC Framework.
Ubuntu Server 15.10.
Больше информации о ситуации:
- Контроллер
function cron_job()
установлен на public, хотя я не уверен, что это безопасно и актуально для публичности, так как это специальная функция, которую должен запускать только сервер.
публичная функция cron_job () {
// проверяет vars и отправляет обновленные сообщения по электронной почте.
}
- Функция написана на контроллере, который позволяет вам запускать ее только в том случае, если у вас есть сеанс logged_in. Сессия logged_in создается с использованием зашифрованной функции, которую предлагает CodeIgniter. Который довольно крутой и простой в использовании. и безопасно. Так что, если я хочу запустить это, мне нужно как-то добавить сеанс перед запуском
cron_job()
функция. (Создайте новую частную функцию, которая добавляет сеанс и вызываетcron_job()
функционировать? Я действительно не уверен, что это правильно делать)
что-то вроде этого?
приватная функция add_session () {
$ date = array (
'email' => $ email, //??? 'is_logged_in' => TRUE
);
$ This-> cron_job ();
}
мне даже разрешено запускать приватную функцию с сервера?
или я могу вставить переменную сеанса, используя зашифрованную функциональность CI, и сделать это легко вместе с функциональностью задания cron моего сервера Ubuntu?
1 ответ
Не используйте веб-концепции для функций CLI... И вообще, не связывайтесь с состояниями аутентификации и входа в систему.
Что вам нужно сделать, это переместить эту функцию в отдельный контроллер, который не требует, чтобы вы были "залогинены" и вставили проверку, чтобы убедиться, что она может быть запущена только через CLI, например:
class Cli_only extends CI_Controller {
public function __construct()
{
parent::__construct();
is_cli() OR show_404();
}
}
Кроме того, если сделать метод контроллера закрытым в CI, это сделает его недоступным для внешнего мира, поэтому эта идея не может работать.