PHPでスクレイピングを簡単におこなうためのライブラリ「PHP Simple HTML DOM Parser」で、以下のコードを実行したところエラーが発生した。

Uncaught Error: Call to a member function find() on bool

<?php 
require_once './lib/simple_html_dom.php'; 
$url = 'https://example.com';

$html = @file_get_contents($url);
$html = str_get_html($html);

$title = $html->find('title', 0)->plaintext;

対象のURL自体は問題なく開くことができるのだが、str_get_html関数により取得できるはずのDOM情報がbool(false)になってしまうのだ。

エラーの原因と解消法

エラーの原因はライブラリファイル「simple_html_dom.php」にあった。

str_get_html()関数の下記の部分が該当の箇所。

function str_get_html(){
  // ... 略

  if (empty($str) || strlen($str) > MAX_FILE_SIZE) { 
    $dom->clear(); 
    return false; 
  }
}

取得したコンテンツがMAX_FILE_SIZEを超える場合、falseを返すようになっているのだ。

確かにエラーが起きたページのボリュームはテキスト量がかなり多かった。

このエラーを解消する場合、MAX_FILE_SIZEの上限値を上げてやれば良い。

デフォルトでは600000となっていたが、ページのサイズに合わせて今回は1000000とすることでエラーは解消された。