我 现在 想 上传 一个 csv 文件,
在 php 里 怎么 判断 这个 文件 类型 是 csv 的呢?注:
除了 判断 扩展名 之外,还有 什么 判段 的 方法??

解决方案 »

  1.   

    这个 也和 扩展名 有关把,
    我的意思 是说 和扩展名 没有关系,即使是把 一个 图片 改成 .csv 的 也可以检查出来,上传的文件 格式 不正确
      

  2.   

    这个是MIME类型,和扩展名无关的。
      

  3.   

    学习了
    对 这个 不是 很熟 ,但是 我把 一个 png 的 图片 改成 csv 的 上传 时 $_FILES["file"]["type"] 是 csv
      

  4.   

    网上流传的一个不错的方法
    function ftype($filename){
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
    $fileType = '';
    switch($typeCode){
    case 7790:
    $fileType = 'exe';
    break;
    case 7784:
    $fileType = 'midi';
    break;
    case 8297:
    $fileType = 'rar';
    break;
    case 255216:
    $fileType = 'jpg';
    break;
    case 7173:
    $fileType = 'gif';
    break;
    case 6677:
    $fileType = 'bmp';
    break;
    case 13780:
    $fileType = 'png';
    break;
    default:
    $fileType = 'unknown';
    }
    return $fileType;
    }
      

  5.   

    这个 判断 csv 有点勉强。
      

  6.   

    我认为8楼得方法已经尽最大程度判定了,按照楼主的意思就是上传的文件如何判定其内容是不是csv格式的(不相信扩展名),那就只能获取文件里面内容,并根据里面内容的形式判定是不是csv文件,但是这种办法是要在后台实现的,也就是说此时文件已经上传了,上传了再判定就没有什么用了。所以,个人认为,不上传,还要判断内容形式,没什么好的解决办法。
      

  7.   

    我的 意思是 csv 不是 用 , 这个 隔开的 文件 吗 aa,bb,cc,dd
    ee,ff,gg,hh类似 这样的 文件 
    按 8楼 的 说法 这个 文件 的 typeCode=131112
    可是 aa,"b
    b",cc,dd
    ee,ff,gg,hh这个 样子 也 是正确 的 csv 格式 类型 但是 这个 文件 的 typeCode=105105
    可能 还有 其他的 属于 csv 格式 类型 的 文件 但是 不是 这两个 typeCode ,8楼的 就没有 办法 判断了
      

  8.   

    不太清楚,不过你也不必一定就两个字节的,你可以按其他方式试一试,至于其他的csv类型的不是那两个typeCode,那么你可以将他们记载下载放到程序中,毕竟一开始jpg也是这样记载下来的,呵呵