ignore_user_abort 設置與客戶機斷開是否會終止腳本的執行。
本函數返回 user-abort 設置的之前的值(一個布爾值)。
int ignore_user_abort ([ string $value ] )
參數setting描述:可選。如果設置為 true,則忽略與用戶的斷開,如果設置為 false,會導致腳本停止運行。
如果未設置該參數,會返回當前的設置。
注釋:PHP 不會檢測到用戶是否已斷開連接,直到嘗試向客戶機發送信息為止。簡單地使用 echo 語句無法確保信息發送,參閱 flush() 函數。
例-1 一個的ignore_user_abort()的例子,配合set_time_limit()函數 和一個死循環就可以實現計劃任務功能。
復制代碼 代碼如下:
<?php
ignore_user_abort(true);
set_time_limit(0);
echo 'Testing connection handling in PHP';
while (1)
{
if (connection_status() != CONNECTION_NORMAL) {
break;
}
// Sleep for 10 seconds
sleep(10);
}
?>
PHP內置函數研究系列第二期,采用PHP函數ignore_user_abort實現計劃任務與持續進程實例,並通過一個可檢測效果的實例討論ignore_user_abort()函數的作用與用法。
ignore_user_abort() 可以實現當客戶端關閉後仍然可以執行PHP代碼,可保持PHP進程一直在執行,可實現所謂的計劃任務功能與持續進程,只需要開啟執行腳本,除非 apache等服務器重啟或有腳本有輸出,該PHP腳本將一直處於執行的狀態,初看很實用,不過代價是一個PHP執行腳本的持續進程,開銷很大,但卻可以 實現很多意想不到的功 能。
其描述為設置與客戶機斷開是否會終止腳本的執行。
附:另一篇介紹
一,函數原型
復制代碼 代碼如下:
int ignore_user_abort ( [bool setting] )
二,版本兼容
復制代碼 代碼如下:PHP 3 >= 3.0.7, PHP 4, PHP 5
三,函數基礎用法與實例
1,函數基礎用法
復制代碼 代碼如下:
<?php
ignore_user_abort();
?>
說明:調用ignore_user_abort()函數聲明即使客戶機斷開不終止腳本的執行。
2,結合set_time_limit()函數實現一個循環腳本執行任務
復制代碼 代碼如下:
<?php
ignore_user_abort();
set_time_limit(0);
$interval=60*15;
do{
//執行的業務
}while(true);
?>
說明:每隔15分鐘循環執行
3,自定義實現文件輸出並跟蹤ignore_user_abort()函數的執行結果
復制代碼 代碼如下:
<?php
ignore_user_abort ( TRUE );
set_time_limit ( 0 );
$interval = 10;
$stop = 1;
do {
if( $stop == 10 ) break;
file_put_contents('liuhui.php',' Current Time: '.time().' Stop: '.$stop);
$stop++;
sleep ( $interval );
} while ( true );
?>
打開liuhui.php文件,文件內容如下:
復制代碼 代碼如下:
Current Time: 1273735029 Stop: 9
其原理是即使客戶端終止腳本,仍然每隔10秒鐘執行一次,並打印出當前時間與終止點,這樣就可以測試出ignore_user_abort()函數的具體效果。
通過實例發現ignore_user_abort()函數非常實用,實現計劃任務,完成後續任務,持續進程等非常有效。更多說明請參與PHP手冊。請關注下一期PHP內置函數研究系列。