2017-04-26 55 views
3

背景轉換籤名到圖像PHP

我從5.3到7更新PHP應用目前我靶向5.6 開始。

有一部分應用程序將簽名轉換爲圖像。當該文件運行時,我得到這個錯誤。

錯誤

致命錯誤:用盡 33554432個字節允許存儲器大小(試圖分配20480個字節)簽名到image.php上 線

這是它在錯誤中引用的行。

代碼

$img = imagecreatetruecolor($options['imageSize'][0] * $options['drawMultiplier'], $options['imageSize'][1] * $options['drawMultiplier']); 

問題

任何人都可以在這裏澄清這個問題?

我在想這與服務器配置有關,而不是PHP版本的問題。任何幫助,將不勝感激。

array(5) { 
    ["imageSize"]=> 
    array(2) { 
    [0]=> 
    int(373) 
    [1]=> 
    int(95) 
    } 
    ["bgColour"]=> 
    array(3) { 
    [0]=> 
    int(255) 
    [1]=> 
    int(255) 
    [2]=> 
    int(255) 
    } 
    ["penWidth"]=> 
    int(2) 
    ["penColour"]=> 
    array(3) { 
    [0]=> 
    int(0) 
    [1]=> 
    int(0) 
    [2]=> 
    int(0) 
    } 
    ["drawMultiplier"]=> 
    int(12) 
} 
<br /> 
<b>Fatal error</b>: Allowed memory size of 33554432 bytes exhausted (tried to allocate 20480 bytes) 
+0

以我的經驗,新的PHP版本傾向於使用* *較少的內存,而不是更多。你是明確地設置'memory_limit'還是依靠系統默認設置? –

+1

32Mb限制非常小。你的5.3服務器很可能有更高的設置。 –

+0

通常情況下「允許的內存大小[BIG number] exhausted(試圖分配[SMALL number])」通常意味着您在某個地方有無限循環,或者在沒有釋放內存的情況下執行太多循環。你是否記得在完成圖像資源後調用'imagedestroy'來釋放內存? –

回答

2

看來你php腳本需要比在php.ini中memory_limit設置指定的更多的內存。

您已經2種選擇:

1 - 編輯的php.inimemory_limit設置一個較高的值,然後重新啓動apache

2 - 以下內容添加到您的腳本:

ini_set('memory_limit', '128M') # try several values until you find the appropriate one, no more no less. 
+0

是的,我很感激你。但要指出的是,如果尺寸有問題,我不會只是增加尺寸限制而忽略問題。我意識到我可以提高內存限制,但簽名的尺寸是否有異常?我擔心,因爲我正在遷移到新版本的PHP,我認爲它不應該這麼高。 – wuno

+0

當然,請注意@niet-the-dark-absol評論。 –

+0

@wuno你有沒有嘗試增加內存,可以說,64M?如果是這樣,它工作嗎? –