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


/ Published in: PHP
Save to your folder(s)

Upload special *.zip file with *.txt data.
*.txt data format is between tags:

From: +380990581747
Date: 21.02.2013
Time: 16:42
Content:
14


Copy this code and paste it in your HTML
  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']) ? "
  74. " : $_POST['separator'];
  75. print implode($separator, $output_array);
  76. exit();
  77. }
  78. else {
  79. echo '<div class="error">Ошибка: архив не содержит текстовых файлов, или они несоответствуют требуемому формату.</div>';
  80. }
  81.  
  82. }
  83.  
  84. }
  85. }
  86. else {
  87. echo '<div class="error">Ошибка: недопустимый формат файла.</div>';
  88. }
  89. ?>
  90.  
  91. <div class="back"><a href="./" title="Вернуться к форме">Вернуться к форме</a></div>
  92. <?php else: ?>
  93. <html>
  94. <head>
  95. <meta charset="utf-8">
  96. <title>test</title>
  97. <style type="text/css">
  98. .main {
  99. margin: 100px;
  100. text-align: center;
  101. }
  102. .form-wrapper {
  103. }
  104. .form-wrapper input[type="submit"] {
  105. }
  106. .error {
  107. color:red;
  108. padding: 5px;
  109. border: 1px solid gray;
  110. }
  111. .back {
  112. }
  113. .back a {
  114. padding: 5px;
  115. font-size: 1.5em;
  116. }
  117. .main pre {
  118. text-align: left;
  119. }
  120. .tip {
  121. color: #999;
  122. font-size: 12px;
  123. }
  124. </style>
  125. </head>
  126. <body>
  127. <div class="main">
  128. <div class="form-wrapper">
  129. <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
  130. <label for="file" class="tip">Символ-разделитель:</label>
  131. <input type="text" name="separator" value="" placeholder="">
  132. <br><span class="tip">По-умолчанию (оставить пустым) значения разделены новой строкой (
  133. ).</span>
  134. <br>
  135. <br>
  136. <br>
  137. <label for="file">Файл-архив:</label>
  138. <input type="file" name="file" id="file">
  139. <input type="submit" name="submit" value="Отправить">
  140. <br><span class="tip">Требуется архив формата *.zip, содержащий в корне все файлы. Для этого нужно выделить все файлы и добавить их в архив, а добавлять в архив папку с файлами.</span>
  141. </form>
  142. </div>
  143. </div>
  144. </body>
  145. </html>
  146. <?php endif; ?>

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.