rNoteのPHP5対応。先日のトライでpreg_matchがカギを握っているところまで追い詰めたのだが、しつこくググったところpreg系関数 100Kを越える大きさの文字列を処理できないという話に辿り着いた。
PHP 5.2.0で追加された設定だそうだが、pregがPCREに繋がるとは思わなかったなぁ。
早速/etc/php5/apache2/php.iniを修正してPCREの上限を256KBに拡張したところ、rNoteの再構築できるようになった。
でも、こないだ弄った[[:space:]]を元通りに戻して
function get_XMLTag($tag,&$str){試したみたところ194KBの記事だけNGだった。もしかして、と思って上限を512KBまで上げたら改善されたので、\sより[[:space:]]の方が無駄にメモリを喰うという事のようだ。
if(preg_match("/<$tag.*?>[[:space:]]*(.*)[[:space:]]*<\/$tag>/s",$str,$buf)) {
return $buf[1];
}
return '';
}
6/21 15:10 筥崎宮、あじさい苑にて |
というわけで、/etc/php5/apache2/php.iniは
[Pcre]と修正する事で、最終決着。
;PCRE library backtracking limit.
;pcre.backtrack_limit=100000
pcre.backtrack_limit=512000
;PCRE library recursion limit.
;Please note that if you set this value to a high number you may consume all
;the available process stack and eventually crash PHP (due to reaching the
;stack size limit imposed by the Operating System).
;pcre.recursion_limit=100000
pcre.recursion_limit=512000
/etc/php5/apache2/php.iniを修正した後は、
$ sudo /etc/init.d/apache2 restartするのも忘れずに。
【参照】
●rNote http://rinn.e-site.jp/rnote/
●__construct - Yahoo!ブログ http://blogs.yahoo.co.jp/wwzzwwzz1012
┗preg系関数 100Kを越える大きさの文字列を処理できない 2009年8月31日
●したうけプログラマのメモ http://www.dondari.com/
┗PHP5.2からのpcreオプション
●PHP: Hypertext Preprocessor http://www.php.net/
┗PCRE >> 実行時設定
●phpspot http://phpspot.net/
┗正規表現 (Perl 互換) >> 実行時設定
●Perl Compatible Regular Expressions http://www.pcre.org/