PHP 函数 ignore_user_abort定时执行任务的实现
本函數(shù)返回 user-abort 設(shè)置的之前的值(一個(gè)布爾值)。
int ignore_user_abort ([ string $value ] )
| 參數(shù) | 描述 |
| setting | 可選。如果設(shè)置為 true,則忽略與用戶的斷開(kāi),如果設(shè)置為 false,會(huì)導(dǎo)致腳本停止運(yùn)行。 如果未設(shè)置該參數(shù),會(huì)返回當(dāng)前的設(shè)置。 |
注釋:PHP 不會(huì)檢測(cè)到用戶是否已斷開(kāi)連接,直到嘗試向客戶機(jī)發(fā)送信息為止。簡(jiǎn)單地使用 echo 語(yǔ)句無(wú)法確保信息發(fā)送,參閱 flush() 函數(shù)。
| 1234567891011121314151617181920212223242526 | 例-1 一個(gè)的ignore_user_abort()的例子,配合set_time_limit()函數(shù) 和一個(gè)死循環(huán)就可以實(shí)現(xiàn)計(jì)劃任務(wù)功能。 <?php // Ignore user aborts and allow the script // to run forever ignore_user_abort (true); set_time_limit (0); echo 'Testing connection handling in PHP' ; // Run a pointless loop that sometime // hopefully will make us click away from // page or click the "Stop" button. while(1) { // Did the connection fail? if( connection_status () != CONNECTION_NORMAL ) { break; } // Sleep for 10 seconds sleep (10); } // If this is reached, then the 'break' // was triggered from inside the while loop // So here we can log, or perform any other tasks // we need without actually being dependent on the // browser. ?> |
PHP內(nèi)置函數(shù)研究系列第二期,采用PHP函數(shù)ignore_user_abort實(shí)現(xiàn)計(jì)劃任務(wù)與持續(xù)進(jìn)程實(shí)例,并通過(guò)一個(gè)可檢測(cè)效果的實(shí)例討論ignore_user_abort()函數(shù)的作用與用法。
ignore_user_abort() 可以實(shí)現(xiàn)當(dāng)客戶端關(guān)閉后仍然可以執(zhí)行PHP代碼,可保持PHP進(jìn)程一直在執(zhí)行,可實(shí)現(xiàn)所謂的計(jì)劃任務(wù)功能與持續(xù)進(jìn)程,只需要開(kāi)啟執(zhí)行腳本,除非 apache等服務(wù)器重啟或有腳本有輸出,該P(yáng)HP腳本將一直處于執(zhí)行的狀態(tài),初看很實(shí)用,不過(guò)代價(jià)是一個(gè)PHP執(zhí)行腳本的持續(xù)進(jìn)程,開(kāi)銷很大,但卻可以 實(shí)現(xiàn)很多意想不到的功 能。
其描述為設(shè)置與客戶機(jī)斷開(kāi)是否會(huì)終止腳本的執(zhí)行。
一,函數(shù)原型
?| 1 | int ignore_user_abort ( [bool setting] ) |
二,版本兼容
PHP 3 >= 3.0.7, PHP 4, PHP 5
三,函數(shù)基礎(chǔ)用法與實(shí)例
1,函數(shù)基礎(chǔ)用法
?
| 123 | <?phpignore_user_abort();?> |
說(shuō)明:調(diào)用ignore_user_abort()函數(shù)聲明即使客戶機(jī)斷開(kāi)不終止腳本的執(zhí)行。
2,結(jié)合set_time_limit()函數(shù)實(shí)現(xiàn)一個(gè)循環(huán)腳本執(zhí)行任務(wù)
?
| 12345678 | <?phpignore_user_abort();set_time_limit(0);$interval=60*15;do{//執(zhí)行的業(yè)務(wù)}while(true);?> |
說(shuō)明:每隔15分鐘循環(huán)執(zhí)行
3,自定義實(shí)現(xiàn)文件輸出并跟蹤ignore_user_abort()函數(shù)的執(zhí)行結(jié)果
?
| 123456789101112 | <?phpignore_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 );?> |
打開(kāi)liuhui.php文件,文件內(nèi)容如下:
Current Time: 1273735029 Stop: 9
其原理是即使客戶端終止腳本,仍然每隔10秒鐘執(zhí)行一次,并打印出當(dāng)前時(shí)間與終止點(diǎn),這樣就可以測(cè)試出ignore_user_abort()函數(shù)的具體效果。
通過(guò)實(shí)例發(fā)現(xiàn)ignore_user_abort()函數(shù)非常實(shí)用,實(shí)現(xiàn)計(jì)劃任務(wù),完成后續(xù)任務(wù),持續(xù)進(jìn)程等非常有效。更多說(shuō)明請(qǐng)參與PHP手冊(cè)。請(qǐng)關(guān)注下一期PHP內(nèi)置函數(shù)研究系列。
?
轉(zhuǎn)自:http://www.cnblogs.com/wgw8299/articles/2170092.html
總結(jié)
以上是生活随笔為你收集整理的PHP 函数 ignore_user_abort定时执行任务的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 原来我们都是过客这是什么歌啊?
- 下一篇: PHP 队列