PHP switch 语句始终采用默认值

标签 php html forms switch-statement

我正在学习一本书中的一些 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/

相关文章:

javascript - 单击按钮时,Vue 通过键将值绑定(bind)到对象

javascript - HTML 5 拖放到 Firefox 中的所见即所得编辑器

html - 在范围 slider 上显示工具提示的 React 方式是什么?

javascript - 使用 Javascript 比较 html 文本输入并重定向到另一个页面

php - Laravel 事件、监听器、作业、队列之间的区别

php函数清除通过url传递的用户名和密码

php - lion 上的 imagick 安装问题

php - 当有内容配置时,如何提取邮件正文?

c# - Windows 窗体控件如何知道其窗体何时被(取消)激活?

javascript - 页面重新加载后重新填充 jQuery 文件上传文件列表