我正在关注一本书中的一些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";
答案 0 :(得分:0)
您的代码示例不起作用,因为文件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)";