0

I want to upload three files on my server (.txt, .csv, and .xml). .txt and .xml work perfectly with below code. Only, I cannot get .csv files to upload (in no any browser!). The error I get is: Error! Unavailable file type: application/x-csv

Is it possible to fix this?

Code:

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 Answers2

0

There's an alternative and easy way to check file extension, like this:

// 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
}

Edited:

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;
        }
    }

}
Rajdeep Paul
  • 16,887
  • 3
  • 18
  • 37
0

the mime type of csv script should be text/csv according to RFC4180

Community
  • 1
  • 1