【问题标题】:$_FILES['']['type'] is giving application/octet-stream as output$_FILES['']['type'] 将 application/octet-stream 作为输出
【发布时间】:2014-11-25 23:08:21
【问题描述】:

说明:

我正在上传一个视频,并且像往常一样在上传之前检查文件的类型....文件没有被上传,所以我想输出 $_FILES['upload']['type'] 的值它给了我以下

echo $_FILES['upload']['type'];

输出

应用程序/八位字节流

因此它未能通过代码中的所有检查,如下所示

if(($_FILES['group_video']["type"] == "video/FLV") 
|| ($_FILES['group_video']["type"] == "video/MP4")

in_array($extension, $allowedExts)

我应该如何解决这个问题? 为什么不显示视频的类型?? 我错过了什么吗??

【问题讨论】:

  • $_FILES 数组的其余部分是什么样的?
  • @SimonBrahan 这里是 var_dump($_FILES) 数组 (size=1) 'group_video' => array (size=5) 'name' => string '这都是关于游戏的输出 - YouTube .FLV' (length=51) 'type' => string 'application/octet-stream' (length=24) 'tmp_name' => string 'C:\wamp\tmp\phpCA89.tmp' (length=23) '错误' => int 0 '大小' => int 19276444
  • 浏览器决定发送什么 MIME 类型;他们通常不擅长交往。 (无论如何,您的代码都不会可靠地工作,因为 MIME 标识符不区分大小写并且可以携带属性。)

标签: php


【解决方案1】:

马里奥在上面的评论是正确的;您的客户已确定 FLV 的类型为 application/octet-stream。对于 FLV 文件,这是一种有效的 mime 类型,因此您需要在代码中考虑到它。我建议您列出您接受的文件扩展名,并为每个文件附加一个允许的 mime 类型列表。例如:

array (
    'mp4' => array ('audio/mp4', 'video/mp4'),
    'flv' => array ('video/flv', 'video/x-flv', 'application/octet-stream')
);

现在,当您获得上传时,您首先获得扩展名并检查 mime 类型是否与您接受的扩展名类型之一匹配。

这将使您对人们错误地上传错误名称或格式的媒体有所保证,但不会阻止用户故意上传带有恶意内容的文件;您的用户上传的所有内容在被信任之前都应该经过病毒检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 2012-09-11
    • 2014-06-08
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多