【发布时间】:2012-01-18 03:19:17
【问题描述】:
几天前写了一个 php 脚本,它遍历我所有的音乐并读取每首歌曲的 id3 标签并将其插入到 mysql 数据库中。这是上下文的 sn-p:
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 数据库中,然后终止脚本并输出跟随屏幕:
致命错误:/websites/.../public_html/GetID3()/getid3/module.audio.mp3.php 第 1894 行中超过 10 秒的最大执行时间
从文档来看,'最大执行时间不受系统调用、流操作等影响' http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time
我可以从两者的区别中推断出什么
maximum_execution_time设置为 10 秒和脚本 在终止前总共运行了 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 秒
致命错误:/websites/.../public_html/GetID3()/getid3/module.audio.mp3.php 第 505 行中超过 10 秒的最大执行时间
【问题讨论】:
-
你碰巧在使用 set_time_limit (php.net/set_time_limit) 吗? '调用时,set_time_limit() 从零重新启动超时计数器。换句话说,如果超时是默认的 30 秒,并且在脚本执行 25 秒后调用了诸如 set_time_limit(20) 之类的调用,则脚本将在超时之前总共运行 45 秒。'
-
不,我没有使用 set_time_limit