我正在学习一本书中的一些 php 示例,并研究它们。下面的代码假设使用 switch 语句验证上传的文件类型是否与设置的有效类型相匹配。有效类型为:jpeg、png、tiff 和 gif。但是,代码似乎总是采用默认语句并跳出循环。我什至从网站上下载了示例,也出现了同样的问题!
echo <<<_END
<html><head><tile>PHP Form Upload</title></head>
<body>
<form method='post' action='upload2.php' enctype='multipart/form-data'>
Select a JPG, GIF, PNG or TIF File:
<input type='file' name='filename' size='10' />
<input type='submit' value='Upload' /></form>
_END;
if ($_FILES)
{
$name = $_FILES['filename']['name'];
switch ($_FILES['filename']['type'])
{
case 'image/jpeg': $ext = 'jpg'; break;
case 'image/gif': $ext = 'gif'; break;
case 'image/png': $ext = 'png'; break;
case 'image/tiff': $ext = 'tiff'; break;
default: $ext = ''; break;
}
if ($ext){
$n = "image.$ext";
move_uploaded_file($_FILES ['filename']['tmp_name'],$n);
echo "Uploaded image '$name' as '$n':<br />";
echo "<img src='$n'";
}
else echo "'$name' is not a valid image file";
}
else echo "No image has been uploaded";
echo "</body></html>"
?>
如果我说上传图像'image.jpg',它应该将$ext 设置为.$jpg 然后执行上传,但我只得到else 语句:
else echo "'$name' is not a valid image file";
最佳答案
您的代码示例不起作用,因为文件 mime 类型不在您的 case 语句中。
修改代码,以便您可以检查文件的 mime 类型:
else echo "'$name' is not a valid image file (".$_FILES['filename']['type']." unallowed)";
然后,如果您想添加此 mime 类型,您可以使用此修改后显示的类型相应地修改您的 switch/case 语句。
编辑:
请注意,您还可以使用 var_dump()
php 函数来检查变量的内容。
else{
echo "'$name' is not a valid image file (".$_FILES['filename']['type']." unallowed)";
var_dump($_FILES['filename']);
}
编辑:
请记住在提供客户端数据之前始终对客户端数据进行清理(htmlentities() 可以解决问题),检查 http://fr.php.net/htmlentities :
echo "'$name' is not a valid image file (".htmlentities($_FILES['filename']['type'])." unallowed)";
关于PHP switch 语句始终采用默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083807/