foreach ($arr as $k => $v)
{
$r = my_func($v);
$new[$k] = $r;
}
你怎麼做,這樣$r
將返回false,如果my_func()
時間超過10秒來執行,否則(如果它用了不到10秒),它將返回true;PHP:每個功能限制執行時間
附加信息:my_func()
實際上讀取一個URL,有時需要很長時間。如果超過10秒,我希望它返回false。
foreach ($arr as $k => $v)
{
$r = my_func($v);
$new[$k] = $r;
}
你怎麼做,這樣$r
將返回false,如果my_func()
時間超過10秒來執行,否則(如果它用了不到10秒),它將返回true;PHP:每個功能限制執行時間
附加信息:my_func()
實際上讀取一個URL,有時需要很長時間。如果超過10秒,我希望它返回false。
你不能在PHP中的功能限制執行時間。但是,不要絕望:如果你提到你的函數讀取URL,你可以使用curl分機時,選擇通過curl_setopt設置選項,如下:
CURLOPT_TIMEOUT的最大秒數,讓捲曲函數來執行。 CURLOPT_CONNECTTIMEOUT嘗試連接時等待的秒數。
使用這些可以限制用curl處理URL處理的實際時間。
你也可以使用http擴展名,它也允許你做http連接並且有timeout options。
最後,你可以使用context options到file_get_contents:
$opts = array('http' =>
array(
'timeout' => 1.5 // 1.5 seconds
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://example.com/getdata.php', false, $context);
做這樣的事情:
foreach ($arr as $k => $v)
{
$before = time()
$r = my_func($v);
$after = time();
$timeDelta = $after - $before;
if($timeDelta < 10){
$r = true;
}
$new[$k] = $r;
}
請問'$後=時間()'得到執行,即使'my_func,並將()'尚未完成? BTW我在我的問題中添加了其他信息。 – IMB 2012-03-22 06:11:55
我不認爲它應該。測試一下,現在不能自己。爲了測試它,在函數的末尾放置一個time()函數(在它的內部)並比較$ after和那個時間,它們應該是相同的或者非常接近的。 – NoviceCoding 2012-03-22 06:15:39
如果my_func
讀取URL,你只是不希望它不是一個給定的超時時間需要更長的時間,如果你使用正確的URL的功能,您應該能夠指定超時並且如果通話時間超過該時間,則會導致通話失敗。
如果您使用的是cURL,則可以使用curl_multi_exec以某種方式手動獲取此行爲,或者僅指定超時值,然後該函數可以返回false。
實施例:
function my_func($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // timeout after 10 seconds
// .. set other options as needed
$result = curl_exec($ch);
if ($result === false) {
// timeout or other failure
return false;
}
}
現在功能不會因超時運行速度比約10秒鐘。您還可以使用curl_errno()檢查超時:
if (curl_errno($ch) == 28) {
// timeout was exceeded
}
啓動計時器,檢查計時器 – 2012-03-22 06:05:41
聽起來像是你應該編輯my_func,並將() – 2012-03-22 06:13:28