原因はPCREの設定
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){
if(preg_match("/<$tag.*?>**[[:space:]]***(.*)**[[:space:]]***<\/$tag>/s",$str,$buf)) {
return $buf[1];
}
return '';
}
試したみたところ194KBの記事だけNGだった。もしかして、と思って上限を512KBまで上げたら改善されたので、\sより**[[:space:]]の方が無駄にメモリを喰う**という事のようだ。

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/
PHP: Hypertext Preprocessor http://www.php.net/
phpspot http://phpspot.net/
Perl Compatible Regular Expressions http://www.pcre.org/