如何计算执行时间(php指令'max_execution_time'?)

时间:2012-01-18 03:19:17

标签: php bash shell

几天前写了一个php脚本,它遍历我的所有音乐并为每首歌读取id3标签并将其插入到mysql数据库中。这是上下文的片段:

exec ( "find /songs -type f -iname '*mp3'", $song_path );
$number_of_songs = count($song_path);
for($i=0; $i<$number_of_songs; $i++){
    //read id3 tags
    //store id3 tags into database
}

我更改了apache2 / php.ini中的php指令max_execution_time,以便更好地理解该指令的作用。

当我设置max_execution_time = 10时,我的php脚本运行大约45秒并成功读取大约150首歌曲(成千上万首歌曲)的id3标签,并在终止脚本之前将这些标签插入到mysql数据库中将以下内容输出到屏幕:

致命错误:1894行/websites/.../public_html/GetID3()/getid3/module.audio.mp3.php超过了最长执行时间10秒

从文档中,'最大执行时间不受系统调用,流操作等的影响' http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time

  1. 我可以从中区分出什么 {10}设置为maximum_execution_time和脚本 在终止前总共运行45秒?做这个 意味着在45秒内,35人花在做非PHP相关的事情上 读取id3标签,将数据插入mysql等等活动,同时花费了10个 做php相关的活动,如迭代循环?

  2. 有没有办法可以计算执行时间并将其打印到     屏幕?

  3. 修改 使用Dagon建议的定时器,我在循环结束时调用了getTime()函数,大约有100多次循环迭代。这是我浏览器的输出:

    0.1163秒

    0.8142秒

    1.1379秒

    1.5555秒

    ...

    76.7847秒

    77.2008秒

    77.6071秒

    致命错误:第505行/websites/.../public_html/GetID3()/getid3/module.audio.mp3.php超过了最长执行时间10秒

4 个答案:

答案 0 :(得分:3)

<!-- Paste this at the top of the page -->
<?php
   $mic_time = microtime();
   $mic_time = explode(" ",$mic_time);
   $mic_time = $mic_time[1] + $mic_time[0];
   $start_time = $mic_time;
?>

<!-- Write Your script(executable code) here  -->

enter code here

<!-- Paste  this code at the bottom of the page -->
<?php
   $mic_time = microtime();
   $mic_time = explode(" ",$mic_time);
   $mic_time = $mic_time[1] + $mic_time[0];
   $endtime = $mic_time;
   $total_execution_time = ($endtime - $start_time);
   echo "Total Executaion Time ".$total_execution_time." seconds";
?>

答案 1 :(得分:1)

我不相信脚本实际运行超过10秒,你需要在其中放置一个合适的计时器

<!-- put this at the top of the page -->
<?php
function getTime() {
    $timer = explode( ' ', microtime() );
    $timer = $timer[1] + $timer[0];
    return $timer;
}

$start = getTime();
?> 

<!-- put other code and html in here --> 

<!-- put this code at the bottom of the page -->
<?php
$end = getTime();
$time_took=  round($end - $start,4).' seconds';
echo $time_took;
?>

答案 2 :(得分:1)

这种类型的脚本应该在CLI环境中执行,而不是在Web服务器执行的php进程中执行。根据{{​​3}}关于PHP命令行环境与其他PHP SAPI的不同之处:

  

shell环境中的PHP往往用于更多样化   目的范围比典型的基于Web的脚本,并且可以这样   非常长时间运行,最长执行时间设置为无限

虽然它没有回答你的问题,但确实解决了你的问题:)

答案 3 :(得分:1)

好像你不仅试图测量脚本持续时间,还试图限制它。在你的情况下max_execution_time不是你想要的。

基本上,“最大执行时间不受系统调用,流操作等”的影响是正确的。如果需要限制实时脚本长度,则需要实现自己的时间测量。人们通常会为它编写一些基准类,这毕竟有助于优化脚本,但很简单

$timer['start'] = time();
$timer['max_exec_time'] = 10; // seconds

开始时和

if (time() > $timer['start'] + $timer['max_exec_time'])
    break; // or exit; etc

在循环结束时或您想要的任何其他地方应该足够了。