PHP使用preg_match导致PHP.exe崩溃退出引发 500错误

在写一个涉及到远程HTTP抓取数据的PHP程序。测试什么的都挺好,放到服务器执行,执行到指定的内容就导致PHP.exe崩溃退出引发 500错误

调试了一早上,发现问题在preg_match正则匹配上,查阅了相关资料:

pcre.backtrack_limit: 默认100000, pcre回溯限制
pcre.recursion_limit: 默认100000, pcre的递归限制. 需要注意的是, 如果将这个值设置为一个很大的数字, 你可能会消耗掉所有的进程可用堆栈, 并且最终导致php崩溃(直到到达系统限制的堆栈大小)

按照以上的限制修改了,依旧错误。PHP版本也从 5.2 切换 5.4 5.5 5.6 均有问题。

最后想到了正则表达式。之前匹配多行文本使用的是 ([\s\S]*?) 可能会引起递归容易导致堆栈溢出的问题,多行匹配改为(.*?) 错误消失。​
 

发表评论

您的电子邮箱地址不会被公开。