如何在php中读取多个CSV文件数据

时间:2016-10-22 11:56:13

标签: php

我正在尝试导入7个zip文件中的文件。首先,我提取这些文件后,我想获取这些文件中的所有数据。但目前我只获得第一个文件数据。该脚本没有读取第二个文件。我不明白如何摆脱这个问题。

这是我的代码。

<?php

if ($_FILES) {
    $filename       = $_FILES["zip_file"]["name"];
    $source         = $_FILES["zip_file"]["tmp_name"];
    $type           = $_FILES["zip_file"]["type"];
    $name           = explode(".", $filename);
    $accepted_types = array(
        'application/zip',
        'application/x-zip-compressed',
        'multipart/x-zip',
        'application/x-compressed'
    );
    foreach ($accepted_types as $mime_type) {
        if ($mime_type == $type) {
            $okay = true;
            break;
        }
    }

    $continue = strtolower($name[1]) == 'zip' ? true : false;
    if (!$continue) {
        $message = "The file you are trying to upload is not a .zip file. Please try again.";
    }
    $target_path = "zip/" . $filename;

    if (move_uploaded_file($source, $target_path)) {
        $zip = new ZipArchive();
        $x   = $zip->open($target_path);
        $col = array();
        if ($x === true) {
            for ($x = 0; $x < $zip->numFiles; $x++) {

                $csv = $zip->getNameIndex($x);

                $zip->extractTo("zip/");

                $csv_path = "zip/" . $csv;

                if (($handle = fopen($csv_path, "r")) !== FALSE) {
                    fgetcsv($handle);
                    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {

                        $num = count($data);

                        for ($c = 0; $c < $num; $c++) {
                            $col[$c] = $data[$c];

                        }
                        echo "<pre>";
                        print_r($col);
                    }

                    fclose($handle);

                }

            }


            $zip->close();
            unlink($target_path);
            exit;
        }
        $message = "Your .zip file was uploaded and unpacked.";
    } else {
        $message = "There was a problem with the upload. Please try again.";
    }
}
?>

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

看看你的代码的这一部分......

<?php
    // ...code...
    $zip->extractTo("zip/");

    $csv_path = "zip/" . $csv;

    if (($handle = fopen($csv_path, "r")) !== FALSE) {
        fgetcsv($handle);
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        // ...code...
?>

extractTo()提取文件。你说有六个文件。然后你做fopen(),你做了一次。你想对每个文件执行fopen()。

你想要的是......

<?php
    // ...code... (files are extracted at this point)
        $files = files('zip/');
        for($i = 0; i < count($files); $i++) {
            $file = $files[$i];
            // ...do csv stuff here for $file
        }
    // ...code...
?>