2013-04-04 22 views
0

我想運行一段文件一段時間。我可以爲此使用set_time_limit函數。但是我想在終止時調用一個函數。這個功能需要被調用。否則我將無法再次運行此文件。用戶在set_time_limit時定義函數調用PHP

當set_time_limit限制滿足時,是否有任何方法在終止時調用函數?

+0

您是否將此腳本用於Web請求或從命令行運行? – Naveed 2013-04-04 10:14:04

回答

1

你可以使用register_shutdown_function

<?php 
function shutdown() { 
    // 3 seconds are over 
    set_time_limit(0); // now we want no limit anymore 
    echo "Shutdown!\n"; 
    while(true); // some other long action 
} 
error_reporting(0); 
set_time_limit(3); 
register_shutdown_function('shutdown'); 
while(true); // some long action 

error_reporting調用完成時,申請期限超過,以避免錯誤消息。

+0

感謝您的回答,但我有一個疑問,正如您在代碼中提到的那樣,參數值爲3的set_time_limit意味着文件將執行3分鐘,並在終止時調用register_shutdown_function。但是現在由於應用了時間限制,現在可以運行回調函數。如果回調函數會運行一個很長的動作腳本。 – 2013-04-04 17:11:32

+0

@AbhimanyuSharma這是一個很好的觀點。我已經測試過了,似乎只要調用回調函數,PHP解釋器就會再次啓動超時,因此關閉功能最多也會運行3秒。您可以通過在關閉功能中調用'set_time_limit(0)'來防止這種情況,該功能會設置無限的時間限制。我已將這添加到我的答案中。但請注意,對關機執行很長時間的操作通常不是一個好主意,因爲除了超時超出之外,還會在腳本停止時執行回調! – 2013-04-05 12:13:43