Yii框架自動生成的Web應用骨架的目錄裡面有連個腳步文件,yiic和yiic.bat。 yiic是Unix/Linux平台用的,yiic.bat是windows平台用的。如果要查看腳本的幫助可以進入到腳步所在的根目錄,然後執行yiic help,他會列出所有可用的命令,裡面包括Yii提供的系統命令和用戶自定義的命令。 如果要知道如何執行一個命令可以執行以下命令: 1 yiic help 如果要執行一個命令,可以使用如下格式: 1 yiic [parameters...] 1、創建命令 控制台命令都是以類文件的方式存儲在 CConsoleApplication::commandPath 指定的目錄。默認是存儲在 protected/commands 。 每個類必須繼承自 CConsoleCommand 。類名的格式是 XyzCommand ,命令的名字首字母大寫,xyz才是命令本身。 可以通過配置 CConsoleApplication::commandMap ,命令類可以有不同的命名約定和不同的目錄。 創建一個新命令你可以覆蓋 CConsoleCommand::run() 或者寫一個或多個action. 覆蓋父類的run方法格式可以是: 1 public function run( $args ) { ... } 當執行一個命令的時候,run方法將會被調用,任何加在調用命令後面的參數將會賦給$args。 在命令內部可以用 Yii::app() 調用這個控制台的實例。 從1.1.1版本開始,可以創建一個全局的命令,被在同一台機器上的所有的Yii應用所共享。為了達到這樣的目的,你需要定義一個名為 YII_CONSOLE_COMMANDS 的環境變量,指向一個已存在的目錄,然後把這個全局的命令類放在這個目錄裡面。 2、控制台命令Action 一個控制台命令action就是一個控制台命令類的一個方法。 方法名的格式: actionXyz ,action名的首字母大寫,xyz才是被調用的action本身。 執行一個action的命令格式: 1 yiic --option1=value1 --option2=value2 ... 後面的option-value對將會賦給這個action方法的參數。如果你給出了option名而沒有給出對應的值,那麼這個option將會被認為是boolean值true。 action的參數也可以聲明一個數組類型,如: 1 public function actionIndex( array $types ) { ... } 調用它的命令是: 1 yiic sitemap index --types=News --types=Article 最終命令調用是: actionIndex(array('News', 'Article'))。 從1.1.6開始,還支持匿名參數和全局選項。 匿名參數 指的是不按正常選項參數格式(the format of options)的命令行參數,比如: yiic sitemap index --limit=5 News ,News就是一個匿名參數。 要使用匿名參數,action必須聲明一個 $args變量,比如: 1 public function actionIndex( $limit =10, $args = array ()) {...} $ args 會接收到所有可用的匿名參數。 全局選項 (Global options)指的是一個命令行選項被這個命令的所有action所共享。 比如:一個命令有好幾個action,我們想在每個action裡面都有一個名字叫 verbose 的選項,我們可以在每個action方法裡面都聲明一個叫 $verbose 的參數。 一個更好的做法是把它聲明成這個命令類的公共成員變量( public member variable ),這樣 verbose 就會成為一個全局的選項。 1 class SitemapCommand extends CConsoleCommand 2 { 3 public $verbose =false; 4 public function actionIndex( $type ) {...} 5 } 這樣就可以執行一個帶 verbose 選項的命令: 1 yiic sitemap index --verbose=1 --type=News 3、退出代碼 執行命令的宿主機器可能需要檢測我們的命令執行成功與否,它可以通過檢測命令最後退出是返回的退出碼來識別。 退出碼是介於0到254之間的整型值 ,0表示這個命令執行成功,非0表示這個命令執行期間出現錯誤。 你可以在action或者是run方法裡面通過一個退出碼來退出你的應用程序。 比如: 1 if ( /* error */ ) { 2 return 1; // exit with error code 1 3 } 4 // ... do something ... 5 return 0; // exit successfully 假如沒有返回值,將會有一個默認的0被返回 4、定制控制台應用 默認的控制台應用配置位置: protected/config/console.php 。 任何 CConsoleApplication 的公共屬性都可以在這個文件裡面配置。 這個配置文件類似於普通的web應用的配置文件。 Customizing Console Applications By default, if an application is created using the yiic webapp tool, the configuration for the console application will be protected/config/console.php . Like a Web application configuration file, this file is a PHP script which returns an array representing the property initial values for a console application instance. As a result, any public property of CConsoleApplication can be configured in this file. Because console commands are often created to serve for the Web application, they need to access the resources (such as DB connections) that are used by the latter. We can do so in the console application configuration file like the following: return array( ...... 'components'=>array( 'db'=>array( ...... ), ), ); As we can see, the format of the configuration is very similar to what we do in a Web application configuration. This is because both CConsoleApplication and CWebApplication share the same base class. 文章參考: http://www.yiiframework.com/doc/guide/1.1/zh_cn/topics.console ---------------------------------------------------------------------------------------------------------------------- 一篇文章: 使用YII框架進行PHP程序的計劃任務教程 1.當你通過yiic創建一個webapp應用後, 會在 webapp/protected/下生成yiic.php, 由於是命令行應用,所以這裡的yiic.php其實就是與webapp下的index.php一樣的,命令行入口文件。 2.打開yiic文件,添加一行設置,將commands目錄的路徑添加到yiic中,這樣,yiic就能夠找到commands目錄下的命令文件了,修改後的代碼如下,紅色為新加入代碼: 1 2 3 4 5 6 $yiic =dirname( __FILE__ ). '/http://www.cnblogs.com/yii-read-only/framework/yiic.php' ; $config =dirname( __FILE__ ). '/config/console.php' ; @putenv( 'YII_CONSOLE_COMMANDS=' . dirname( __FILE__ ). '/commands' ); require_once ( $yiic ); 或者是: 配置好,要執行的頁面。本文為 protected/commands/crons.php run(); ?> 3.配置好produ ct/config/console.php裡面需要用到的組件,像數據庫連接。 配置main/console.php,設置import路徑,以及db連接,這部份與main.php類似。 php // This is the configuration for yiic console application. // Any writable CConsoleApplication properties can be configured here. return array ( 'basePath' => dirname ( __FILE__ ) . DIRECTORY_SEPARATOR . '..', 'name' => 'My Console Application', 'import' => array ( 'application.models.*', 'application.components.*', 'application.components.base.*', 'application.components.imgthumb.*', 'application.models.form.*', '等等,導入所要的類包' ), 'components' => array ( // Main DB connection 'db' => array ( 'connectionString' => 'mysql:host=localhost;dbname=數據庫名稱', 'emulatePrepare' => true, 'username' => '數據庫名稱', 'password' => '數據庫密碼', 'charset' => 'utf8', 'tablePrefix' => 'company_'、//表前綴 ), 'log' => array ( 'class' => 'CLogRouter', 'routes' => array ( array ( 'class' => 'CFileLogRoute', 'levels' => 'error, warning' ) ) ) ) ); 4.繼承CConsoleCommand寫入自己的命令類,Yii提供了兩種方式去執行, 如果你執行單一的任務,直接在run方法裡面寫,另外一種 就是同寫你的Controller(控制器),增加actionXXX即可。 本實例采用第二種方式,即采用web程序開發的方式,在基礎了CConsoleCommand的類中添加actionXXX方法來執行程序。 我們在commands目錄下創建一個文件,來執行我們要執行的任務,暫且命名為TestCommand.php 。 4,打開你的linux命令窗口,創建自動任務。至於windows系統 ,是計劃任務(win系統,可以谷歌如何操作),下面只講linux系統。 crontab -e ##然後輸入 1 * * * * php /具體地址/protected/commands/crons.php Test >>/具體地址/protected/commands/test.log ##上面命令說明,每分鐘執行Test任務一次,把日志保存在test.log下 至此,自動化任務已完成。 windows下面計劃任務: schtasks /create /sc minute /mo 1 /tn "taskPhp" /tr "php F:\xampp\htdocs\php\yiiblog2\protected\commands\crons.php CInsert insertData" 刪除計劃任務 schtasks /delete /tn "taskPhp" 每個1分鐘就執行CInsert命令中的insertData方法。 參考了: http://www.cnlvzi.com/index.php/Index/article/id/124 http://www.yiibase.com/yii/218.html http://www.yiiframework.com/wiki/221/cronjobsyii/ http://986866294.blog.163.com/blog/static/1651222522013571578115/