1

これが私のコントローラーの外観です

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Cron extends Controller {

    public function before() {

        if(!Kohana::$is_cli) ;
    }

    public function action_index() {
        $myFile = "C:\cron.txt";
        $fh = fopen($myFile, 'w') or die("can't open file");
        fwrite($fh, "\n");
        $stringData = date('Y-m-d H:i:s');
        fwrite($fh, $stringData);
        fclose($fh);
    }
}

?>

これを使用してコマンドラインからスクリプトを実行します

php "C:\Program Files (x86)\EasyPHP\www\myweb\index.php" --uri=cron/index

ここで、cronはコントローラーで、indexは関数です。

今私が必要としているのは、x分ごとにスクリプトを実行することです

ブラウザーでスクリプトを実行すると、 C:\cron.txtが変更されるのはそのときだけです。これを入れてハート

public function before() {

        if(!Kohana::$is_cli) ;
    }

ブラウザ経由のアクセスを避けることでしたか? 1. ブラウザからのアクセスを拒否するにはどうすればよいですか? 2. x 分ごとにコードを実行するにはどうすればよいですか?

4

3 に答える 3

1

これらの2つのリンクを使用して、必要なものを入手してください。コハナ3のcronジョブ

kohana-cronKohanaMinion 支援できるモジュール

于 2012-12-12T19:30:21.887 に答える
1

Windowsなので、実際には「cron」ではありません。次の 2 つの選択肢があります。

  • 無限ループを実行するように設定してaction_indexから、目的の間隔を確認しusleep、しばらくの間、100 などの CPU サイクルを節約して、すべての処理能力を消費しないようにします。
  • Windows スケジューラを使用して、スクリプトを毎回実行します。

あなたのコードはbefore()

function before(){
  if (!Kohana::$is_cli) { throw new HTTP_Exception_403; // Denied };
} 

例外を適切に処理していることを確認してください。または、403 例外で画面を空白にすることもできます。部分は常にデフォルトのアクションである--uri="cron"ため、PHPコマンドラインにのみ渡すことができます(ブートストラップ内のデフォルトで)indexRoute::set

で例外をキャッチする必要がありますindex.php

 $request = Request::factory();

 try
 {
      $response = $request->execute();
 }
 catch (HTTP_Exception $exc)
 {
    $response = Request::factory('your/error')->execute();
    // or $response = Response::factory()->status(403)->body('<h1>403 Forbidden</h1>');
 }

 echo
   $response     
   ->send_headers()
   ->body();
于 2012-12-01T10:15:29.107 に答える
1

スクリプトがコマンドラインからアクセスされたかどうかを確認するには、php_sapi_name() == 'cli'それを使用して、スクリプトが cli またはブラウザーからアクセスしたかどうかを検出します。詳しくはこちらをご覧ください。

コードを X 分ごとに実行するには、新しいタスク スケジューラを作成して、コマンドラインを含む .bat ファイルを実行します。フルパスを使用してphp実行可能ファイルを呼び出すようにしてください。C:\apache\php.exe "C:\Program Files (x86)\EasyPHP\www\myweb\index.php" --uri=cron/index

乾杯

于 2012-12-01T09:01:20.733 に答える