我在使用preg_match_all的時候匹配一個比較長串的字串的時候,apache就會崩潰,最後顯示頁面載入失敗
後來上網查了一下說是要把
ini_set('pcre.backtrack_limit', 999999999);
ini_set('pcre.recursion_limit', 99999);
設成這樣的,但是發現並沒有什麼用,折騰了好長時間沒有辦法解決,懇請大神們指點
下面的連結是我參考原文,上面兩個解決思路也是從下面連結上複製而來的
http://www.php230.com/1410840481.html
回複討論(解決方案)
那麼你的 規則串 和 待匹配文本 都是什麼樣自的呢?
凡事都有個度,超過了自然就會出問題
比如 反向參考 不宜超過 9 個,超過了就會產生歧義
資料庫的 Text 類型 只能儲存 64k 內容,preg 函數在實現時也會考慮這個因素,預留巨大的狀態跳躍表空間也是一種浪費
那麼你的 規則串 和 待匹配文本 都是什麼樣自的呢?
凡事都有個度,超過了自然就會出問題
比如 反向參考 不宜超過 9 個,超過了就會產生歧義
資料庫的 Text 類型 只能儲存 64k 內容,preg 函數在實現時也會考慮這個因素,預留巨大的狀態跳躍表空間也是一種浪費
學習了·····PHP精度問題是個很大的問題
那麼你的 規則串 和 待匹配文本 都是什麼樣自的呢?
凡事都有個度,超過了自然就會出問題
比如 反向參考 不宜超過 9 個,超過了就會產生歧義
資料庫的 Text 類型 只能儲存 64k 內容,preg 函數在實現時也會考慮這個因素,預留巨大的狀態跳躍表空間也是一種浪費
Regex是這樣的
$pattern = '/\{(\{(\w+)(?:(?!\{\{).|\n)+\{\/\2\})\}/';
字串是:
TODO supply a title {{foreach ($message1 as $key1 => $value1)} {$key1} => {foreach ($value1 as $key2 => $value2)} {foreach ($value2 as $key3 => $value3)} {if($value3 == 0)} {$key3}=>female
{else if($value3 == 1)} {$key3}=>male
{else} {$key3}=>{$value3}
{/if} {/foreach} {/foreach} {/foreach}}
那麼你的 規則串 和 待匹配文本 都是什麼樣自的呢?
凡事都有個度,超過了自然就會出問題
比如 反向參考 不宜超過 9 個,超過了就會產生歧義
資料庫的 Text 類型 只能儲存 64k 內容,preg 函數在實現時也會考慮這個因素,預留巨大的狀態跳躍表空間也是一種浪費
Regex是這樣的
$pattern = '/\{(\{(\w+)(?:(?!\{\{).|\n)+\{\/\2\})\}/';
字串是:
TODO supply a title {{foreach ($message1 as $key1 => $value1)} {$key1} => {foreach ($value1 as $key2 => $value2)} {foreach ($value2 as $key3 => $value3)} {if($value3 == 0)} {$key3}=>female
{else if($value3 == 1)} {$key3}=>male
{else} {$key3}=>{$value3}
{/if} {/foreach} {/foreach} {/foreach}}
preg_match_all($pattern, $this->content, $matches);
$this->content就是上面的字串的內容,在運行preg_match_all的時候,程式就崩潰了
那麼你的 規則串 和 待匹配文本 都是什麼樣自的呢?
凡事都有個度,超過了自然就會出問題
比如 反向參考 不宜超過 9 個,超過了就會產生歧義
資料庫的 Text 類型 只能儲存 64k 內容,preg 函數在實現時也會考慮這個因素,預留巨大的狀態跳躍表空間也是一種浪費
Regex是這樣的
$pattern = '/\{(\{(\w+)(?:(?!\{\{).|\n)+\{\/\2\})\}/';
字串是:
TODO supply a title {{foreach ($message1 as $key1 => $value1)} {$key1} => {foreach ($value1 as $key2 => $value2)} {foreach ($value2 as $key3 => $value3)} {if($value3 == 0)} {$key3}=>female
{else if($value3 == 1)} {$key3}=>male
{else} {$key3}=>{$value3}
{/if} {/foreach} {/foreach} {/foreach}}
preg_match_all($pattern, $this->content, $matches);
$this->content就是上面的字串的內容,在運行preg_match_all的時候,程式就崩潰了
再補充一點,這個Regex是要匹配{{foreach ...}........{/foreach}}的內容
另外我測試過了,把上面的字串長度剪短,變成下面這樣的,preg_match_all就可以正常的運行,
TODO supply a title {{foreach ($message1 as $key1 => $value1)} {$key1} => {foreach ($value1 as $key2 => $value2)} {foreach ($value2 as $key3 => $value3)} {$key3}=>{$value3}
{/foreach} {/foreach} {/foreach}}
但是如果剪短的話,就不能完成我的需求,請大神指點