我有一个segfaulting的脚本。我将案件简化为以下内容:
// a very loooong string ---->
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent mauris nibh, fringilla dapibus pharetra sit amet, cursus ut elit. Proin nulla nisl, accumsan at vulputate eu, elementum ac enim. Aliquam tortor lacus, ullamcorper sed purus ac, pulvinar euismod sem. Praesent euismod lacus et . Proin nulla nisl, accumsan at vulputate eu, elementum ac enim. Aliquam tortor lacus, ullamcorper sed purus ac, pulvinar euismod sem. Praesent euismod lacus et . Proin nulla nisl, accumsan at vulputate eu, elementum ac enim. Aliquam tortor lacus, ullamcorper sed purus ac, pulvinar euismod sem. Praesent euismod lacus et . Proin nulla nisl, accumsan at vulputate eu, elementum ac enim. Aliquam tortor lacus, ullamcorper sed purus ac, pulvinar euismod sem. Praesent euismod lacus et";
preg_match_all('/^(.)*$/', $string, $matches);
在这些条件下这段错误:
它在Windows上和使用Apache时在PHP5.3.x和PHP5.4.x上崩溃。
它在Linux上运行良好。它通过命令行(在Windows上)和PHPUnit运行良好。
如果缩短$string
的长度,它就可以正常运行。如果将正则表达式更改为/^(?:.)*$/
(非捕获),则运行正常。
所以我的猜测是我正在达到某种限制。
pcre.backtrack_limit 1000000
pcre.recursion_limit 100000
我应该报告这个,如果是这样,怎么/在哪里?
我可以通过更改正则表达式来轻松地解决这个问题,因此对我来说这不是一个问题。 segfaulting真的很烦人(难以调试,难以检测)