管理している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.php
でfile_get_html()
関数を確認すると、最後の方で次のような記述がありました。
if (empty($contents) || strlen($contents) > $maxLen) {
$dom->clear();
return false;
}
取得したデータの文字列の長さが、$maxLen
の値より大きい場合、DOMがクリアされます。
上限値を上げてエラーを解消
$maxLen
をたどると、ファイルの冒頭で設定されている変数MAX_FILE_SIZE
が該当したため、初期値の600000
を1000000
まで上げることで、エラーが解消されました。
defined('MAX_FILE_SIZE') || define('MAX_FILE_SIZE', 1000000);