Posted By

graceman9 on 05/28/13


Tagged

ZipArchive


Versions (?)

Upload archive, unzip, process and output multiple *.txt files


 / Published in: PHP
 

Upload special *.zip file with *.txt data. *.txt data format is between tags: From: +380990581747 Date: 21.02.2013 Time: 16:42 Content: 14

  1. <?php if (!empty($_FILES)): ?>
  2. <?php
  3.  
  4. $allowedExts = array("zip");
  5. $extension = end(explode(".", $_FILES["file"]["name"]));
  6. if ($_FILES["file"]["size"] < 5000000 && in_array($extension, $allowedExts)) {
  7. if ($_FILES["file"]["error"] > 0) {
  8. echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  9. }
  10. else {
  11. $date = date('Y-m-d_H-i-s');
  12.  
  13. // // upload info
  14. // echo "Upload: " . $_FILES["file"]["name"] . "<br>";
  15. // echo "Type: " . $_FILES["file"]["type"] . "<br>";
  16. // echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
  17. // echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
  18. // exit;
  19.  
  20. // unzip
  21. $zip = new ZipArchive;
  22. $res = $zip->open($_FILES["file"]["tmp_name"]);
  23. $zip_ok = FALSE;
  24. if ($res === TRUE) {
  25. $dir = 'files/'. $date;
  26. mkdir($dir);
  27. $zip->extractTo($dir);
  28. $zip->close();
  29. $zip_ok = TRUE;
  30. }
  31.  
  32. if (!empty($dir)) {
  33.  
  34. // process
  35. $result = glob('./'. $dir .'/*.txt');
  36. if (!empty($result)) {
  37. foreach($result as $fname) {
  38. preg_match('|^\.\/'. $dir .'/(.*)$|Uis', $fname, $mass);
  39. $uploadfile = $mass[1];
  40. // Загружаем файл в массив
  41. // $get_array = file($uploadfile);
  42. $get_array = file($dir .'/'. $uploadfile);
  43.  
  44. foreach($get_array as $line) {
  45. @$line = iconv("UCS-2", "UTF-8", $line);
  46. $pos = strpos($line, '+380');
  47. if ($pos !== FALSE) {
  48. $sub = substr($line, $pos);
  49. $ars[] = $sub;
  50. }
  51.  
  52. // preg_match('|^From\: \+380([0-9]+)$|Uis', $line, $massive);
  53. // if(@$massive[1] != '') {
  54. // $ars[] = '+380'.@$massive[1];
  55. // //$active_sheet->setCellValueByColumnAndRow(0, $key, '+380'.$massive[1]);
  56. // }
  57.  
  58. }
  59. }
  60. $uniq = array_unique($ars);
  61. $key = 1;
  62. $output_array = array();
  63. foreach($uniq as $value) {
  64. $output_array[] = $value;
  65. $key++;
  66. }
  67.  
  68. // Имя будущего файла
  69. $filename = $date;
  70.  
  71. header("Content-disposition: attachment; filename=". $filename .".csv");
  72. header("Content-Type: text/csv");
  73. $separator = empty($_POST['separator']) ? "\r\n" : $_POST['separator'];
  74. print implode($separator, $output_array);
  75. exit();
  76. }
  77. else {
  78. echo '<div class="error">Ошибка: архив не содержит текстовых файлов, или они несоответствуют требуемому формату.</div>';
  79. }
  80.  
  81. }
  82.  
  83. }
  84. }
  85. else {
  86. echo '<div class="error">Ошибка: недопустимый формат файла.</div>';
  87. }
  88. ?>
  89.  
  90. <div class="back"><a href="./" title="Вернуться к форме">Вернуться к форме</a></div>
  91. <?php else: ?>
  92. <html>
  93. <head>
  94. <meta charset="utf-8">
  95. <title>test</title>
  96. <style type="text/css">
  97. .main {
  98. margin: 100px;
  99. text-align: center;
  100. }
  101. .form-wrapper {
  102. }
  103. .form-wrapper input[type="submit"] {
  104. }
  105. .error {
  106. color:red;
  107. padding: 5px;
  108. border: 1px solid gray;
  109. }
  110. .back {
  111. }
  112. .back a {
  113. padding: 5px;
  114. font-size: 1.5em;
  115. }
  116. .main pre {
  117. text-align: left;
  118. }
  119. .tip {
  120. color: #999;
  121. font-size: 12px;
  122. }
  123. </style>
  124. </head>
  125. <body>
  126. <div class="main">
  127. <div class="form-wrapper">
  128. <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
  129. <label for="file" class="tip">Символ-разделитель:</label>
  130. <input type="text" name="separator" value="" placeholder="">
  131. <br><span class="tip">По-умолчанию (оставить пустым) значения разделены новой строкой (\r\n).</span>
  132. <br>
  133. <br>
  134. <br>
  135. <label for="file">Файл-архив:</label>
  136. <input type="file" name="file" id="file">
  137. <input type="submit" name="submit" value="Отправить">
  138. <br><span class="tip">Требуется архив формата *.zip, содержащий в корне все файлы. Для этого нужно выделить все файлы и добавить их в архив, а добавлять в архив папку с файлами.</span>
  139. </form>
  140. </div>
  141. </div>
  142. </body>
  143. </html>
  144. <?php endif; ?>

Report this snippet  

You need to login to post a comment.