无法上传.csv文件(MIME类型问题?)

时间:2015-11-29 18:43:40

标签: php csv

我想在我的服务器上上传三个文件(.txt,.csv和.xml)。 .txt和.xml与下面的代码完美配合。只是,我无法上传.csv文件(没有任何浏览器!)。我得到的错误是:错误!不可用的文件类型:application / x-csv

有可能解决这个问题吗?

代码:

if (isset($_POST['Form']) && isset($_FILES['file'])) {
    $types = array('xml', 'csv', 'txt');
    $ftypes = array('text/xml', 'application/vnd.ms-excel', 'text/plain');
    if (!in_array($_POST['Form']['type'], $types)) {
    $errors[] = 'Undefined type';
    } elseif (intval($_FILES['file']['size']) == 0) {
    $errors[] = 'Zero file size';
    } elseif (!in_array($_FILES['file']['type'], $ftypes)) {
    $errors[] = 'Unavailable file type: ' . $_FILES['file']['type'];
    } else {
    $parent_id = intval($_POST['Form']['parent']);
    switch ($_POST['Form']['type']) {
        case 'xml':
        if ($_FILES['file']['type'] != 'text/xml')
            $errors[] = "Choosen type and file mime-type doesn't match";
        else {
            require_once(__DIR__ . '/parsers/xml.php');
        }
        break;
        case 'csv':
        if ($_FILES['file']['type'] != 'application/vnd.ms-excel')
            $errors[] = "Choosen type and file mime-type doesn't match";
        else {
            require_once(__DIR__ . '/parsers/csv.php');
        }
        break;
        case 'txt':
        if ($_FILES['file']['type'] != 'text/plain')
            $errors[] = "Choosen type and file mime-type doesn't match";
        else {
            require_once(__DIR__ . '/parsers/txt.php');
        }
        break;
    }
    }
}
?>

2 个答案:

答案 0 :(得分:0)

有一种检查文件扩展名的替代方法,如下所示:

// first get the file extension
$ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));  // csv

$types = array('xml', 'csv', 'txt');

// now check against permissible extensions
if(in_array($ext, $types)){
    // allowed
}else{
    // not allowed
}

<强>编辑:

if (isset($_POST['Form']) && isset($_FILES['file'])) {

    $ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));  // csv
    $types = array('xml', 'csv', 'txt');

    if (!in_array($ext, $types)) {
        $errors[] = 'Invalid file type';
    }elseif(intval($_FILES['file']['size']) == 0) {
        $errors[] = 'Zero file size';
    }else{
        // $parent_id = intval($_POST['Form']['parent']); you can uncomment it if necessary
        switch ($ext) {
            case 'xml':
                require_once(__DIR__ . '/parsers/xml.php');
                break;
            case 'csv':
                require_once(__DIR__ . '/parsers/csv.php');
            break;
            case 'txt':
                require_once(__DIR__ . '/parsers/txt.php');
            break;
        }
    }

}

答案 1 :(得分:0)

根据{{​​3}}

,ms类型的csv脚本应为text / csv