FC2ブログ

simple_html_dom.phpでPHP Fatal error

チャベリサーチさんから取得するようにしたのですが、
時々ブルーのトップページの取得でデータが取れていないことがありました。
ログを見ると

PHP Fatal error: Maximum function nesting level of '100' reached, aborting! in simple_html_dom.php on line 1643
PHP Stack trace:
PHP 1. {main}() parsetreely.php:0
PHP 2. file_get_html() parsetreely.php:6
PHP 3. simple_html_dom->load() simple_html_dom.php:83
PHP 4. simple_html_dom->parse_charset() simple_html_dom.php:1070
PHP 5. simple_html_dom_node->__get() simple_html_dom.php:1234
PHP 6. simple_html_dom_node->text() simple_html_dom.php:728
PHP 7. simple_html_dom_node->text() simple_html_dom.php:443
PHP 8. simple_html_dom_node->text() simple_html_dom.php:443
PHP 9. simple_html_dom_node->text() simple_html_dom.php:443
・・・

のようにtext取得で再帰が多くおこなわれています。
名前等のデータの中に再帰を起こしそうな文字があるのかと思って、探してみたのですがありません。
いろいろ探っていると、どうやら名前の数が一定以上になると、このエラーを起こします。
ということで、しまっていないタグがあるのではと思って調べてみました。

すると、<wbr>というタグが名前の間に挟まっています。
このタグは単独で使用するタグなので、しまっていないのも当然なのですが、
simple_html_dom.phpが対応してないと、しまっていないタグを延々と再帰で終わりをみつける
ということをやってしまいそうです。
そうおもって、simple_html_dom.phpのソースを見てみると


protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1);

という部分がありました。
たしかにwbrは入ってないですね。
そこで、

protected $self_closing_tags = array('img'=>1, 'br'=>1, 'wbr'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1);

のようにwbrを追加してみると、エラーがでなくなりました。
これが原因だったんですね。

http://chattera.net/
http://chattera.net/chaberilist.php

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR