分析 PHP 脚本的最简单方法
分析 PHP 脚本的最简单方法是什么?
我很想添加一些东西,向我显示所有函数调用的转储以及它们花费的时间,但我也可以在特定函数周围放置一些东西。
我尝试了微时间函数:
$then = microtime();
myFunc();
$now = microtime();
echo sprintf("Elapsed: %f", $now-$then);
但这有时会给我带来负面的结果。另外,将它洒在我的代码中会很麻烦。
分析 PHP 脚本的最简单方法是什么?
我很想添加一些东西,向我显示所有函数调用的转储以及它们花费的时间,但我也可以在特定函数周围放置一些东西。
我尝试了微时间函数:
$then = microtime();
myFunc();
$now = microtime();
echo sprintf("Elapsed: %f", $now-$then);
但这有时会给我带来负面的结果。另外,将它洒在我的代码中会很麻烦。
我想你想要xdebug。将其安装在服务器上,将其打开,通过kcachegrind(适用于linux)或wincachegrind(用于Windows)泵送输出,它将向您显示一些漂亮的图表,这些图表详细说明了确切的时间,计数和内存使用情况(但是您需要另一个扩展)。
它摇滚,严重:D
不需要扩展,只需使用这两个函数进行简单的分析即可。
// Call this at each point of interest, passing a descriptive string
function prof_flag($str)
{
global $prof_timing, $prof_names;
$prof_timing[] = microtime(true);
$prof_names[] = $str;
}
// Call this when you're done and want to see the results
function prof_print()
{
global $prof_timing, $prof_names;
$size = count($prof_timing);
for($i=0;$i<$size - 1; $i++)
{
echo "<b>{$prof_names[$i]}</b><br>";
echo sprintf(" %f<br>", $prof_timing[$i+1]-$prof_timing[$i]);
}
echo "<b>{$prof_names[$size-1]}</b><br>";
}
下面是一个示例,在每个检查点调用带有描述的 prof_flag(),并在末尾调用 prof_print():
prof_flag("Start");
include '../lib/database.php';
include '../lib/helper_func.php';
prof_flag("Connect to DB");
connect_to_db();
prof_flag("Perform query");
// Get all the data
$select_query = "SELECT * FROM data_table";
$result = mysql_query($select_query);
prof_flag("Retrieve data");
$rows = array();
$found_data=false;
while($r = mysql_fetch_assoc($result))
{
$found_data=true;
$rows[] = $r;
}
prof_flag("Close DB");
mysql_close(); //close database connection
prof_flag("Done");
prof_print();
输出如下所示:
启动
0.004303
连接到 DB
0.003518
执行查询
0.000308
检索数据
0.000009
关闭 DB
0.000049
完成