我正在制作图片上传器但由于某种原因我不允许以大写字母上传JPG图片。这怎么可能?
我还尝试将JPG添加到allowedExts数组中,但这也无效。
$filesize = '8500'; // PUT the filesize here in KB
if(isset($_FILES["file"])){
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
var_dump($_FILES['file']['type']);
var_dump($extension);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < $filesize)
&& in_array($extension, $allowedExts)){
if ($_FILES["file"]["error"] > 0){
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else{
if (file_exists("source/images/" . $_FILES["file"]["name"])){
echo 'image already exists';
}
else{
//Upload original file to folder
}
}
}
else{
echo 'Wrong fileformat';
}
作为输出,我得到了这个:
string''(length = 0) 字符串'JPG'(长度= 3)
文件格式错误
答案 0 :(得分:2)
PHP字符串比较区分大小写:
&& in_array($extension, $allowedExts)){
如果您上传kitten.JPG
,会爆炸,因为.JPG
在您允许的扩展阵列中不。 .jpg
是,但就PHP而言,这是一个完全不同的字符串。您应该使用strtolower规范化从上传文件名获得的扩展名,或至少使用大小写比较,例如strcasecmp
请注意,您的文件处理逻辑不正确。你显然已经抓住了一个分布广泛的BAD示例。 非常您需要在上传时检查的第一件事是['error']
参数。如果那不是零,那么你不能相信该特定文件的$ _FILES数组中的任何其他内容。不检查大小,不检查mime类型,不检查文件名。如果上传失败,那些可能都不存在/不正确/等等......
答案 1 :(得分:0)
$extension = end(explode(".", $_FILES["file"]["name"]));
我认为这会导致错误。将其更改为,$extension = strtolower(end(explode(".", $_FILES["file"]["name"])));
//将全部更改为小写,然后进行测试。
答案 2 :(得分:0)
$ filesize在哪里定义? 如果你在大写字母中添加了JPEG,那应该有效。
答案 3 :(得分:0)
对于最终到达此处的其他人:大写字母的图片可能来自不同来源(具有不同设置的相机),而不是大写字母的图片。
大写字母可能是文件太大,例如你没有正确检查$_FILES['file']['error']
属性。
检查$_FILES['file']['error']
是否有错误,并与错误列表进行比较:http://php.net/manual/en/features.file-upload.errors.php