YII console 定时脚本

可以用来做定时程序通过命令运行代码,非url访问方式更安全

linux/macos 上使用yiic配置(window上使用yiic.bat)

1.yiic要有执行权限,chmod -R 777 yiic

2.yiic用的PHP,需要指定PHP的正确路径:

#!/usr/bin/env php会自动的在你的用户PATH变量中所定义的目录中寻找php来执行的。

用vi打开yiic,把“#!/usr/bin/env php” 改为“#!/usr/local/php/bin/php(也就是你php路径)

也可以>/usr/local/bin/php yiic

 

1.yiic 命令用到的是yiic.php,也可以直接用yiic.php
2.控制台的命令配置文件是应用的protected/config/console.php文件,系统默认的路径是protected/commands/shell 如果你执行单一的任务,直接在run方法里面写,另外一种就是同写你的Controller(控制器),前面增加actionXXX

protected/extensions/clean_command/ECleanCommand.php

Java代码  YII console 定时脚本
  1. <?php  
  2. class ECleanCommand extends CConsoleCommand  
  3. {  
  4.     public $webRoot = null;  
  5.     public function getHelp()  
  6.     {  
  7.         $out = "Clean command allows you to clean up various temporary data Yii and an application are generating.\n\n";  
  8.         return $out.parent::getHelp();  
  9.     }  
  10.     public function actionCache()  
  11.     {  
  12.         $cache=Yii::app()->getComponent('cache');  
  13.         if($cache!==null){  
  14.             $cache->flush();  
  15.             echo "Done.\n";  
  16.         }  
  17.         else {  
  18.             echo "Please configure cache component.\n";  
  19.         }  
  20.     }  
  21.     public function actionAssets()  
  22.     {  
  23.         if(empty($this->webRoot))  
  24.         {  
  25.             echo "Please specify a path to webRoot in command properties.\n";  
  26.             Yii::app()->end();  
  27.         }  
  28.         $this->cleanDir($this->webRoot.'/assets');  
  29.         echo "Done.\n";  
  30.     }  
  31.     public function actionRuntime()  
  32.     {  
  33.         $this->cleanDir(Yii::app()->getRuntimePath());  
  34.         echo "Done.\n";  
  35.     }  
  36.     private function cleanDir($dir)  
  37.     {  
  38.         $di = new DirectoryIterator ($dir);  
  39.         foreach($di as $d)  
  40.         {  
  41.             if(!$d->isDot())  
  42.             {  
  43.                 echo "Removed ".$d->getPathname()."\n";  
  44.                 $this->removeDirRecursive($d->getPathname());  
  45.             }  
  46.         }  
  47.     }  
  48.     private function removeDirRecursive($dir)  
  49.     {  
  50.         $files = glob($dir.'*', GLOB_MARK);  
  51.         foreach ($files as $file)  
  52.         {  
  53.             if (is_dir($file))  
  54.             $this->removeDirRecursive($file);  
  55.             else  
  56.             unlink($file);  
  57.         }  
  58.         if (is_dir($dir))  
  59.         rmdir($dir);  
  60.     }  
  61. }  

 console.php,commandMap配置后不需要指定yiic shell index.php

Java代码  YII console 定时脚本
  1. <?php  
  2.   
  3. // This is the configuration for yiic console application.  
  4. // Any writable CConsoleApplication properties can be configured here.  
  5. return array(  
  6.     'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..',  
  7.     'name' => 'My Console Application',  
  8.     'import'=>array( //可以使用model等  
  9.         'application.models.*',  
  10.         'application.components.*',  
  11.     ),  
  12.     'components'=>array(   
  13.         'db'=>require(dirname(__FILE__) . '/db.php')  
  14.     ),  
  15.     'commandMap' => array(  
  16.         'clean' => array(  
  17.             'class' => 'ext.clean_command.ECleanCommand',  
  18.             'webRoot' => 'E:\Apache2\htdocs\webapp'//注意修改 class::webRoot  
  19.         ),  
  20.         'rbac' => array(  
  21.             'class' => 'application.commands.shell.RbacCommand',  
  22.         )  
  23.     ),  
  24. );  

命令行运行cd E:\Apache2\htdocs\webapp\protected\ 进入yiic.php的目录

yiic clean

Java代码  YII console 定时脚本
  1. Usage: E:\Apache2\htdocs\webapp\protected\yiic.php clean <action>  
  2. Actions:  
  3.     cache  
  4.     assets  
  5.     runtime  

yiic.php clean cache
yiic clean assets

Java代码  YII console 定时脚本
  1. E:\Apache2\htdocs\webapp\protected>yiic clean assets  
  2. Removed E:\Apache2\htdocs\webapp/assets\1f5cfc05  
  3. Removed E:\Apache2\htdocs\webapp/assets\836290cc  
  4. Done.  

yiic clean runtime

单一任务

Java代码  YII console 定时脚本
  1. <?php  
  2. class TestCommand extends CConsoleCommand  
  3. {  
  4.     public function getHelp()  
  5.     {  
  6.         return '这里显示命令的帮助信息';  
  7.     }  
  8.   
  9.     /** 
  10.      * Execute the action. 
  11.      * @param array command line parameters specific for this command 
  12.      */  
  13.     public function run($args)  
  14.     {  
  15.         if(!isset($args[0]))  
  16.             $this->usageError('请输入参数.');  
  17.         echo('你输入的参数是 :\n');  
  18.         var_dump($args);  
  19.         return 1; #必须返回数字  
  20.     }  
  21. }  

 /www/yii_dev/testwebap/protected/ yiic test p1 p2 p3
你输入的参数是 :\narray(3) {
  [0]=>string(2) "p1"
  [1]=>string(2) "p2"
  [2]=>string(2) "p3"
}

yii  crontab 作业方法

yii consolecommand 控制台命令,实现定时任务。当然,这得结合系统,如XP的计划任务,linux的crontab命令打开你的linux命令窗口,创建自动任务。至于windows系统 ,是计划任务(win系统,可以谷歌如何操作),下面只讲linux系统。

Java代码  YII console 定时脚本
  1. crontab -e  
  2. ##然后输入  
  3. 1 * * * *  php /具体地址/protected/yiic.php Test >>/具体地址/protected/commands/test.log  

'CException' with message 'Property "CConsoleApplication.user" is not defined.' 在console程序中不能用CWebUser,shell程序中调用到Yii::app()->user会报错

上一篇:WordPress 两步认证登录插件爆安全漏洞


下一篇:期待已久的区块链“杀手级应用” 为什么是一款撸猫软件?