Запустить задание 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, это сделает его недоступным для внешнего мира, поэтому эта идея не может работать.

Другие вопросы по тегам