发布于 2016-01-17 09:28:48 | 217 次阅读 | 评论: 0 | 来源: PHPERZ

查找的问题

问: 下面的例子找不到元素
$html->find('div[style=padding: 0px 2px;] span[class=rf]');

答: 如果属性值有空格,请用引号引住属性值。 
$html->find('div[style="padding: 0px 2px;"] span[class=rf]');

URL的问题

问: 在我自己电脑上好好的,放到外部服务器上就不行了。 

答: "file_get_dom" 是"file_get_contents" 函数的一个封装, 你必须在 "php.ini" 文件里面设置 "allow_url_fopen" 为 TRUE ,允许访问远程 http 或 ftp文件. 但是很多空间提供商由于安全原因都禁用了这个allow_url_fopen。 PHP提供了更好的 "curl" 库获取http或ftp内容, 获取内容之后然后使用l "str_get_dom" 创建DOM对象即可. 

CURL获取http页面内容的例子: 
 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com/');  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);  
$str = curl_exec($curl);  
curl_close($curl);  
 
$html= str_get_html($str); 
... 

URL代理问题

问: 我的服务器在一个代理服务器的后端,我不能使用 file_get_contents ,会返回一个 unauthorized 未认证错误.

答: 感谢 Shaggy 提供下面的解决方法:
// 定义 HTTP 头信息. 
$context = array
( 
       'http' => array
       ( 
              'proxy' => 'addresseproxy:portproxy', // 这里设置具体的代理服务器的ip和端口
              'request_fulluri' => true, 
       ), 
); 

$context = stream_context_create($context); 
 
$html= file_get_html('http://www.php.net', false, $context); 
...

内存泄漏

Q: 这个类库内存溢出问题严重...我的脚本执行完毕后,它并不会释放DOM对象占用的内存... 

A: 由于PHP5循环引用的内存泄漏。如果多次使用 file_get_html() ,在创建了DOM对象之后,你必须使用 $dom->clear() 释放内存。

下面是个释放内存的例子: 
 
$html = file_get_html(...); 
// do something... 
$html->clear(); 
unset($html);
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务