php正则表达式的长度限制

PHP技术
345
0
0
2023-06-18

今天遇到一个很奇怪的问题,在做对表单提交的数据进行正则匹配时,发现匹配的数据不完整,但是PHP也不报错,后来查了下,原来PHP对内容的长度是有限制的。比如:

preg_match(‘/<img.*src="(.+)".*>/Uis’, $str))

因为提交的数据包含base64的图片数据,所以很大,结果只匹配到一张图片,我提交了5张图片。

用phpinfo可以看到如下

pcre.backtrack_limit 100000  
pcre.recursion_limit 100000 

原来PHP正则的内容大小只有100K,如果是抓Web页面的话肯定不够的,所以只要在php.ini上做相应设置就行了(或者改变这两个值的大小)

pcre.backtrack_limit=-1   //PCRE的最大回溯(backtracking)步数。 
pcre.recursion_limit=-1  //PCRE的最大递归(recursion)深度

附说明:

如果你将该值设的非常高,将可能耗尽进程的栈空间,导致PHP崩溃。

改完,重启PHP-FPM,发现所有图片数据都能匹配出来了。