几天前写了一个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
我可以从中区分出什么
{10}设置为maximum_execution_time
和脚本
在终止前总共运行45秒?做这个
意味着在45秒内,35人花在做非PHP相关的事情上
读取id3标签,将数据插入mysql等等活动,同时花费了10个
做php相关的活动,如迭代循环?
有没有办法可以计算执行时间并将其打印到 屏幕?
修改 使用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秒
答案 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
在循环结束时或您想要的任何其他地方应该足够了。