根據php手冊簡單介紹一些相關的知識:
1.串連處理:
在 PHP 內部,系統維護著串連狀態,其狀態有三種可能的情況:
0 - NORMAL(正常)
1 - ABORTED(異常退出)
2 - TIMEOUT(逾時)
當 PHP 指令碼正常地運行 NORMAL 狀態時,串連為有效。當遠程用戶端中斷串連時,ABORTED 狀態的標記將會被開啟。遠程用戶端串連的中斷通常是由使用者點擊 STOP 按鈕導致的。當連線時間超過 PHP 的時限時,TIMEOUT 狀態的標記將被開啟。
可以決定指令碼是否需要在用戶端中斷串連時退出。有時候讓指令碼完整地運行會帶來很多方便,即使沒有遠程瀏覽器接受指令碼的輸出。預設的情況是當遠程用戶端串連中斷時指令碼將會退出。該處理過程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 設定中對應的"php_value ignore_user_abort"以及 ignore_user_abort() 函數來控制。如果沒有告訴 PHP 忽略使用者的中斷,指令碼將會被中斷,除非通過 register_shutdown_function() 設定了關閉觸發函數。通過該關閉觸發函數,當遠端使用者點擊 STOP 按鈕後,指令碼再次嘗試輸出資料時,PHP 將會檢測到串連已被中斷,並調用關閉觸發函數。
指令碼也有可能被內建的指令碼計時器中斷。預設的逾時限制為 30 秒。這個值可以通過設定 php.ini 的 max_execution_time 或 Apache .conf 設定中對應的"php_value max_execution_time"參數或者 set_time_limit() 函數來更改。當計數器逾時的時候,指令碼將會類似於以上串連中斷的情況退出,先前被註冊過的關閉觸發函數也將在這時被執行。在該關閉觸發函數中,可以通過調用 connection_status() 函數來檢查逾時是否導致關閉觸發函數被調用。如果逾時導致了關閉觸發函數的調用,該函數將返回 2。
需要注意的一點是 ABORTED 和 TIMEOUT 狀態可以同時有效。這在告訴 PHP 忽略使用者的退出操作時是可能的。PHP 將仍然注意使用者已經中斷了串連但指令碼仍然在啟動並執行情況。如果到了啟動並執行時間限制,指令碼將被退出,設定過的關閉觸發函數也將被執行。在這時會發現函數 connection_status() 返回 3。
2.相關函數:
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.
為了定時更新某一檔案,需要程式自動運行,從網上搜到了兩種方法:ignore_user_abort() 和crontab
ignore_user_abort()函數搭配set_time_limit(0)和sleep($interval)即可實現程式自動運行更新,下面是一個執行個體
複製代碼 代碼如下:
ignore_user_abort(); //即使Client斷開(如關掉瀏覽器),PHP指令碼也可以繼續執行.
set_time_limit(0); // 執行時間為無限制,php預設的執行時間是30秒,通過set_time_limit(0)可以讓程式無限制的執行下去
$interval=60*5; // 每隔5分鐘運行
do{
$fp = fopen('test.txt','a');
fwrite($fp,'test');
fclose($fp);
sleep($interval); // 等待5分鐘
}while(true);
只要運行上面的頁面,然後關掉,程式就會一直運行下去。
Linux 下有種更簡單的方法,就是crontab命令
crontab命令的功能是在一定的時間間隔調度一些命令的執行。
crontab 使用方法: crontab [ -e | -l | -r ] 檔案名稱 -e:編輯任務 -l:顯示任務資訊 -r:刪除定時執行任務資訊
crontab的格式:
* * * * * Command
分 時 日 月 星期 要啟動並執行命令
crontab的例子:
*/5 * * * * lynx http://www.jb51.net
每5分鐘訪問一次 www.jb51.net
0 8 * * * lynx http://www.jb51.net
每天早上8點訪問 www.jb51.net
0 10 6 * 1-5 lynx http://www.jb51.net
每個月的6號和每個禮拜的星期一到星期五的早上10點訪問 www.jb51.net
0 5 7 8 * lynx http://www.jb51.net
8月7日早上5點訪問 www.jb51.net
上面幾個特殊的意思:
"*"代表所有的取值範圍內的數字,"/"代表每的意思,"*/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。
http://www.bkjia.com/PHPjc/326376.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/326376.htmlTechArticle根據php手冊簡單介紹一些相關的知識: 1.串連處理: 在 PHP 內部,系統維護著串連狀態,其狀態有三種可能的情況: 0 - NORMAL(正常) 1 -...