ホームページ >バックエンド開発 >PHPチュートリアル >preg_replace_callback でメモリ リークが発生しています。誰かがそれを解決しましたか?何をするか

preg_replace_callback でメモリ リークが発生しています。誰かがそれを解決しましたか?何をするか

WBOY
WBOYオリジナル
2016-06-13 12:07:381043ブラウズ

preg_replace_callback でメモリ リークが発生しています。誰かがそれを解決しましたか?
環境: php5.4.22 centos 5.4 nginx
-------------------------------------- ------------ -------------------------------------- ------------ ------------------------
次の問題が発見されました: http:/ /bbs.csdn.net/topics/390784375
- ----------------------------------
同じ質問:
http://bbs.csdn.net/topics/390693060
---------------------- ------------------------------------
テストコード:

<br /><?php<br />$content='<php>asdfsadf</php><php>asdfsadf</php><php>asdfsadf</php><php>asdfsadf</php><php>asdfsadf</php><php>asdfsadf</php> testtest';<br />$a=123;<br />$content= preg_replace_callback('/<php(\s*?)>(.*?)<\/php(\s*?)>/is', function($match) use($a){return 123;}, $content);<br />echo $content;<br />

------ ---------------------------- -------------------実行結果--- --------------------
致命的なエラー: 許可されています/data/web/partTime/test2 の 134217728 バイトのメモリ サイズが使い果たされました (3086503041 バイトを割り当てようとしました)。php の 4 行目

----------------- ----------------------- -----
------ソリューションのアイデア-------- --------------
次の場合:
最初に preg_match_all
を実行し、次に preg_replace
を実行しても問題はありますか?
------解決策----------------------
preg_replace_callback ではメモリリークが発生するため
その後、どのファイルでもこの​​ようになります

別のファイルでテストできます
$content = preg_replace_callback('/[a-z]/', function  ( $matches )  {<br />                        return strtoupper($matches[0]);<br />                    }, 'abdfrew');<br />echo $content;<br />

同等の離散コードは次のとおりです
$content = 'abdfrew';<br />preg_match_all('/[a-z]/', $content, $matches );<br />foreach($matches[0] as $v) $r[$v] = strtoupper($v);<br />$content = strtr($content, $r);<br />echo $content;

別々に実行してくださいまず問題がないか確認します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。