讓PHP文件每隔幾秒執行一次


轉自:http://www.blhere.com/966.html

背景是這樣的:我需要一段PHP代碼去定期對數據庫操作,並把結果保存起來。如果方法是用戶請求的時候來觸發執行這個代碼,顯然用戶的響應時間變長,影響用戶體驗!如果利用操作系統的定時任務,執行頻率也是非常高的。

下面寫個簡單例子來講解這個方法。

1
2
3
4
5
6
7
8
9
10
<?php
ignore_user_abort ( ) ; //關閉瀏覽器仍然執行
set_time_limit ( 0 ) ; //讓程序一直執行下去
$interval = 3 ; //每隔一定時間運行
do {
    $msg = date ( "Y-m-d H:i:s" ) ;
    file_put_contents ( "log.log" , $msg ,FILE_APPEND ) ; //記錄日志
    sleep ( $interval ) ; //等待時間,進行下一次操作。
} while ( true ) ;
?>

需要說明的是:程序沒有寫結束判斷語句,他會無限循環下去。當然如果想停止的話,可以重啟apache,重啟后就無效了。想再次進行定時執行,那么把這段代碼再一次運行。

上面簡單例子可以說明這個原理。
那么針對上面的例子,我可以進行一下改良方案。

你需要一個執行腳本的開關,你可以用外部文件引入的方法來實現,在while循環的時候,include開關變量即可。那么就可以這樣實現:
建立外部引入變量文件 switch.php 內容如下:

1
2
3
<?php
return 1 ; //1執行腳本 0退出執行腳本
?>

改良腳本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    ignore_user_abort ( ) ; //關閉瀏覽器后,繼續執行php代碼
    set_time_limit ( 0 ) ; //程序執行時間無限制
    $sleep_time = 5 ; //多長時間執行一次
    $switch = include 'switch.php' ;
    while ( $switch ) {
        $switch = include 'switch.php' ;
        $msg = date ( "Y-m-d H:i:s" ) . $switch ;
            file_put_contents ( "log.log" , $msg ,FILE_APPEND ) ; //記錄日志
        sleep ( $sleep_time ) ; //等待時間,進行下一次操作。
    }
    exit ( ) ;
   
?>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM