最近弄了一台机器,安装php7,性能很棒!
但是在运行中发现之前的程序运行有些异常,有些正则匹配不到了,开始怀疑是正则表达式的问题,一番查找发现php7并没有对正则进行改动。接下来就是一番痛苦的查找bug,我甚至写了一个非正则的函数来替换原来的正则匹配,不过太消耗cpu而放弃了。
还是继续找bug,打印出正则的错误信息
echo array_flip(get_defined_constants(true)['pcre'])[preg_last_error()];
出现了 PREG_JIT_STACKLIMIT_ERROR
官方给出的提示是:
PREG_JIT_STACKLIMIT_ERROR
(自 PHP 7.0.0 起)
PREG_JIT_STACKLIMIT_ERROR |
当 PCRE 函数因 JIT 栈空间限制而失败, preg_last_error() 就会返回此常量。 |
果然是php7中引入的特性引起的!
在php7.1中,我们没办法改变jit的栈空间,当字符串太大的时候,栈空间满了,直接就出错了。
解决方案
打开php.ini,找到pcre.jit=1这行,改成pcre.jit=0,不使用jit
赞赏
微信赞赏
支付宝赞赏