这就是我的控制器的样子
<?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 是控制器,索引是一个函数。
现在我需要的是每x分钟运行一次脚本
当我通过浏览器运行脚本时,只是修改了 C:\ cron.txt 的时间。 我把这个放在心里
public function before() {
if(!Kohana::$is_cli) ;
}
是为了避免通过浏览器访问? 所以, 1.我如何拒绝浏览器的访问? 2.如何每隔x分钟运行一次代码?
答案 0 :(得分:1)
要检查脚本是否从命令行访问,请使用php_sapi_name() == 'cli'
使用它来检测您的脚本是从cli还是浏览器访问的。有关详细信息,请参阅here。
要使代码每X分钟运行一次,请创建一个新的任务调度程序,以便在其中运行带有命令行的.bat文件。确保使用完整路径调用php可执行文件,例如C:\apache\php.exe "C:\Program Files (x86)\EasyPHP\www\myweb\index.php" --uri=cron/index
欢呼声
答案 1 :(得分:1)
因为它的窗户,它实际上不是“cron”。你有两个选择:
action_index
执行无限循环,然后检查所需的时间间隔,并usleep
一段时间以节省CPU周期,如100,因此不需要进行所有处理功率 before()
中的代码应为
function before(){
if (!Kohana::$is_cli) { throw new HTTP_Exception_403; // Denied };
}
确保正确处理异常。或者您可以在403例外情况下将屏幕设为空白。您只能将--uri="cron"
传递给PHP命令行,因为index
部分始终是默认操作(在引导程序中的默认Route::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();
答案 2 :(得分:1)
使用这两个链接获取您需要的内容。Cron Jobs in Kohana 3
可以帮助kohana-cron的模块 Kohana Minion