PHP在windows系統中定時任務的實現

 

背景說明:

       服務器使用Apache,PHP的運行模式是使用php5apache2.dll模塊化的方式,環境中沒有php.exe程序來解釋PHP文件。

       據瞭解PHP不像JAVA一樣,有定時任務在服務器啓動的時候去自動運行,但是可以在瀏覽器運行php文件,問題是隻希望該文件在服務器運行,以下三種方案是參考一些資料摸索到的:

方案一:瀏覽器執行php文件

       PHP文件代碼如下: 

<?php

/**

 * $Id: timer.php 2014-11-25 10:27 CharlieChen $

 */

ignore_user_abort();//關掉瀏覽器,PHP腳本也可以繼續執行.

set_time_limit(0);//程序無限制的執行下去

$interval=5;// 每隔5秒鐘運行

do{

       //此處做你想做的事情

//include 'timer/timerService.php';

       sleep($interval);   

}while(true);

?>

執行方法:把該文件放在url能訪問的目錄,如http://localhost/timer.php回車執行一下,即可關閉瀏覽器或轉到系統其他地址;

       此方法在apache每次重啓後需要手動訪問一次即可。所以缺陷也在於此。

 

 

 

 

方案二:BAT執行php程序

       PHP代碼同方案一,BAT(taskPlane.bat)代碼如下:

@echo off

cls

::判斷Apache服務器是否啓動

for /f "skip=3 tokens=4" %%i in ('sc query Apache) do set "zt=%%i" &goto :next

 

:next

if /i "%zt%"=="RUNNING" (goto 1)

if /i "%zt%"=="STOPPED" (goto 2)

 

:1

::隱藏CMD窗口運行

if "%1" == "h" goto begin

mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit

 

:begin

cd..

set rootDir=%cd%

cd..

::是Apcahe的bin目錄,應包含Apache.exe文件

cd bin

set taskFile=timer.php

if exist "%rootDir%\%taskFile%" (goto exephp) else (echo err)

 

:exephp

echo %date:~0,10% %time:~0,8% Apache正常運行,推送待辦中...

echo 請保留此窗口或最小化運行

php -q "%rootDir%\%taskFile%"

exit

 

:2

echo %date:~0,10% %time:~0,8% Apache未運行

pause

該腳本首先判斷Apache服務是否啓動,如果不希望看到CMD的窗口,後臺運行,使用代碼:

if "%1" == "h" goto begin

mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit

::隱藏CMD窗口運行

:begin

::此處代碼會被執行

在代碼執行處執行php的命令,執行指定路徑的php文件。

 

 

方案三:BAT執行PHP程序 + Windows計劃任務

       此時PHP代碼只需寫需要做的事情,不需要循環執行,把定時執行任務交給Windows如下:

<?php

/**

 * $Id: timerService.php 2014-11-26 10:27 CharlieChen $

 */

 

$basedir = dirname(__FILE__);

$fp = fopen($basedir."/test.txt", "a");

$flag=fwrite($fp,date("Y-m-d H:i:s")."\r\n");

if(!$flag)

{

       echo "寫入文件失敗";

       break;

}

fclose($fp);

?>

 

BAT程序如上文,只是php文件要指定到timerService.php文件

 

 

WIN7系統打開“控制面板”-->“管理工具”-->“任務計劃程序”-->”創建任務“

1.在“常規“選項卡填寫一個名稱,配置win7環境隱藏運行

2.在“觸發器“選項卡新建觸發器,如下我新建一個每隔5分鐘就執行一次的計劃

3.在“操作“選項卡新建操作,指向BAT程序

此方法把定時交給操作系統來做,php只需執行想做的事就行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章