天天看點

PHP定時器實作每隔幾秒運作一次用PHP實作定時器功能

php是伺服器端腳本了并不像js那樣有專業的settimeout函數來定時執行了,但隻要浏覽器不關閉各階層是可以做到了,下面一起來看看。

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

<?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,重新開機後就無效了。想再次進行定時執行,那麼把這段代碼再一次運作。

上面簡單例子可以說明這個原理。

那麼針對上面的例子,我可以進行一下改良方案。

建立外部引入變量檔案 switch.php 内容如下:

<?php

return 1;//1執行腳本 0退出執行腳本

改良腳本如下:

    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();

當然我們也可以使用系統的定時執行php腳本了,下面看個linux的例子。

在Crontab中使用PHP執行腳本

就像在Crontab中調用普通的shell腳本一樣(具體Crontab用法),使用PHP程式來調用PHP腳本。 

每一小時執行myscript.php如下:

# crontab -e 

00 * * * * /usr/local/bin/php /home/john/myscript.php

/usr/local/bin/php為PHP程式的路徑。

---------------------------------------------------------------------------------------------------

1、直接使用PHP來完成定時

PHP定時器實作每隔幾秒運作一次用PHP實作定時器功能
PHP定時器實作每隔幾秒運作一次用PHP實作定時器功能

 2.Linux/Unix的定時任務 定時直接可以用cron來執行一個php腳本 或者其他語言的腳本[你要有足夠的系統權限]

比如每隔5分鐘執行下 /root/bin目錄下的test.php腳本

PHP定時器實作每隔幾秒運作一次用PHP實作定時器功能
PHP定時器實作每隔幾秒運作一次用PHP實作定時器功能

如果要求實作連續、均勻的輸出效果(如輸出時間),則應設定緩存,即使用圖a對應的方法;如果對輸出顯示的連續性要求不高,或者時間間隔比較大(如定期自動備份,定時加密控制等),則使用圖b對應的方法即可。

   為友善了解,提供相關函數作用說明如下:

  ①ignore_user_abort(bool):設定與客戶機斷開是否會終止腳本的執行。

  ②set_time_limit(int seconds)設定允許腳本運作的時間,機關為秒。參數值為0時不受限制。

  ③ob_end_clean():清除服務端緩存的資料

  ④ob_start():開啟一個緩存(可嵌套)

   ⑤ob_flush():将緩存中的資料壓入隊列

  ⑥flush():輸出緩存隊列中的資料

  ⑦usleep(int m-seconds):以指定的微秒數延緩程式的執行。

  注:

  flush()和ob_flush()的正确順序應是,先ob_flush()再flush(),不可弄混。

  usleep()函數可替換成sleep()函數,不同之處在于sleep()的參數是秒。

如何聯系我:【萬裡虎】www.bravetiger.cn

【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)

【部落格】http://www.cnblogs.com/kenshinobiy/