今天遇到一个很奇怪的问题,在做对表单提交的数据进行正则匹配时,发现匹配的数据不完整,但是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,发现所有图片数据都能匹配出来了。