PHP Simple HTML DOM Parser で Call to a member function find() on bool in のエラーが発生

管理しているWebサイトのWordPressで、ブログカードを出力する自作関数を使っているのですが、その関数で「Call to a member function find() on bool in ...」のエラーが発生したという通知が届きました。

原因は PHP Simple HTML DOM Parser

自作のブログカード出力関数は、外部サイトのURLを指定した場合でも機能するようにカスタマイズしており、外部サイトのHTMLを取得するために、PHPのライブラリである「PHP Simple HTML DOM Parser」を使用しています。

エラーが発生したのは、ブログカード出力用PHPの次の部分。

require_once('_vendor/simple_html_dom.php');
(略)

// 外部リンクの場合:リンク先をスクレイピングして情報を取得
$html = file_get_html($url);
$title = $html->find('title', 0)->plaintext;

find()する対象のDOMがbool (false) になっていると。
つまり、その上で実行しているfile_get_html()でDOMが取得できていない、ということになります。

取得するコンテンツのデータ量が多いと、DOMがクリアされる

simple_html_dom.phpfile_get_html()関数を確認すると、最後の方で次のような記述がありました。

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

取得したデータの文字列の長さが、$maxLenの値より大きい場合、DOMがクリアされます。

上限値を上げてエラーを解消

$maxLenをたどると、ファイルの冒頭で設定されている変数MAX_FILE_SIZEが該当したため、初期値の6000001000000まで上げることで、エラーが解消されました。

defined('MAX_FILE_SIZE') || define('MAX_FILE_SIZE', 1000000);

この記事を書いた人