YANO's digital garage

Copyright ©YANO All rights reserved. https://www.bravotouring.com/~yano/

Last-modified: 2024-04-08 (月)


[一語一絵/IT系]

原因はPCREの設定 / 2010-06-22 (火)

[External]rNotePHP5対応。先日のトライでpreg_matchがカギを握っているところまで追い詰めたのだが、しつこくググったところ[External]preg系関数 100Kを越える大きさの文字列を処理できないという話に辿り着いた。

[External]PHP 5.2.0で追加された設定だそうだが、pregが[External]PCREに繋がるとは思わなかったなぁ。

早速/etc/php5/apache2/php.iniを修正してPCREの上限を256KBに拡張したところ、[External]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:]]の方が無駄にメモリを喰うという事のようだ。

あじさい(IMG_0107.JPG)
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/