我有一个编辑页面,允许用户使用表单上传个人资料图片 但问题是我不断接受格式是不可接受的,即使图像类型是可接受的格式之一。
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
答案 0 :(得分:4)
主要问题:
A)
elseif(!preg_match("^.(gif|jpg|png)$/i^",$_FILES['fileField']['name']))
^---
你不应该使用正则表达式metachar作为模式分隔符。尝试
preg_match('/\.(gif|jpg|png)$/i', ...) instead.
但是从更大的图片来看,你根本不应该匹配文件名。文件名可以伪造。您应该进行服务器端MIME类型确定(例如,通过file_info()
)。
b)中
您没有正确检查上传成功。 $ _FILES数组中存在['tmp_name']
表示没有。失败的上传可以STILL产生一个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年? 20世纪90年代呼吁并希望他们的HTML 1.0回归......