2013-08-08 3 views
0
<?php 
set_time_limit(4); 
echo ini_get('max_execution_time'); // give value as 4 
while ($i<=10) 
{ 
    echo "i=$i "; 
    sleep(1); 
    $i++; 
} 

выход: 4i = = 1 = 2 я = 3 я = 4 я = 5 я = 6 я = 7 я = 8 я = 9 г = 10set_time_limit работает не так, как ожидалось?

Ожидаемое поведение: Оно должно закончить его исполнение через 4 секунды.

Просьба пояснить?

ответ

1

Какую версию вы используете?

Я использовал версию PHP Version 5.4.7 и я получил результат

4i=0 i=1 i=2 i=3 i=4 
Fatal error: Maximum execution time of 4 seconds exceeded in ....... 

Кроме того, при установке set_time_limit(), продолжительность сна() будет игнорировали в время выполнения. Ниже показано:

<?php 
    set_time_limit(20); 
    while ($i<=10) 
    { 
     echo "i=$i "; 
     sleep(100); 
     $i++; 
    }  
?> 

Output: 
i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 

Источник От set_time_limit()

+0

На самом деле, более вероятно, что вы используете Windows и тему стартера Unix. Дело в том, что 'set_time_limit' должен влиять только на время выполнения скрипта и NOT системные вызовы, что и делает' sleep() ', но он не работает под Windows и также учитывает системные вызовы. – Cthulhu

1

Вы должны попробовать это, просто скрипт, который спит больше, чем ваше максимальное время выполнения.

sleep(ini_get('max_execution_time') + 10); 

Прочитайте это: Under Linux, sleeping time is ignored, but under Windows, it counts as execution time.

Это, как вы можете получить время вычисления и системные вызовы времени.

// Script start 
$rustart = getrusage(); 

// Code ... 

// Script end 
function rutime($ru, $rus, $index) { 
    return ($ru["ru_$index.tv_sec"]*1000 + intval($ru["ru_$index.tv_usec"]/1000)) 
    - ($rus["ru_$index.tv_sec"]*1000 + intval($rus["ru_$index.tv_usec"]/1000)); 
} 

$ru = getrusage(); 
echo "This process used " . rutime($ru, $rustart, "utime") . 
    " ms for its computations\n"; 
echo "It spent " . rutime($ru, $rustart, "stime") . 
    " ms in system calls\n"; 
+0

Могу ли я сделать то, что я могу использовать в целом, а не время выполнения? – chicharito

+0

Пожалуйста, объясните подробно о том, что вы хотите сделать. –

+0

Я хочу, чтобы скрипт завершил выполнение, как только достигнут порог – chicharito