PHP指定DOMDocument的超时持续时间?

时间:2014-11-16 08:46:25

标签: php domdocument

我有一个代码,它会使用PHP DomDocument从网站中删除一些数据。但是,我想指定超时持续时间。有没有办法这样做?

我拥有的代码是这样的:

<?php 
$grep = new DoMDocument(); 
@$grep->loadHTMLFile("http://www.example.com"); 
$finder = new DomXPath($grep); 
$class = "Cat"; 
$nodes = $finder->query("//*[contains(@class, '$class')]"); 

foreach ($nodes as $node) 
{ 

//coding    
}   
?> 

谢谢!

2 个答案:

答案 0 :(得分:0)

或者,您可以使用fil_get_contents()并设置超时持续时间,然后将返回值提供给DOMDocument类:

$context = stream_context_create(array(
    'http' => array('timeout' => 60), // 60 seconds
));
$html_page = file_get_contents('http://www.example.com', false, $context);

$grep = new DoMDocument(); 
@$grep->loadHTML($html_page); 
$finder = new DomXPath($grep); 
$class = "Cat"; 
$nodes = $finder->query("//*[contains(@class, '$class')]"); 

答案 1 :(得分:0)

函数 libxml_set_streams_context() 可用于“为下一个 libxml 文档加载或写入设置流上下文”

$opts = [
    'http' => [
        'timeout' => 10, // 10 seconds
    ]
];

$context = stream_context_create($opts);
libxml_set_streams_context($context);

$grep = new DoMDocument(); 
$grep->loadHTMLFile("https://www.example.com"); 

另见其他available HTTP context options