[英]Fatal error: Uncaught InvalidArgumentException when trying to upload file to AWS
[英]Trying to upload a 1M file locally and i get a Fatal Error
“致命錯誤:允許的內存大小為31457280字節耗盡(嘗試分配9828字節)”。
這是我得到的錯誤,但我只是嘗試上傳1mb圖像。 我增加了php.ini中的內存限制和執行時間。 我在使用firefox的Mac上的本地MAMP服務器上嘗試此操作。 這將是一個在線圖片庫。 有任何想法嗎? 以下是代碼:
ini_set("memory_limit","30M");
if(isset($_POST['submit'])){
if (isset ($_FILES['new_image'])){
$imagename = $_FILES['new_image']['name'];
$source = $_FILES['new_image']['tmp_name'];
$target = "images/".$imagename;
move_uploaded_file($source, $target);
$imagepath = $imagename;
//below here for the removed code
$save = "thumbs/uploads/" . $imagepath; //This is the new file you saving
$file = "images/" . $imagepath; //This is the original file
$imagesize = getimagesize($file);
list($width, $height) = $imagesize;
unset($imagesize);
if($width>$height)
{
$modwidth = 150;
$diff = $width / $modwidth;
$modheight = $height / $diff;
}else{
$modheight = 150;
$diff = $height / $modheight;
$modwidth = $width / $diff;
}
$tn = imagecreatetruecolor($modwidth, $modheight);
$image = imagecreatefromjpeg($file);
$imagecopy = imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height);
imagedestroy($image);
imagedestroy($im);
imagedestroy($imagecopy);
imagedestroy($source);
$imagejpg = imagejpeg($tn, $save, 100);
imagedestroy($tn);
imagedestroy($imagejpg);
編輯
現在已經有希望了解這一點。 我的一位同事一直都有解決方案,卻忽略了告訴我!
您可能正在加載圖像以對其進行一些操作。 這導致圖像數據被解壓縮,這需要大量的內存用於大圖像(我認為每個像素大約4個字節)。
您可以選擇不處理圖像,也不選擇在PHP之外進行處理 - 例如通過調用ImageMagick或其他程序。 這取決於你想要完成的事情。
它與您上傳的圖像的(文件)大小無關,打破內存限制的調用是imagecreatetruecolor()。
imagecreatetruecolor()將分配一個內存區域,以便在沒有壓縮的情況下存儲真彩色圖像,並且每個像素使用32位(4個字節)。
因此,對於1024x768像素的圖像,例如,imagecreatetruecolour()將耗盡1024 * 768 * 4 = 3145728字節,或大約3MB。
問題是,這種情況非常顯着。 一個3072x2034(600萬像素)的圖像,通過相同的計算,需要大約24MB才能加載到內存中 - 我猜這是你正在處理的那種大小。
解決方案是將處理交給像imagemagick或NetPBM這樣的其他東西,它將作為一個單獨的進程運行,而不是計入PHP內存限制。
NetPBM是我個人的最愛,看起來像是:
anytopnm <file> | pnmscale -xysize <dimensions> | pnmtojpg > <outfile>
如前所述這里 :
不要忘記imagedestroy ()函數,或緩存你的縮略圖 - 它們將為你節省大量的工作。
在增加內存限制后重啟apache了嗎? 如果是,那么再增加一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.