我們使用Thinkphp框架在日常使用中難免會碰到一些需要在后臺自動執行的項目,如定時掃描等。雖然php提供了一些函數可以用代碼實現,即使關閉瀏覽器也不會中斷如:
ignore_user_abort();//關掉瀏覽器,PHP腳本也可以繼續執行.
set_time_limit(0);// 通過set_time_limit(0)可以讓程序無限制的執行下去
ini_set('memory_limit','512M'); // 設置內存限制
$interval=60*30;// 每隔半小時運行
do{
//ToDo
sleep($interval);// 等待5分鐘
}
while(true);
但是這種方法有一種致命的缺陷,就是無法控制,除非你結束php進程,內存消耗也很大,難以在實踐中使用
想要在性能和管理上更為合理,使用服務器提定時執行更為方便,拿windows為便,如果我們直接使用F:\index.php Home/index 會發現無法執行。因為絕對路徑無法調用thinkphp所以tp提供了使一種模式Cli模式。使用這種模式也非常簡單方便:
首先復制一份index.php 更名為cli.php放在根目錄。然后增加一行代碼
define('APP_MODE','cli');
設置為cli模式
再到ThinkPhp/Model/Sae目錄下復制一份api.php 更名為cli.php
這樣cli模式就配置完成了。我們可以用win自帶的定時執行測試一下。
我們寫一個.bat
先找到php執行文件的路徑 在bat文件里寫上執行代碼如:
E:\php.exe F:\cli.php Home/Index/index
前一段為php服務的路徑,后一段為tp項目的執行路徑。執行模塊HOME下 控制index控制器下的index操作。自行成功為自行關閉,如果失敗會顯示 錯誤代碼。
如果要執行多次任務,復制一行即可
成功后可以把代碼在定時任務里配置好,設置好定時時間,定時任務就配置完成了
ignore_user_abort();//關掉瀏覽器,PHP腳本也可以繼續執行.
set_time_limit(0);// 通過set_time_limit(0)可以讓程序無限制的執行下去
ini_set('memory_limit','512M'); // 設置內存限制
$interval=60*30;// 每隔半小時運行
do{
//ToDo
sleep($interval);// 等待5分鐘
}
while(true);
但是這種方法有一種致命的缺陷,就是無法控制,除非你結束php進程,內存消耗也很大,難以在實踐中使用
想要在性能和管理上更為合理,使用服務器提定時執行更為方便,拿windows為便,如果我們直接使用F:\index.php Home/index 會發現無法執行。因為絕對路徑無法調用thinkphp所以tp提供了使一種模式Cli模式。使用這種模式也非常簡單方便:
首先復制一份index.php 更名為cli.php放在根目錄。然后增加一行代碼
define('APP_MODE','cli');
設置為cli模式
再到ThinkPhp/Model/Sae目錄下復制一份api.php 更名為cli.php
這樣cli模式就配置完成了。我們可以用win自帶的定時執行測試一下。
我們寫一個.bat
先找到php執行文件的路徑 在bat文件里寫上執行代碼如:
E:\php.exe F:\cli.php Home/Index/index
前一段為php服務的路徑,后一段為tp項目的執行路徑。執行模塊HOME下 控制index控制器下的index操作。自行成功為自行關閉,如果失敗會顯示 錯誤代碼。
如果要執行多次任務,復制一行即可
成功后可以把代碼在定時任務里配置好,設置好定時時間,定時任務就配置完成了