Запустите контроллер Codeigniter с помощью планировщика заданий Windows (задание Cron)

Я хочу периодически запускать контроллер CodeIgniter, используя планировщик заданий Windows, как задание cron. Я запустил автономный PHP-файл с помощью планировщика задач с этот метод, но не удалось реализовать это на контроллере CodeIgniter.

Вот мой контроллер:

<?php
defined("BASEPATH") OR exit("No direct script access allowed");

class Cron_test extends CI_Controller {

public $file;
public $path;

public function __construct()
{
parent::__construct();
$this->load->helper("file");
$this->load->helper("directory");

$this->path = "application" . DIRECTORY_SEPARATOR . "cron_test" . DIRECTORY_SEPARATOR;
$this->file = $this->path . "cron.txt";
}

public function index()
{
$date = date("Y:m:d h:i:s");
$data = $date . " --- Cron test from CI";

$this->write_file($data);
}

public function write_file($data)
{
write_file($this->file, $data . "\n", "a");
}
}

Я хочу бежать index() метод периодически.

Любая помощь будет высоко оценена.

1

Решение

Сделайте ваш write_file () как закрытый или защищенный метод, чтобы запретить его использование в браузерах. Установите crontab на вашем сервере (если Linux, или Time Schedule, если Windows server). Используйте полный путь $path (Т.е. $this->path = APPPATH . "cron_test" . DIRECTORY_SEPARATOR;). Используйте двойную проверку, чтобы убедиться, что запрос cli выполнен.
Что-то вроде:

<?php
defined("BASEPATH") OR exit("No direct script access allowed");

class Cron_test extends CI_Controller
{

public $file;
public $path;

public function __construct()
{
parent::__construct();
$this->load->helper("file");
$this->load->helper("directory");

$this->path = APPPATH . "cron_test" . DIRECTORY_SEPARATOR;
$this->file = $this->path . "cron.txt";
}

public function index()
{
if ($this->is_cli_request())
{
$date = date("Y:m:d h:i:s");
$data = $date . " --- Cron test from CI";

$this->write_file($data);
}
else
{
exit;
}
}

private function write_file($data)
{
write_file($this->file, $data . "\n", "a");
}
}

Чем, на вашем сервере установлен crontab. Это может выглядеть примерно так:

* 12 * * * /var/www/html/index.php cli/Cron_test

(Этот будет действовать каждый день в полдень). Ссылка Cron на Ubuntu.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]