简单的PHP Web爬虫返回简单的HTML DOM错误

时间:2013-09-27 16:47:51

标签: php web-crawler

我有一个PHP脚本,可以返回网页上的链接。我收到500内部错误,这是我的服务器日志所说的。我让我的朋友在他的服务器上尝试相同的代码,它似乎运行正常。有人可以帮我调试我的问题吗?警告说有关包装器的信息已被禁用。我检查了第1081行,但我没有看到allow_url_fopen

  

PHP警告:file_get_contents():http://在服务器配置中禁用了包装器,在第1081行的/hermes/bosweb/web066/b669/ipg.streamversetv/simple_html_dom.php中由allow_url_fopen = 0禁用

     

PHP警告:file_get_contents(http://www.dota2lounge.com/):无法打开流:在第1081行的/hermes/bosweb/web066/b669/ipg.streamversetv/simple_html_dom.php中找不到合适的包装器

     

PHP致命错误:在/hermes/bosweb/web066/b669/ipg.streamversetv/sim

中调用非对象上的成员函数find()
<?php
 include_once('simple_html_dom.php');
 $target_url = 'http://www.dota2lounge.com/';
 $html = new simple_html_dom();
 $html->load_file($target_url);
  foreach($html->find(a) as $link){
    echo $link->href.'<br />';
  }
?>

2 个答案:

答案 0 :(得分:5)

  1. 下载最新的simple_html_dom.php:LINK TO DOWNLOAD

  2. 在您喜欢的编辑器中打开simple_html_dom.php并将此代码添加到前几行(可以在<?php之后添加):

    function file_get_contents_curl($url) {
    
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);     
    
        $data = curl_exec($ch);
        curl_close($ch);
    
        return $data; }
    
  3. 查找以function file_get_html($url.....开头的行,对我来说是第71行,但您也可以在编辑器中使用搜索。 (搜索file_get_html)

  4. 编辑此行(函数file_get_html之后的某些行):

    $contents = file_get_contents($url, $use_include_path, $context, $offset);

    到此:

    $contents = file_get_contents_curl($url);

  5. 使用file_get_html代替load_file,它可以为你工作,无需编辑php.ini

答案 1 :(得分:1)

您需要将allow_url_fopen php设置为1,以允许{ur}使用fopen()

参考:PHP: Runtime Configuration

修改
还跟踪了另一件事,你试过这种方式加载吗?

<?php
    include_once('simple_html_dom.php');

    $html = file_get_html('http://www.dota2lounge.com/');

    foreach($html->find('a') as $link)
    {
        echo $link->href.'<br />';
    }
?>