yii框架,命令列應用程式設計

2021-05-25 00:51:05 字數 3188 閱讀 7668

require_once($yiic);

3.我們在commands目錄下建立乙個檔案,由於我們要做乙個發郵件的命令,所以命名為mailcommand.php

**如下:

<?php

/*** description of mailcommand

** @author syang

*/class mailcommand extends cconsolecommand

if ($limit >= 100 or $limit <= 0)

mailqueue::model()->send($limit);

}public function usageerror($message)

public function runerror($message)

protected function checkmon($action='', $process_num=1)

$cmd = "ps -ef | grep -v grep | grep yiic | grep /"/" ";

if ($action!=$this->defaultaction) /" ";

}$cmd .= "| wc -l ";

$current_process_num = shell_exec($cmd);

if ( intval($current_process_num) > $process_num )

else }}

ok,讓我先講解一下mailcommand類,這個擴充套件了cconsolecommand,主要方法actioncron,與我們在web應用中的控制器寫方類似,actioncron方法有乙個引數叫limit,它有乙個預設值,

注意:如果action***方法有引數,且沒有預設值,則在呼叫命令時,則必須指定引數(否則會報用法錯誤)。

如果action***方法沒有引數,則在呼叫命令時,不能指定引數 (否則會報用法錯誤)。

如果action***有引數且有預設值,則呼叫命令時,可以指定也可以不指定引數

usageerror方法是繼承自cconsolecommand,由於cconsolecommand類中定義的usageerror僅僅只是die掉了,shell下返回的值還是0。所以,這裡我修改了一下。

注意:通過在shell下執行一條命令後,可以通過$?獲得剛才那條命令的執**況。通常它與普通的程式語言的真假正好相反,即,$?為0表示上一條命令執行成功,如果$?非0則表示上條命令存在錯誤,執行不成功。

runerror方法與usageerror類似,只是不顯示用法資訊。

checkmon方法是我自己寫的,主要是通過shell命令(僅限類nix系統)獲得當前命令的程序數,舉個例子,我們建立的mail命令,是通過crontab定義跑的,如果命令執行時間超過了下一次定時啟動,則可能會出現2個或2個以上的程序。通過checkmon,我們基本上可以限制,這條命令可以啟動幾個程序,預設只有乙個程序。通過checkmon方法,我們判斷了如果有乙個程序存在,就退出。不再執行。

4.ok,下面我們建立乙個表mail_queue,sql如下:

create table if not exists `mail_queue` (

`queue_id` int(11) unsigned not null auto_increment,

`mail_to` varchar(150) not null default '',

`mail_encoding` varchar(50) not null default '',

`mail_subject` varchar(255) not null default '',

`mail_body` text not null,

`priority` tinyint(1) unsigned not null default '2',

`err_num` tinyint(1) unsigned not null default '0',

`add_time` int(11) not null default '0',

`lock_expiry` int(11) not null default '0',

primary key  (`queue_id`)

) engine=myisam  default charset=utf8

注:為了演示,上面的表我直接使用了ecmall的郵件隊列表,以下程式思路基本參考ecmall的程式

5.配置main/console.php,設定import路徑,以及db連線,這部份與main.php類似。

並且在params部分新增了mailconfig的配置引數

'params'=>array(

// this is used in contact page

'mailconfig'=>array(

'sender'=> 'yiibook test email',

'from'=> '[email protected]',

'protocol' => '0', //1 is smtp

'host' => '',

'port' => '',

'username' => '',

'password' => '',)),

6.通過yiic或gii建立mail_queue表的模型類mailqueue.php

7.  在  mailqueue.php中新增以下兩個方法

/***    清除傳送n次錯誤和過期的郵件

*/function clear()

/***    傳送郵件

*/function send($limit = 5)

else

}function send($mailto, $subject, $content, $charset, $is_html, $receipt = false)

return $res;

}function _base64_encode($str = '')

}9.ok,基本完成了,

在命令列下,如我們當前在protected目錄下,執行

./yiic mail

或./yiic mail cron

或./yiic mail cron --limit=10

總結,本篇僅通過乙個具體的例子,演示了yii框架的命令列應用程式開發,僅做拋磚引玉。

涉及了shell的一些應用常識,yii框架的模型操作以及第三方類庫的呼叫。

本人水平有限,歡迎拍磚。

IAP 應用程式設計

1 檢查是否需要對第二部分 進行更新 2 如果不需要更新則轉到4 3 執行更新操作 4 跳轉到第二部分 執行 第一部分 必須通過其它手段,如jtag或isp燒入 第二部分 可以使用第一部分 iap功能燒入,也可以和第一部分 一道燒入,以後需要程式更新是再通過第一部分iap 更新。對於stm32來說,...

串列埠應用程式設計

include include 標準輸入輸出定義 include 標準函式庫定義 include unix 標準函式定義 include include include 檔案控制定義 include ppsix 終端控制定義 include 錯誤號定義 include include include...

DirectShow應用程式設計介紹

這篇文章包含兩方面內容 filter graphs 寫乙個dshow應用程式 一 filter graphs dshow的基本軟構件塊是一種叫做filter的元件。a filter一般只執行基於多 資料上的單一的操作。例如,有一些dshow filter有如下功能 1 讀檔案 2 3 為某一種流格式...