網頁

2015年5月22日 星期五

PHP Fatal error: Allowed memory size of 536870912 bytes exhausted @ PHP5.6

升級PHP5.6後,有一支程式在執行上會出現 PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to allocate 65488 bytes) in xxx.php 的訊息。原本以為是 php.ini 內的 memory_limit 的緣故,但不管再如何的調整都是會出現這樣的訊息。

只好重新檢視 PHP 程式的原始碼。檢查了好久,看來看去都覺得沒有問題。後來查了好久才發現與預設編碼有關係。在 php5.6 的 php.ini 預設編碼是指定為 UTF-8。而程式內所使用的Multibyte String Functions(例如: mb_strlen  、mb_strpos 等 function) 。若沒特別指定時,會以  php.ini 內預設值為準。所以也就造成程式在判斷上與邏輯錯誤造成無數迴圈,因而造成此現象。

解決方式其實只要加入一行,直接指定原來升級前所使用的編碼方式就可以了。

宣告如右:mb_internal_encoding("ISO-8859-1"); 

為了這一行花了 N 久的時間。天啊。

往後若不確定升級前所使用的編碼方式,也可以直接 echo mb_internal_encoding(),就可了解所使用的編碼。

相關資料:

沒有留言:

張貼留言