2016-10-22 2 views
1

Ich versuche, 6 Dateien zu importieren, die in ZIP-Dateien sind. Zuerst entpacke ich diese Dateien danach möchte ich alle Daten in diesen Dateien bekommen. Aber momentan bekomme ich nur die ersten Dateidaten. Das Skript hat die zweite Datei nicht gelesen. Ich verstehe nicht, wie ich mich von diesem Problem befreien kann.So lesen Sie mehrere CSV-Datei Daten in PHP

Hier ist mein Code.

<?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."; 
    } 
} 
?> 

Jede Hilfe wäre sehr geschätzt.

+0

Wenn meine Antwort geholfen, können Sie markieren Sie ihn als richtig? Oder kannst du mir sagen, wie es nicht funktioniert hat? – HoldOffHunger

Antwort

0

Blick auf diesen Teil des Codes ...

<?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() extrahiert die Dateien. Es gibt sechs Dateien, sagten Sie. Dann machst du fopen(), und du machst es einmal. Sie wollen das fopen() für jede Datei machen.

Was Sie wollen, ist ...

<?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... 
?>