【问题标题】:Error on file type文件类型错误
【发布时间】:2011-10-26 15:39:16
【问题描述】:

这是我的代码

if ($_FILES['foto']['size'] > 200000) die ('file too big');
if($_FILES['foto']['type'] !== "image/pjpeg" ||
$_FILES['foto']['type'] !=="image/jpeg" || $_FILES['foto']['type']
!=="image/gif")  die ('file not allowed!');

无论我上传什么,它总是显示“文件不允许”。如果我删除文件检查部分,它工作正常。

我想知道错误在哪里。

谢谢

== 更新=== 变量转储 字符串(10)“图像/JPEG”

【问题讨论】:

  • var 转储 --> string(10) "image/jpeg"

标签: php file types


【解决方案1】:

这是一个矛盾(总是错误的):

$_FILES['foto']['type'] !== "image/pjpeg" ||
$_FILES['foto']['type'] !== "image/jpeg" || 
$_FILES['foto']['type'] !== "image/gif"

由于整个语句为真$_FILES['foto']['type']必须同时等于“image/pjpeg”、“image/jpeg”、“image/gif”。

你的意思是使用&&而不是||,所以你得到:

$_FILES['foto']['type'] !== "image/pjpeg" &&
$_FILES['foto']['type'] !== "image/jpeg" &&
$_FILES['foto']['type'] !== "image/gif"

【讨论】:

  • 我更喜欢我的 in_array :) 因为它没有重复项,并且通过向列表中添加更多 mimetype 更容易扩展。
【解决方案2】:

您应该记录 $_FILES['foto']['size'] 和 $_FILES['foto']['type']。这至少会让你知道在比较过程中使用了什么。

【讨论】:

  • 我回显文件类型并得到图像/jpeg
  • 大小只有 10KB。大小检查工作正常,问题仅在于文件类型检查。
  • 你的逻辑说..如果不是A ||乙 || C.. 你需要使用包含来修改它。
【解决方案3】:

不知道如何对我的评论进行多行编辑:

if ($_FILES['foto']['size'] > 200000) die ('file too big');
if($_FILES['foto']['type'] !== "image/pjpeg" ||
$_FILES['foto']['type'] !=="image/jpeg" || $_FILES['foto']['type']
!=="image/gif")  die ('file not allowed!');

不妨试试这个:

if ($_FILES['foto']['size'] > 200000) die ('file too big');
$file_types = array("image/pjpeg", "image/jpeg", "image/"gif");
if(!in_array($_FILES['foto']['type'],$file_types)) die ('not allowed');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 2012-01-15
    • 2012-06-01
    • 2015-10-30
    • 2022-11-03
    • 1970-01-01
    • 2013-04-02
    • 2016-10-09
    相关资源
    最近更新 更多