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"
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);
?>
<!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);
?>
Dodano przez: bravura Ranga: 0 Punktów: 0
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
:: Losowe artykuły
:: Wymiana linków
Modowe inspiracje |
Android Gry i Aplikacje |
ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
Logo dla firmy |
Change Tires - Car Weather Forecast Reminder |
Laminas: MVC Framework for PHP |
IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS |
Katalog roślin |
Programming articles: JAVA, PHP, C++, Python, JavaScript |
Kancelaria Adwokacka Łukasz Huszno