2010-08-25 68 views
3

我試圖使用PHP腳本上傳JPG圖像,但圖像是不斷引起我的腳本超時和死亡給這個錯誤:上傳圖片用PHP和擊球腳本內存限制

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 
2136 bytes) in image.php on line 38 

如果圖像太大或者此錯誤正常失敗,如何防止上傳發生?

回答

3

實際的問題不是初始文件大小,而是圖像本身的尺寸(高度寬度 colorDepth),因爲在出​​於安全原因上載文件之前您無法訪問此信息,你應該使用一個用Flash,Java或Silverlight編寫的上傳器,因爲它們可以事先訪問這些信息。

上傳完成後,您可以通過使用getimagesize並使用返回的寬度,高度和位深度計算(未壓縮)圖像的尺寸來檢查圖像是否會超出內存限制。

祝你好運。

+0

+1正是我要寫的。另外,請查看[昨天的這個問題](http://stackoverflow.com/questions/3554397/estimate-required-memory-for-libgd-operation) – 2010-08-25 08:10:40

1

可以限制圖像尺寸或幾種方式的任何其他文件上傳大小,

通過php.ini中

,的upload_max_filesize = 10M

通過

這樣的隱形標籤(10k): <input type="hidden" name="MAX_FILE_SIZE" value="10000" />

我不建議增加內存限制,如果你不知道它會對你的服務器產生什麼樣的影響c onfiguration。

1

只需使用ini_set即可爲該特定腳本設置更高的內存限制。

在圖像處理腳本的開頭:

ini_set('memory_limit', '64M'); 

此錯誤通常是由圖像文件的大小,而圖像分辨率引起了不。所以你可以運行一些檢查圖像的大小。運行一些測試以查看當前內存限制下可接受的內容,如果分辨率更高,則終止進程並向用戶返回錯誤。

0

無論文件大小如何,所有上傳嘗試都會發生這種情況嗎?當出現腳本錯誤時,我只會遇到這種問題 - 通常是一個失控的循環。