【问题标题】:how can I add imaging handling got this script effectively我怎样才能有效地添加成像处理得到这个脚本
【发布时间】:2012-04-27 20:21:00
【问题描述】:

希望有人可以在这里帮助我。整夜浏览,我尝试的任何东西似乎都不起作用,但我是 php 新手,所以我很慢。我需要上传 6 张图片,这很好用。但后来我意识到您不仅可以上传图像,还可以上传所有其他文件类型。我试图能够将其限制为每个 100kb 以下的图像。嘻嘻嘻嘻嘻嘻嘻!!!请!

function findexts ($filename) { $filename = strtolower('$filename') ; 
$exts = preg_split("[/\\.]", $filename) ;
 $n = count($exts)-1; 
 $exts = $exts[$n];
  return $exts;
   }

$ext = findexts ($_FILES['images']['name']) ; 
$ran = rand ();
$ran2 = $ran.".";

while(list($key,$value) = each($_FILES['images']['name']))
        {
            if(!empty($value))
            {
                $filename = $ran.$value;
                    $filename=str_replace(" "," _ ",$filename);// Add _ inplace of blank space in file name, you can remove this line

                    $add = "media/".$ran."$filename";
                $insert_query = "INSERT INTO ....VALUES ...";
                       //echo $_FILES['images']['type'][$key];
                 // echo "<br>";
                    copy($_FILES['images']['tmp_name'][$key], $add);
                    chmod("$add",0777);

        mysql_query($insert_query);

            }

        }

【问题讨论】:

    标签: php mysql forms upload


    【解决方案1】:

    你可以检查文件类型

    $_FILES['image']['type']
    

    或者如果你也想检查扩展名

    $extension = explode('.',(string)$_FILES['image']['name']);
    //then check if its "jpg", "gif" or "png"
    

    文件大小可以检查

    $_FILES['image']['size']
    

    因此,您的每个图像更新的脚本应该是这样的:

    $extension = explode('.',$_FILES['image']['name']);
    $imgextensions = array();
    $size      = $_FILES['image']['size'];
    if(($extension == 'jpg' || $extension == 'gif' || $extension == 'png') &&
        $size < 100000 ){
        // upload your file to your filesystem
    }else{
        //inform the user
    }
    

    【讨论】:

    • 这正是我所需要的,但问题是我不知道如何将这个想法融入我的脚本中
    • for:$_FILES['image']['size'],我将图像更改为图像,因为那是我表单中的 var。但我得到:警告:explode() 期望参数 2 是字符串,在 C:\xampp\htdoc 中给出的数组...
    • 您可以通过这种方式将其转换为字符串:(string)$_FILES['image']['size']
    【解决方案2】:

    在此处查看您的两个问题的答案:

    https://stackoverflow.com/a/9153419/723855

    将此函数添加到您的脚本(从链接修改):

    function acceptFileUpload($thefile){
        if(isset($_FILES[$thefile])) {
            $errors     = array();
            $maxsize    = 2097152;
            $acceptable = array(
                'application/pdf',
                'image/jpeg',
                'image/jpg',
                'image/gif',
                'image/png'
            );
    
            if(($_FILES[$thefile]['size'] >= $maxsize) || ($_FILES[$thefile]["size"] == 0)) {
                $errors[] = 'File too large. File must be less than 2 megabytes.';
            }
    
            if(!in_array($_FILES[$thefile]['type'], $acceptable)) && (!empty($_FILES[$thefile]["type"]))) {
                $errors[] = 'Invalid file type. Only PDF, JPG, GIF and PNG types are accepted.';
            }
    
            if(count($errors) !== 0) {
                return true;
            } else {
                foreach($errors as $error) {
                    echo '<script>alert("'.$error.'");</script>';
                    return false;
                }
    
                die(); //Ensure no more processing is done
            }
        }
    }
    

    然后在您的脚本中更改您的 while 循环以使用此函数检查有效文件:

    while(list($key,$value) = each($_FILES['images']['name']))
        {
            if(!empty($value))
            {
                if(acceptFileUpload('images'))
                {
                $filename = $ran.$value;
                    $filename=str_replace(" "," _ ",$filename);// Add _ inplace of blank space in file name, you can remove this line
    
                    $add = "media/".$ran."$filename";
                $insert_query = "INSERT INTO ....VALUES ...";
                       //echo $_FILES['images']['type'][$key];
                 // echo "<br>";
                    copy($_FILES['images']['tmp_name'][$key], $add);
                    chmod("$add",0777);
    
        mysql_query($insert_query);
                }
            }
    
        }
    

    我可能没有传递给 acceptFileUpload() 的参数权限。

    【讨论】:

    • 这正是我所需要的,但问题是我不知道如何将这个想法融入我的脚本中
    • 尝试类似的方法(更新代码)。您可能需要更改传递给 acceptFileUpload() 的 $_FILES[] 参数的名称
    【解决方案3】:

    在每个文件的处理脚本上运行四个函数,如果所有测试都通过则文件满足您的条件并且可以安全存储(png / jpg / gif + 非零 + 10Kb 限制 + 上传文件)

    //Example Call: checkFileExtension($_FILES['fieldname']['name']);
    function checkFileExtension($filename) {
        $filename = strtolower($filename) ;
        $filenamePartsArray = preg_split("[/\\.]", $filename) ;
        $extension = $filenamePartsArray[count($filenamePartsArray) - 1];
        if (($extension == 'gif') || ($extension == 'jpeg') || ($extension == 'jpg') || ($extension == 'png')) {
            return true;
        } else {
            return false;
        }
    }
    
    //Example Call: checkFileMIME($_FILES['fieldname']['type']);
    function checkFileMIME($filetype) {
        if (($filetype == 'image/png') || ($filetype == 'image/jpeg') || ($filetype == 'image/gif')) {
            return true;
        } else {
            return false;
        }
    }
    
    //Example Call: checkFileSize($_FILES['fieldname']['size'], 10);
    function checkFileSize($filesize, $limitKb = 0) {
        if ($filesize == 0) {
            return false;
        }
        if ($limitKb != 0) {
            if ($filesize > ($limitKb * 1024)) {
                return false;
            }
        }
        return true;
    }
    
    //Native Call: is_uploaded_file($_FILES['fieldname']['tmp_name']);
    

    编辑:伪示例使用

    foreach ($_FILES as $fieldname => $file) {
        if ((checkFileExtension($file['name'])) && (checkFileMIME($file['type'])) && (checkFileSize($file['size'], 10)) && (is_uploaded_file($file['tmp_name']))) {
            //Move the image with move_uploaded_file
            //Save the file location with DB insert
        }
    }
    

    【讨论】:

    • 我应该更具体地回答我的问题,但我的问题是如何在我的脚本中包含类似的内容?我不知道该放在哪里
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多