【问题标题】:Error with $_FILES["file"]["type"] for flv filesflv 文件的 $_FILES["file"]["type"] 出错
【发布时间】:2011-12-11 18:40:34
【问题描述】:

我无法使用 php 检查 flv 文件的文件类型。这是我的代码

if($_FILES["file"]["type"] == "video/x-flv")
{ echo "true"; }
 else{ echo "false"; }

但我的问题是,当我上传 flv 时它进入 else 语句...我无法找出问题所在..请帮助..

已编辑-> 遇到同样的问题

($_FILES["file"]["type"] == "application/x-shockwave-flash")

以及..虽然它适用于图像..

【问题讨论】:

  • 如果你这样做echo $_FILES['file']['type']会说明什么?
  • 如果你打印这个$_FILES["file"]["type"]输出什么?
  • 转储数组,看看设置的实际值是多少?基本调试。
  • 没有错误@griffin.. 它只是跳转到 else 语句。
  • 如果您不发布整个代码,我们将无法帮助您。无论如何,请注意 PHP 端不会检查这种 mime 类型 - 它是浏览器发送的值(并且可以更改!)

标签: php file-upload mime-types


【解决方案1】:

使用finfo_file();

试试

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
if (finfo_file($finfo, $filename) == "video/x-flv" ){}

文件本身可能不是有效的 FLV 文件。

已编辑。

【讨论】:

  • 此函数已弃用并使用magic.mime,因此输出可能因服务器而异。
  • 这样更好:) 但这取决于PECL/PHP>=5.3.0。但如果可能的话,这比检查文件扩展名更好..
  • @dresende 是的,但值得一试>:(.
  • 代码出错..老实说我不熟悉 finfo..我只是用这个替换了我的条件..调用未定义的函数 finfo_open()
  • Call to undefined function finfo_open 表示您没有安装 finfo(这意味着您的 PHP
【解决方案2】:

1st:你确定$_FILES["file"]["error"] 是零吗?如果没有,请检查Error Messages Explained。通常最常见的错误是您的上传页面的form 标记上没有enctype="multipart/form-data"

第二:永远不要相信$_FILES["file"]["type"]。这是由浏览器给出的。您可能需要检查文件扩展名。

if (strtoupper(substr($_FILES["file"]["name"], -4)) == ".FLV") {
    ...
}

【讨论】:

  • 测试文件扩展名是个坏主意。是什么阻止了用户在上传文件之前手动设置它?如果文件 有效但没有您期望的扩展名,该怎么办?
  • @daiscog:(没有被否决)我们谈论的是准确性。 mime 类型几乎都是标准的。至少扩展名是相同的(当然您可以在非 Windows 上删除它们并仍然正确打开它们)。 finfo() 并不总是可用,正如您在上面答案的 cmets 中看到的那样。
【解决方案3】:

测试文件扩展名与信任$_FILES["file"]["type"] 一样不安全——它们都是在客户端设置的。唯一可靠的解决方案是使用fileinfo

【讨论】:

    【解决方案4】:

    您可以使用gettype()finfo 函数来获取文件的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 2013-10-15
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 2021-09-28
      相关资源
      最近更新 更多