2010-09-25 119 views
3

你好我所有在phpini文件中有以下ini變量設置。imagecreatefromjpeg +內存不足問題

的max_execution_time 50000

memory_limit的40M

的post_max_size 8M

當我試圖使圖像的縮略圖它給了我以下錯誤:

致命錯誤:內存(分配30670848) (試圖分配14976字節)

圖像大小爲700 kb。

任何人都可以幫助我嗎?

回答

2

你的問題不是對imagecreatefromjpeg()的單個調用,而是你先前分配的內存。畢竟,分配失敗,只有〜14kB的內存請求。

也許你以前在同一個腳本中創建了圖像,但沒有用imagedestroy()釋放它們的內存,或者你有另一個內存問題。在後一種情況下,您可以使用調試工具(例如webgrind)來查找內存。

+0

偉大的鏈接,謝謝! – 2010-09-25 15:00:40

+0

使用http://php.net/memory_get_usage調試你的應用程序... – 2010-09-25 15:04:32

+0

我曾嘗試調試memery使用,之前縮略圖功能memery使用= 4997244.我也在imagejpeg statment後使用縮略圖功能imagedestroy。但仍然會出現錯誤。 – 2010-09-28 11:28:39

2

700kb圖像的分辨率是多少?原來的.JPG有多大並不重要。如果這是一個非常「簡單」的圖像,它可以從字面上是10,000×10,000像素。當它被PHP加載/解壓縮時,這些像素將需要10k x 10k x 3 = 286兆字節(每個紅色/綠色/藍色分量值的10倍平方乘以3)。

當然,你說你已經把內存限制設置爲40M,但是你的內存只有29.25兆。可能是因爲在設置中某處存在重寫,可能是站點特定的Web服務器.conf文件或設置低於40M的.htaccess。

+0

圖像分辨率是:3700 x 5600 – 2010-09-28 11:31:40

+1

圖像分辨率是:3700 x 5600。沒有機會覆蓋值,因爲我的代碼如下所示:ini_set('memory_limit','200M'); ini_set('post_max_size','200M'); ini_set('max_execution_time','1000'); @move_uploaded_file(); _thumbnail($ PHOTO_NAME,125); _thumbnail($ PHOTO_NAME,175); _thumbnail($ PHOTO_NAME,360); – 2010-09-28 11:42:08

+0

'ini_set()'實際上工作嗎?如果你在共享主機上,ISP可以鎖定這些主機,並且你將無法覆蓋它們。在關鍵部分之前在腳本中執行'phpinfo()'來查看是否可以覆蓋。 '(已分配30670848)'是診斷 - 在出現錯誤時,內存限制爲30meg,並且在該點嘗試再獲得另一個14k時腳本死了。 – 2010-09-28 13:10:02