YurunPHP 1.3新加入了定時任務的功能,它可以定時執行一些操作,擁有高度自由的觸發時間配置功能。當然這個定時是不一定準時的,下面會有說明。如果需要極其準確的定時任務,請使用Linux下的Cron或者Windows的計劃任務功能。
> YurunPHP定時任務功能不推薦執行時間較長的任務!
### 原理解析
當用戶訪問時,判斷上次執行時間和當前時間是否滿足再次調用的條件,滿足則調用,不滿足則不調用。YurunPHP框架使用文件鎖,保證同時只有一個請求會執行定時任務。預防并發同時執行、惡意攻擊的情況。
### 配置方法
#### 自動觸發
在項目的Config目錄下創建task.php文件,復制下面的內容
~~~
return array(
'List' => array(), // 任務列表
'Status' => false, // 是否開啟自動檢測,默認為false
'ExecPercent' => 1, // 觸發概率,0-1代表0%-100%,默認為1
'OnlyOnce' => false, // 是否只執行一個任務就結束,防止一個請求執行時間過長導致失敗。默認為false
);
~~~
#### 手動觸發
在任意地方執行下面的語句
~~~
Task::exec();
~~~
### 任務開發
1.在項目目錄下創建Task文件夾
2.在Task文件夾下創建TestTask.class.php
3.在TestTask.class.php中為以下代碼
~~~
<?php
class TestTask extends TaskBase
{
public static $name = '任務名稱';
public static function exec()
{
// TODO: 任務操作
}
}
~~~
4.在配置文件task.php的List下加入
~~~
'Test' => array(
// 觸發事件條件1
array(
'StartTime' => 0,
'StopTime' => 0,
'Mode' => 0,
'Month' => 0,
'Day' => 0,
'Week' => 0,
'Hour' => 0,
'Minute' => 0,
'Second' => 0,
'Seconds' => 0,
),
// 觸發事件條件2
array(
'StartTime' => 0,
'StopTime' => 0,
'Mode' => 0,
'Month' => 0,
'Day' => 0,
'Week' => 0,
'Hour' => 0,
'Minute' => 0,
'Second' => 0,
'Seconds' => 0,
),
),
~~~
上面的觸發條件有需要可以無限增加,條件參數說明看下表:
| 參數名 | 說明 |
| --- | --- |
| StartTime | 時間戳。任務允許執行的開始時間。可不設置。 |
| StopTime | 時間戳。任務允許執行的結束時間。可不設置。 |
| Mode | 條件判斷模式。可不設置。看下面一個表格。 |
| Month | 幾月。可不設置。 |
| Day | 幾日。可不設置。 |
| Week | 星期幾,周一-周日=1-7。可不設置。 |
| Hour | 小時。可不設置。 |
| Minute | 分鐘。可不設置。 |
| Second | 秒數。可不設置。 |
| Seconds | 間隔多少秒執行,Mode為MODE_SECOND時有效。 |
#### Mode可選值表:
| 參數名 | 說明 |
| --- | --- |
| Task::MODE_SECOND | 按秒執行 |
| Task::MODE_EVERY_YEAR | 按每年執行 |
| Task::MODE_EVERY_MONTH | 按每月執行 |
| Task::MODE_EVERY_WEEK | 按每周執行 |
| Task::MODE_EVERY_DAY | 按每日執行 |
| Task::MODE_EVERY_HOUR | 按每小時執行 |
- 序言
- 有些話想說
- 基礎入門
- 簡介
- 下載YurunPHP
- 運行環境
- 開發規范
- 目錄結構
- 模塊
- 控制器
- 項目配置
- 入口文件
- 項目目錄結構
- 配置文件
- 框架編譯
- 項目部署
- 控制器
- 創建控制器
- 加載模版顯示頁面
- AJAX返回數據
- 模型
- 創建模型
- 實例化模型
- 數據管理
- 連貫操作
- distinct
- field
- from
- where
- wherePk
- group
- having
- order
- limit
- join
- page
- headTotal/footTotal
- 連貫操作收尾方法
- select
- selectPage
- buildSQL
- selectValue
- selectBy
- getBy
- getByPk
- random
- inc
- dec
- add
- edit
- delete
- 合計函數
- save
- 執行SQL語句
- 創建數據并驗證
- 字段映射
- GET/POST/COOKIE/REQUEST
- Cookie
- Session
- 數據庫操作
- 配置文件
- 常用操作
- 查詢記錄
- 存儲過程
- 數據庫函數
- MSSQL
- 視圖
- 調用視圖
- 給視圖傳值
- 模版引擎
- 輸出
- 使用PHP代碼
- 模版標簽
- if
- switch
- for
- counter
- foreach
- include
- js/css/image
- url
- 模版常量替換
- 自定義控件
- 通用屬性用法
- 數據集綁定
- 下拉框(select)
- 單選框(radio)
- 單選框組(radiogroup)
- 選擇框(checkbox)
- 選擇框組(checkboxgroup)
- 表格(table)
- 文本框(textbox)
- 分頁條(pagebar)
- 數據驗證
- 驗證方法
- between
- betweenEqual
- empty_str
- not_empty_str
- regex
- length
- lengthChar
- mobile
- tel
- phone
- postcode
- url
- ip
- lt/gt/ltEqual/gtEqual
- equal/unequal
- in/notin
- idcard
- 路由
- 路由配置
- 自定義分層
- 緩存
- 文件緩存
- 配置
- PHP數組配置
- 過濾域名
- 日志
- 文件日志
- 事件&插件機制
- 框架事件列表
- 多語言支持
- 定時任務
- API接口開發