Loading:

PHP 7 News & Updates v7.0 - 7.4 - book

Paker ZIP On-Line

Często zdarza się, że potrzebujemy spakować coś na szybko, a nie posiadamy programu do tego stworzonego, nie mamy czasu na szukanie i instalowanie albo po prostu musimy spakować pliki wybrane do downloadu w jedną paczkę. Zastosowań jest naprawdę wiele.

Co będzie nam potrzebne:
- serwer z PHP
- PHP ze skompilowaną biblioteką ZZIPlib dla PHP4 lub zlib dla PHP5 (można sprawdzić dostępność funkcją phpinfo() - w sekcji Configure Command szukamy parametru '--with-zip' dla PHP4 lub '--enable-zip' dla PHP5)

 

Tworzymy poszczególnie pliki oraz katalog "tmp"



Napisz Artykuł

Listing

index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="pl">

<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
  <link rel="stylesheet" type="text/css" href="./style.css" />
  <script type="text/javascript" src="./scripts.js"></script>
  <title>Zip Compressor</title>

</head>
<body>
  <div>
        <form action="zip.php" enctype="multipart/form-data" method="post">
        <table>
          <tbody>
                <tr>
                  <td>
                        <table>
                          <tbody>
                                <tr>
                                  <td>Nazwa pliku ZIP:</td>
                                  <td><input type="text" value="" name="zip_name" /></td>
                                </tr>
                          </tbody>
                        </table>
                  </td>
                </tr>
                <tr>
                  <td>
                        <div id="files">
                          <div id="file">
                                <table>
                                  <tbody>
                                        <tr>
                                          <td>Plik do spakowania:</td>
                                          <td><input type="file" name="files[]"/></td>
                                        </tr>
                                  </tbody>
                                </table>
                          </div>
                        </div>
                  </td>
                </tr>
                <tr>
                  <td>
                        <table>
                          <tbody>
                                <tr>
                                  <td>
                                        <input type="button" onclick="addFile()" value="Dodaj Plik" />
                                        <input type="button" onclick="remFile()" value="Usuń Plik" />
                                  </td>
                                </tr>
                                <tr>
                                  <td><input type="submit" value="Spakuj" /></td>
                                </tr>
                          </tbody>
                        </table>
                  </td>
                </tr>
          </tbody>
        </table>
        </form>
  </div>
</body>
</html>


scripts.js
function addFile() {
  var files = document.getElementById("files"); // 1
  var file = document.getElementById("file"); // 2
  files.appendChild(file.cloneNode(true)); // 3
}

function remFile() {
  var files = document.getElementById("files"); // 1
  var file = document.getElementById("file"); // 2
  files.removeChild(file); // 4
  var file_last = document.getElementById("file"); // 5
  if (! file_last) {
        files.appendChild(file);
  }
}


zip.php
<?php

$tmp = 'tmp/';
$dir = time();

$directory = $tmp.$dir;

$zip_name = $_POST['zip_name'];

$file_list = array();

mkdir($directory, 0777);

$files_number = sizeof($_FILES['files']['name']);

for ($i = 0; $i < $files_number; $i++) {
  if (is_uploaded_file($_FILES['files']['tmp_name'][$i])) {
        move_uploaded_file($_FILES['files']['tmp_name'][$i], $directory."/".$_FILES['files']['name'][$i]);
        $file = array( "path" => $directory."/".$_FILES['files']['name'][$i], "name" => $_FILES['files']['name'][$i]);
        array_push($file_list, $file);
  }
}

$zip = new ZipArchive();

if ($zip->open($directory."/".$zip_name.".zip", ZIPARCHIVE::CREATE)) {
  foreach ($file_list as $f) {
        $zip->addFile($f['path'], $f['name']);
  }
}

$zip->close();

$handle = opendir($directory);
while (($obj = readdir($handle))) {
                if(($obj == ".") || ($obj == "..") || ($obj == $zip_name.".zip")) continue;
                unlink($directory."/".$obj);
}

header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=".basename($directory."/".$zip_name.".zip").";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($directory."/".$zip_name.".zip"));
readfile($directory."/".$zip_name.".zip");

unlink($directory."/".$zip_name.".zip");
rmdir($directory);

?>
 


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5052

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: bravura Ranga: Poziom 6 Punktów: 150
Komentarze użytkowników
Za pomocą tej metody można zrobić opcje wyboru co chcemy pobrać np. Plik z dodatkiem lub bez.
autor: adikso | 12485 | 2011-06-13 15:10:33


    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors