我試圖使用PHP腳本上傳JPG圖像,但圖像是不斷引起我的腳本超時和死亡給這個錯誤:上傳圖片用PHP和擊球腳本內存限制
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate
2136 bytes) in image.php on line 38
如果圖像太大或者此錯誤正常失敗,如何防止上傳發生?
我試圖使用PHP腳本上傳JPG圖像,但圖像是不斷引起我的腳本超時和死亡給這個錯誤:上傳圖片用PHP和擊球腳本內存限制
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate
2136 bytes) in image.php on line 38
如果圖像太大或者此錯誤正常失敗,如何防止上傳發生?
實際的問題不是初始文件大小,而是圖像本身的尺寸(高度寬度 colorDepth),因爲在出於安全原因上載文件之前您無法訪問此信息,你應該使用一個用Flash,Java或Silverlight編寫的上傳器,因爲它們可以事先訪問這些信息。
上傳完成後,您可以通過使用getimagesize並使用返回的寬度,高度和位深度計算(未壓縮)圖像的尺寸來檢查圖像是否會超出內存限制。
祝你好運。
http://php.net/manual/en/features.file-upload.common-pitfalls.php說:
If a memory limit is enabled, a larger memory_limit may be needed. Make sure you set memory_limit large enough.
$size=filesize($_FILES['image']['tmp_name']);
會給你的全局變量$ _FILES數組中的文件的大小。在此之後,只需將$尺寸與您想要的最大尺寸進行比較即可。
退房thie文件大小()API:http://php.net/manual/en/function.filesize.php
可以限制圖像尺寸或幾種方式的任何其他文件上傳大小,
通過php.ini中,的upload_max_filesize = 10M
通過這樣的隱形標籤(10k): <input type="hidden" name="MAX_FILE_SIZE" value="10000" />
我不建議增加內存限制,如果你不知道它會對你的服務器產生什麼樣的影響c onfiguration。
只需使用ini_set
即可爲該特定腳本設置更高的內存限制。
在圖像處理腳本的開頭:
ini_set('memory_limit', '64M');
此錯誤通常是由圖像文件的大小,而圖像分辨率引起了不。所以你可以運行一些檢查圖像的大小。運行一些測試以查看當前內存限制下可接受的內容,如果分辨率更高,則終止進程並向用戶返回錯誤。
無論文件大小如何,所有上傳嘗試都會發生這種情況嗎?當出現腳本錯誤時,我只會遇到這種問題 - 通常是一個失控的循環。
+1正是我要寫的。另外,請查看[昨天的這個問題](http://stackoverflow.com/questions/3554397/estimate-required-memory-for-libgd-operation) – 2010-08-25 08:10:40