溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php定時計劃任務介紹

發(fā)布時間:2020-07-18 15:06:36 來源:網(wǎng)絡(luò) 閱讀:308 作者:jyb2014 欄目:web開發(fā)

ignore_user_abort();函數(shù)搭配set_time_limit(0);和sleep($interval);即可實現(xiàn)php定時計劃任務

先給出一個基本的范式,其中有個人的測試程序:

<?php

ignore_user_abort(); // run script in background

set_time_limit(0); // run script forever

$interval=30; // do every 15 minutes...

do{

$fp = fopen('text3.txt','a');

fwrite($fp,'test');

fclose($fp);

sleep($interval); // wait 15 minutes

}while(true);

?>

首先運行該程序,然后關(guān)閉該頁面,程序仍然運行中,test會每隔30秒的填補到text3.txt文件。

實現(xiàn)效果如圖:(略)

最后根據(jù)php手冊簡單介紹一些相關(guān)的知識:

1.連接處理:

在 PHP 內(nèi)部,系統(tǒng)維護著連接狀態(tài),其狀態(tài)有三種可能的情況:

0 - NORMAL(正常)

1 - ABORTED(異常退出)

2 - TIMEOUT(超時)

當 PHP 腳本正常地運行 NORMAL 狀態(tài)時,連接為有效。當遠程客戶端中斷連接時,ABORTED 狀態(tài)的標記將會被打開。遠程客戶端連接的中斷通常是由用戶點擊 STOP 按鈕導致的。當連接時間超過 PHP 的時限時,TIMEOUT 狀態(tài)的標記將被打開。

可以決定腳本是否需要在客戶端中斷連接時退出。有時候讓腳本完整地運行會帶來很多方便,即使沒有遠程瀏覽器接受腳本的輸出。默認的情況是當遠程客戶端連接中斷時腳本將會退出。該處理過程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 設(shè)置中對應的"php_value ignore_user_abort"以及 ignore_user_abort() 函數(shù)來控制。如果沒有告訴 PHP 忽略用戶的中斷,腳本將會被中斷,除非通過 register_shutdown_function() 設(shè)置了關(guān)閉觸發(fā)函數(shù)。通過該關(guān)閉觸發(fā)函數(shù),當遠程用戶點擊 STOP 按鈕后,腳本再次嘗試輸出數(shù)據(jù)時,PHP 將會檢測到連接已被中斷,并調(diào)用關(guān)閉觸發(fā)函數(shù)。

腳本也有可能被內(nèi)置的腳本計時器中斷。默認的超時限制為 30 秒。這個值可以通過設(shè)置 php.ini 的 max_execution_time 或 Apache .conf 設(shè)置中對應的"php_value max_execution_time"參數(shù)或者 set_time_limit() 函數(shù)來更改。當計數(shù)器超時的時候,腳本將會類似于以上連接中斷的情況退出,先前被注冊過的關(guān)閉觸發(fā)函數(shù)也將在這時被執(zhí)行。在該關(guān)閉觸發(fā)函數(shù)中,可以通過調(diào)用 connection_status() 函數(shù)來檢查超時是否導致關(guān)閉觸發(fā)函數(shù)被調(diào)用。如果超時導致了關(guān)閉觸發(fā)函數(shù)的調(diào)用,該函數(shù)將返回 2。

需要注意的一點是 ABORTED 和 TIMEOUT 狀態(tài)可以同時有效。這在告訴 PHP 忽略用戶的退出操作時是可能的。PHP 將仍然注意用戶已經(jīng)中斷了連接但腳本仍然在運行的情況。如果到了運行的時間限制,腳本將被退出,設(shè)置過的關(guān)閉觸發(fā)函數(shù)也將被執(zhí)行。在這時會發(fā)現(xiàn)函數(shù) connection_status() 返回 3。

2.相關(guān)函數(shù):

int ignore_user_abort ( [bool setting] )

This function sets whether a client disconnect should cause a script to be aborted. It will return the previous setting and can be called without an argument to not change the current setting and only return the current setting.


int connection_aborted ( void )

Returns TRUE if client disconnected.


int connection_status ( void )

Returns the connection status bitfield.


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI