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とすることでエラーは解消された。