【问题标题】:How to find out the time spent inside a PHP script?如何找出在 PHP 脚本中花费的时间?
【发布时间】:2011-09-03 23:35:54
【问题描述】:

我正在执行一个 PHP 脚本,该脚本需要大约一分钟才能完成,尽管默认时间限制设置为 30 秒,但该脚本在该限制之后继续执行。
我发现,这个限制只影响脚本本身所花费的时间,而不是数据库查询等库函数所花费的时间。

有没有办法找出实际在脚本中花费的时间?我尝试使用 getrusage,但它似乎没有针对这个问题返回适当的值。

例子:

<?php
$time = microtime(TRUE);
sleep(100);
echo 'Time: ', microtime(TRUE) - $time;
?>

脚本等待 100 秒,并且在 30 秒的时间限制后不会终止。 根据 set_time_limit 的文档,在 sleep 函数内花费的时间(100 秒)不参与计算执行时间,因为它是一个外部(库)函数。

【问题讨论】:

  • 您可以在该脚本中查看时间。您确定要以hard 方式终止执行,并出现致命错误吗?
  • 不,我不想终止执行。我只想知道在我的脚本中花费了多少执行时间以及在库函数中花费了多少。
  • 我的“内部”脚本和“lib 函数”是什么意思???这2次有什么不同?文档?

标签: php


【解决方案1】:

我猜你想要这样的东西:

<?php
// the whole operation
$time1 = time();

// perform some functions
$s = file_get_contents("somefilename");
$time2 = time();

// perform some library functions
$rs = some_third_party_library_function();
$time3 = time();

// Show results
echo "Overall Time spent: " . ($time3 - $time1) . "s <br>";
echo "Time spent reading file: ". ($time2 - $time1) . "s <br>";
echo "Time spent by Third Party Library: "  . ($time3 - $time2) . "s <br>";
?>

【讨论】:

  • 这是我在答案中提供的相同类型的选项,但我不明白@ChristianK 的实际要求是什么
  • 您显示的输出在 ms 中,但实际计算以秒为单位。不是吗?
【解决方案2】:

如果您需要测量单个函数与标准或内置 PHP 函数的执行时间,最好使用适当的调试器和代码分析器来完成。 Xdebug 正是这样做的。

【讨论】:

    【解决方案3】:

    不知道您的脚本有多复杂,但是您可以在所有库函数调用中添加注释。如果您的代码需要它们的返回值才能正确执行,请将它们替换为常量值(这些函数可能已返回)。例如:

    $result = mysql_query( ... )
    

    替换为:

    // $result = mysql_query( ... )
    $result = // resource, boolean or whatever you want   
    

    然后运行脚本并使用 Coding-Freak 的建议计算执行时间。

    如果您更喜欢 Rio Bautista 的方法,您可能会发现一些计算部分时间的函数。

    【讨论】:

      【解决方案4】:

      I just want to know how much of the execution time is spent inside my script and how much is spent in library functions.

      使用XDebug Profiler

      【讨论】:

      • 你在 Xdebug 上领先我几秒钟。
      【解决方案5】:

      您可以在进入脚本之前标记开始时间,然后在脚本结束后标记结束时间。然后回显差异。

      <?php
      $a=time();
      sleep(5);
      $b=time();
      echo $b-$a;
      ?>
      

      【讨论】:

      • 这样,总的执行时间被测量了,但是我想区分脚本和库函数。
      • 那你能不能展示一些脚本样本?这样我就可以说在哪里使用这种技术了。
      • 我在我的问题中添加了一个示例。 :)
      • @ChristianK - 您添加的示例与我的回答在语义上没有任何不同。您能否解释一下您的示例中有什么独特之处?
      • @ChristianK - 我提供了sleep() 函数,只是为了给程序增加一些延迟。但是其余的逻辑应该与计算您的 script execution time 相同。
      猜你喜欢
      • 2011-10-10
      • 1970-01-01
      • 2013-03-17
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      相关资源
      最近更新 更多