上传大图像时出现问题

时间:2013-08-18 08:25:08

标签: php

您好我从教程中选择了这个。 Link here请尝试帮助我理解这一点。

  1. 我想知道编码器是如何尝试控制图像上传的大小的。 (我在代码的其他地方看到明显限制大小,即($_FILES["file"]["size"] < 20000)

  2. 我提出上述问题的原因是我上传较小的图片时效果不错,但较大的图片会出现一系列警告!

  3. 感谢您的帮助。

    代码

    <?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);
    }
    }
    ?>
    

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试使用下面的示例它是标准的,并且可以控制您在问题中提到的文件大小(即$ _FILES [“file”] [“size”]&lt; 20000) example here.

答案 2 :(得分: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