2011-08-17 63 views
1

致命錯誤:用盡33554432個字節允許存儲器大小(試圖分配4912個字節)在/var/www/development/example/system/libraries/Image.php上線。PHP重建圖像:存儲器使用

問題中的JPEG圖像沒有特別大的文件大小(741 KB)。我們使用相同的代碼來重建更大的圖像。但是,圖像的尺寸非常大(4912px x 3264px)。這會有效果嗎?

什麼決定了PHP重建映像時的內存使用情況?它只是文件大小?尺寸?顏色密度?文件類型?

上打破了這行是

$f1 = 'imagecreatefrom' . $tag; 
$src = $f1($file); 

我認爲這是足夠的上下文。它沒有達到試圖重建圖像的程度。將它加載到內存中足以打破它。

+0

你用什麼來建立圖像? gd,GraphicsMagick,ImageMagick還是別的? – Carpetsmoker 2011-08-17 11:58:56

+0

這取決於我想。我們可以看到錯誤正在討論的代碼嗎? – Bojangles 2011-08-17 11:59:12

回答

2

正如riky所說,如果可以的話,將內存限制設置得更高。也意識到尺寸比文件尺寸更重要(因爲文件尺寸是針對壓縮圖像的)。在GD中打開圖像時,每個像素都會分配3-4個字節,RGB和可能A.因此,您的4912px x 3264px圖像需要使用48,098,304到64,131,072字節的內存,再加上開銷和任何其他內存腳本正在使用。

0

這取決於你的執行力度增加內存緩衝區大小

php_value memory_limit 64M在.htacess

ini_set('memory_limit','64M');。上次當我用csv文件處理超過500000條記錄時,我收到了同樣的信息。稍後我會介紹一些類並嘗試關閉打開的對象。它減少了它的消耗量。如果你正在打開一張圖片並進行編輯。這意味着它正在加載到內存中。在這種情況下尺寸真的很重要。如果您正在操作多個圖像。我會記錄到每個圖像一個,然後關閉該圖像。根據我的經驗,當時我正在處理pdf圖稿文件以檢查裁剪標記。我有同樣的錯誤。

//you can set the memory limits values 
// in htaccess 
php_value memory_limit 64M 
//or in you using following in php 
ini_set('memory_limit', '128M'); 
//or update it in your php.ini file 

但是如果你優化你的代碼。並使用面向對象的方法,那麼你的內存消耗將會非常少。因爲每個對象都有自己的範圍,超出範圍就會被銷燬。

0

已用內存的大小取決於尺寸和顏色位深度。 幾年前,我也遇到過這個問題,同時爲攝影師建立了一個投資組合網站。正確解決這個問題的唯一方法就是將圖像庫從GD切換到想象。 Imagick消耗的內存少得多,並且不受PHP內存限制的限制。我不得不說,攝影師上傳的圖像高達30MP。將內存限制設置爲1024MB以上是沒有意義的。