我需要使用php解析许多html文件。
foreach($url_array as $url){
$file = file_get_contents($url);
parse_html($file);
}
由于某些原因(文件太大),函数parse_html()需要很长时间才能运行或内存泄漏。
我想监视函数parse_html()。如果运行时间超过给定时间,则应继续解析下一个网址并忽略当前网址。
在大多数情况下,我的代码运行良好,但有些网址无法解析。没有错误输出,我想这是内存泄漏。
答案 0 :(得分:3)
这不可能像你想象的那样容易。由于您只在一个线程上运行,因此无法进行任何检查。如果此线程阻塞,则阻塞。
您需要创建某种多线程环境,在该环境中运行一个工作线程来执行parse_html()
(以提高速度并利用多核处理器甚至可以生成更多工作线程)和另一个线程,如果他们花了太多时间检查并杀死工人。
答案 1 :(得分:2)
考虑到@klaus said,如果您可以修改parse_html()
功能,将能够执行此检查。在函数内,可能会调用各种子函数或大量for
重复循环。您希望在函数中的某个位置或for
循环的开头添加一个检查,以查看该函数执行的时间是否太长。
简单的伪代码示例:
function parse_html()
start_time = 0;
read file
foreach element_to_be_parsed
runtime = current_time - start_time
if runtime > (whatever)
break
end
...do parsing stuff
end
end