2

我有一个编辑页面,允许用户使用表单上传个人资料图像,但问题是即使图像类型是可接受的格式之一,我仍然无法接受该格式。

这是代码

if(isset($_POST['parse_var']) == "pic")
    {
        if(!$_FILES['fileField']['tmp_name'])
        {
            $errorMSG = '<font color= "#FF0000">Please browse for an Image  Before you press the button.</font>';
        }
        else
        {
            $maxfilesize = 51200;//in bytes =  50kb
            if($_FILES['fileField']['size']>$maxfilesize)
            {
                $errorMSG = '<font color="#FF0000">Your image was too large, please try again.</font>';
                unlink($_FILES['fileField']['tmp_name']);
            }
            elseif(!preg_match("^.(gif|jpg|png)$/i^",$_FILES['fileField']['name']))
            {
                $errorMSG = '<font color="#FF0000">Your Image was not one of the accepted format, please try again</font>';
                unlink($_FILES['fileField']['tmp_name']);
            }
            else
            {
                $newname = "image01.jpg";
                $place_file = move_uploaded_file($_FILES['fileField']['tmp_name'],"members/$id/".$newname);
                $message='<font color="#00FF00>Your Image has been upload successfully</font>';
            }
        }//end else

    }//end if
4

1 回答 1

4

主要问题:

一个)

        elseif(!preg_match("^.(gif|jpg|png)$/i^",$_FILES['fileField']['name']))
                            ^---

您不应该使用正则表达式 metachar 作为模式分隔符。尝试

preg_match('/\.(gif|jpg|png)$/i', ...) instead.

但在更大的图片视图中,您根本不应该匹配文件名。文件名可以伪造。您应该file_info()改为进行服务器端 MIME 类型确定(例如 via )。

b)

您没有正确检查上传成功。['tmp_name']$_FILES 数组中存在 a意味着什么都没有。失败的上传仍然会产生一个 tmp_name,但你最终会得到垃圾。总是使用这样的东西:

if ($_FILES['fileField']['error'] !== UPLOAD_ERR_OK) {
   die("Upload failed with error code " . $_FILES['fileField']['error']);
}

错误代码在这里定义:http: //php.net/manual/en/features.file-upload.errors.php

c) (次要)

您无需取消链接临时文件。PHP 会在脚本退出时自动执行此操作。

d)(风格上的巨大错误)

字体标签?2013 年?1990 年代呼吁并希望他们的 HTML 1.0 回归...

于 2013-05-08T19:24:56.570 回答