2013-07-25 43 views
3

問題很簡單,我想檢查一個數據庫爲網站訪問者提供定製內容,但是如果這個功能需要800ms以上的時間執行,那麼故障轉移並提供一個通用頁面。 (服務器響應的目標時間爲1000毫秒)。php set_time_limit小於一秒

我見過set_time_limit函數,但是這需要一個秒數的整數作爲參數。

我的問題:是否有類似的東西可以用於小於1秒的值?

我在尋找類似:

void set_time_limit_ms (int $milliseconds) 

set_time_limit_ms (800) 
+0

所以問題是一個長時間運行的數據庫查詢?請參閱http://stackoverflow.com/questions/4794747/mysql-can-i-limit-the-maximum-time-allowed-for-a-query-to-run – bitWorking

+0

可能是的,但我也會期待在PHP中進行一些數學比較,這也會佔用一些處理時間,或者可能用R等另一種語言調用腳本。基本上,我想在函數開始時啓動時鐘,並在800毫秒內殺死它,並且可以自由地將任何我想要的功能(我會做很多實驗來優化開始的速度),知道它會殺死查詢並以800毫秒提供一個通用頁面。感謝您的關注。 –

回答

3

不存在。你可以用滴答功能模擬它:

declare(ticks=1); // or more if 1 takes too much time 
$start = microtime(1); 
register_tick_function(function() use ($start) { 
    (microtime(1) - $start < 0.8) or die(); 
}); 
+0

但這不是一個長時間運行的查詢的解決方案!? – bitWorking

+0

也不能用set_time_limit()中斷長時間運行的查詢。如果在長時間運行的查詢期間超出了時間限制,程序將在執行查詢後中止。對於長時間運行的查詢,您無法從PHP端執行任何操作。 (如果我沒有錯,也從MySQL方面) – bwoebi

+0

嗨bwoebi,感謝您的意見。我會編碼並在週末進行測試。我會回來的結果。 –

0

是的,我經常使用microtime。看到

http://php.net/manual/en/function.microtime.php

<?php 
$time_start = microtime(true); 

// Sleep for a while 
usleep(100); 

$time_end = microtime(true); 
$time = $time_end - $time_start; 

echo "Did nothing in $time seconds\n"; 
?> 
+1

這並沒有真正回答這個問題:'我怎樣才能在幾毫秒後停止程序的執行?'而不是:'我的程序需要幾毫秒?' – bwoebi

1

您將無法使用該功能,以防止運行的時間比你預期的查詢。這僅測量實際的腳本執行時間。這裏有一點來自手冊。

的set_time_limit()函數的功能和配置指令 的max_execution_time隻影響腳本本身 的執行時間。在確定腳本運行的最長時間 時,不包括腳本執行 以外的任何活動時間,例如使用system()系統調用,流操作, 數據庫查詢等。在測量時間是真實的Windows 上,這不是真的。

+0

嗨DevZer0,雖然這沒有專門回答這個問題,它是一個我沒有想到並且需要考慮的真正受歡迎的指針。非常感謝!! –