【发布时间】:2015-04-02 23:58:35
【问题描述】:
我有代码,由其他人编写,我必须修改。不会上传宽度大于 3002px 且高度大于 2893px 的文件。
我是如何测试它的:我有两张不同的图片,有两种不同的文件大小(宽度:3002 像素,高度:2009 像素)。当我将它们都设置为 3003px 宽度时,它们不会上传,但如果我将它们的宽度设置为 3002px,它们都会上传。
然后我旋转了他们没有上传的图像(宽度:2009 像素,高度:3002 像素)。然后我玩了他们的身高,发现如果我将高度设置为2893px(在这种情况下宽度将是1934px),它会上传,但如果我将高度设置为2894px,它不会。
这是我的代码:
error_reporting(0);
$change="";
define ("MAX_SIZE","9999999999");
function getExtension($str)
{
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
$errors=0;
if($_SERVER["REQUEST_METHOD"]=="POST")
{
$image=$_FILES["img_1"]["name"];
$uploadedfile = $_FILES["img_1"]['tmp_name'];
if ($image)
{
$filename = stripslashes($_FILES["img_1"]['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if ( ($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{
$change='<div class="msgdiv">Unknown Image extension </div> '; $errors=1;
}
else
{
if($extension=="jpg" || $extension=="jpeg" )
{
$uploadedfile = $_FILES["img_1"]['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png")
{
$uploadedfile = $_FILES["img_1"]['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
}
else
{
$src = imagecreatefromgif($uploadedfile);
}
echo $scr;
list($width,$height)=getimagesize($uploadedfile);
$newwidth=700;
$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);
$newwidth1=150;
$newheight1=($height/$width)*$newwidth1;
$tmp1=imagecreatetruecolor($newwidth1,$newheight1);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);
$stamp = imagecreatefrompng('img/stamp.png');
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
imagecopy($tmp, $stamp, $newwidth - $sx - $marge_right, $newheight - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
$filenameb = "img_big/big_".(rand(0, 99999999))."."."$extension"; $filename1 = "img_tmb/small_".(rand(0, 99999999))."."."$extension";
imagejpeg($tmp,$filenameb,100);
imagejpeg($tmp1,$filename1,100);
imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
imagedestroy($stamp);
}
}
}
if(isset($_POST['Submit']) && !$errors)
{
$change=' <div class="msgdiv">Image Uploaded Successfully!</div>';
}
$img_1b = $filenameb;
$smollimg_1 = $filename1;
unset($filename);
unset($filename1);
我不知道MAX_SIZE 指的是什么。可能是代码有缺陷,可能是服务器端的问题?
【问题讨论】:
-
您检查过
upload_max_filesize和post_max_size了吗?这些在你的php.ini。 -
我将它们设置为 128M 以测试这是否是问题。我无法上传宽度为 4000 像素、高度为 3000 像素的 110kb 文件,但我可以上传宽度为 3002 像素、高度为 2009 像素的 3.25mb 文件。
-
还可能值得看看你的内存限制。
-
@halfer 我该怎么做?
-
@halfer 非常感谢。我增加了
memory_limit,效果很好。