我正在使用Magento并在管理员回滚数据库中遇到PHP Segmentation故障。我制作和调查,看到原因是这样的:
preg_replace("/'(\\'|\\\\{2}|[^'])*'/", '', $sql);
$ sql字符串足够大,我正在附加它。
https://drive.google.com/file/d/0B9UbKYbywcABOTRSVG5KRl9La0k/edit?usp=sharing
您可以使用此类脚本重现问题:
<?php
$test = file_get_contents('test.txt');
$sql = preg_replace("/'(\\'|\\\\{2}|[^'])*'/", '', $test);
可能有人知道这个问题,可以帮我解决吗?
P.S。直接导致问题的类是抽象类Zend_Db_Statement 204:208
答案 0 :(得分:4)
我一直在努力解决这个问题,偶然发现了这个建议更改php.ini值的线程:
[PCRE]
pcre.recursion_limit = 1000
对我来说就像一个魅力。希望这有帮助!
编辑:也可以方便的.htaccess格式提供:
php_value pcre.recursion_limit 1000
答案 1 :(得分:0)
基于这篇文章:http://man.he.net/man3/pcrestack
您可以尝试修改regexp以使用更少的堆栈。
我会尝试类似的例子:
preg_replace("/'([^']+|\\'|\\\\{2})*'/", '', $sql);
或者在这里:https://bugs.php.net/bug.php?id=61579
他们也提到了这两种选择:
"/'(\\\\'|\\\\{2}|[^']+)*'/"
"/'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'/"