函數定義:
void set_time_limit ( int $seconds )
設置允許腳本運行的時間,單位為秒。如果超過了此設置,腳本返回一個致命的錯誤。默認值為30秒,或者是在php.ini的max_execution_time被定義的值,如果此值存在。
當此函數被調用時,set_time_limit()會從零開始重新啟動超時計數器。換句話說,如果超時默認是30秒,同時,腳本中又設置了25秒,如 set_time_limit(20)。那么,腳本在超時之前可運行總共時間為45秒。
安全模式下, 該函數無效.
set_time_limit()函數和配置指令max_execution_time僅僅只影響腳本本身的執行時間。任何時間運行程序的操作,在腳本執行系統調用,如使用system(),流操作,數據庫查詢等,不包括在確定的最大時間,該腳本已運行。這不是在Windows如此,因為測量的時間是真實的。
sleep()函數的效果根據操作系統不同而不同, linux下執行程序時的持續時間將會被忽略掉, windows下執行程序時的持續時間將被計算在內.
例子1:
<?php if( !ini_get('safe_mode') ){ set_time_limit(25); } ?>
例子2:
<?php set_time_limit(20); while ($i<=10) { echo "i=$i "; sleep(100); $i++; } ?>
說明: 在linux下, sleep不起作用; windows會報超時, 而不會有任何輸出.
例子3:
<?php $es = ini_get('error_reporting'); register_shutdown_function( "time_out_callback"); set_time_limit( 3 );//假設3秒超時 error_reporting( 0 );//屏蔽fatal error //模擬超時 while (true) { //echo connection_status()."<br/>"; } error_reporting($es);//恢復設置 function time_out_callback() { if(connection_status() == 2) { b(); } } function b() { echo 'hello world!'; } ?>
超時錯誤捕獲.
