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', false);

另外一個解法則是去優化正規表示式,當然我採取直接關閉 JIT 的作法,當然這個作法並不好,但目前我應該不會去動表示式的部份,所以要立刻讓 Pointless 能在 PHP7 上正常運作就先這樣處裡。

詳細的建議可以去看看 Stackoverflow 上的解說連結在下面的 Reference 中。

Reference

PHP PREG_JIT_STACKLIMIT_ERROR - inefficient regex

About
ScarWu

刀疤

記錄學習過程、生活以及一些想說的話。