PHP 7 PREG_JIT_STACKLIMIT_ERROR
最近在重構學生時代的作品 Pointless
讓它符合現代的技術,順便熟悉一下 PHP7
新的功能。
在 Pointless
中因為使用純文字的 markdown
格式來儲存文章所以有大量的機會會使用到 preg_*
相關的函式。
在 PHP7
其中的一個改變就是在 PCRE
中加入了 JIT
功能,可以用來優化正規表示式的效能,但是礙於 stack 的容量有限所以在處理長度較長的字串的時候,很容易就超過預設的 32K
的限制產生出 PREG_JIT_STACKLIMIT_ERROR
。
Solutions
當然解法可以直接將 JIT
關閉,當然這不建議。
在程式中
ini_set('pcre.jit', 0);
在 php-fpm 中
php_value[pcre.jit] = 0
另外一個解法則是去優化正規表示式,當然我採取直接關閉 JIT
的作法,當然這個作法並不好,但目前我應該不會去動表示式的部份,所以要立刻讓 Pointless
能在 PHP7
上正常運作就先這樣處裡。
詳細的建議可以去看看 Stackoverflow
上的解說連結在下面的 Reference
中。