1

cron ジョブのように、Windows タスク スケジューラを使用して定期的に CodeIgniter コントローラーを実行したいと考えています。このメソッドでタスク スケジューラを使用してスタンドアロンの 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()メソッドを定期的に実行したい。

どんな助けでも大歓迎です。

4

1 に答える 1

0

write_file() をプライベートまたは保護されたメソッドとして作成し、ブラウザーからの使用を禁止します。サーバーに crontab を設定します (Linux の場合、または Windows サーバーの場合はタイム スケジュール)。$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

(これは毎日正午に行動します)。Ubuntu の Cron リファレンス

于 2016-01-24T13:39:41.377 に答える