2016-10-22 2 views
1

Я пытаюсь импортировать 6 файлов, которые находятся в zip-файлах. Сначала я извлекаю эти файлы после этого, я хочу получить все данные в этих файлах. Но в настоящее время я получаю только первые данные файла. Сценарий не прочитал второй файл. Я не понимаю, как избавиться от этой проблемы.Как читать данные нескольких CSV-файлов в php

Вот мой код.

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

Любая помощь была бы высоко оценена.

+0

Если мой ответ помог, вы можете пометить его как правильно? Или вы можете сказать мне, как это не сработало? – HoldOffHunger

ответ

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... 
?> 
Смежные вопросы