2013-08-18 53 views
1

嗨,我從教程中選擇了這個。 Link here試試幫我理解這一點。上傳大圖片時的問題

  1. 我想知道編碼器是如何嘗試控制圖像上傳的大小的。 (我在代碼中看到其他地方明顯限制了尺寸,例如($_FILES["file"]["size"] < 20000)

  2. 爲什麼我問上述問題的原因是當我上傳一個較小的圖像,這工作正常,但更大的圖像給出了一系列的警告!

謝謝你的幫忙。

代碼

<?php 

function getExtension($str) 
{ 
$i = strrpos($str,"."); 
if (!$i) { return ""; } 

$l = strlen($str) - $i; 
$ext = substr($str,$i+1,$l); 
return $ext; 
} 

$image =$_FILES["imagefile"]["name"]; 
$tempext = getExtension($image); 
$extfile= mt_rand().".".$tempext; 
$uploadedfile = $_FILES['imagefile']['tmp_name']; 

if ($extfile) 
{ 
$filename = stripslashes($extfile); 
$extension = getExtension($filename); // return the type of image 
$extension = strtolower($extension); // convert result to lowercase 
if (($extension != "jpg") && ($extension != "jpeg") 
&& ($extension != "png") && ($extension != "gif")) 
{ 
$errors=1; 
} 
else 
{ 
$size=filesize($_FILES['imagefile']['tmp_name']); 

if($extension=="jpg" || $extension=="jpeg") 
{ 
$uploadedfile = $_FILES['imagefile']['tmp_name']; 
$src = imagecreatefromjpeg($uploadedfile); 
} 
else if($extension=="png") 
{ 
$uploadedfile = $_FILES['imagefile']['tmp_name']; 
$src = imagecreatefrompng($uploadedfile); 
} 
else 
{ 
$src = imagecreatefromgif($uploadedfile); 
} 

list($width,$height)=getimagesize($uploadedfile); 

$newwidth=600; 
$newheight=($height/$width)*$newwidth; 
$tmp=imagecreatetruecolor($newwidth,$newheight); 
imagecopyresampled($tmp,$src,0,0,0,0, $newwidth, $newheight, $width, $height); 

$newwidth1=185; 
$newheight1=($height/$width)*$newwidth1; 
$tmp1=imagecreatetruecolor($newwidth1,$newheight1); 
imagecopyresampled($tmp1,$src,0,0,0,0, $newwidth1, $newheight1, $width, $height); 

$filename = "upload/". $extfile; 
$filename1 = "upload/thumbs/". $extfile; 
$etest1=imagejpeg($tmp,$filename,100); 
$etest2=imagejpeg($tmp1,$filename1,100); 

imagedestroy($src); 
imagedestroy($tmp); 
imagedestroy($tmp1); 
} 
} 
?> 
+1

有一個文件上傳最大設置。檢查你的php.ini和谷歌。 – Jimbo

+0

@Jimbo我更新了一個鏈接。一個php.ini似乎並不存在。你能告訴我,我的方法應該是什麼?謝謝 –

+0

不要在這裏連接w3fools廢話。不要毀掉新手。 – Jimbo

回答

0

嘗試使用下面的例子是標準的,將讓你對你在你的問題中提到的文件大小控制(即$ _FILES [「文件」] [「大小」] < 20000) example here.

1

也許這是更好,更壓縮

if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/pjpeg") 
|| ($_FILES["file"]["type"] == "image/x-png") 
|| ($_FILES["file"]["type"] == "image/png")) 
&& ($_FILES["file"]["size"] < 2097152)) //2 MB 
+0

你應該使用嚴格的比較(===),這是switch語句的完美用例。 – Jimbo

0

如果不發佈警告,我們無法確定真正的問題。但是我懷疑這與你的php.ini文件有關(這是PHP保存配置的文件)。

您在鏈接中提到的編碼器並未試圖限制文件大小。雖然您的代碼中沒有明確的聲明,說明文件大小不應超過20MB,但這並不意味着您可以上傳任意大小的文件。

在你的情況下,php.ini中必須有一些指令阻止你上傳大於20M的文件。一旦你找到php.ini中(谷歌在哪裏可以找到它,根據您的操作系統),你可以改變php.ini文件的配置如下圖所示:

; Max size allowed for file upload 
upload_max_filesize = 20M 

; This must be greater than or equal to upload_max_filesize 
post_max_size = 21M