 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
24.08.2005, 09:42
|
#16
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
gar nicht, das musst Du schon selber machen. Die Klasse packt nur.
Beispiel:
PHP-Code:
//send header
$mime="application/x-gzip";
header('Content-Type: '.$mime);
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Content-Disposition: inline; filename="file.zip"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
//send zipfile
echo $zip->file();
exit;
Geändert von steffenk (24.08.2005 um 09:51 Uhr).
|
|
|
24.08.2005, 10:01
|
#17
|
|
Guest
Registriert seit: Mar 2004
Ort: Süddeutschland
|
Nutze die Klasse schon einige Zeit um ausgewählte Dateien in einem Zip-File runterzuladen, und hab mich noch gar nicht bedankt wie die anderen das so schön vormachen.
Jetzt kommt noch ein ganz höfliches, artiges, nettes [+ 200 andere Attribute] Danke! 
|
|
|
24.08.2005, 10:10
|
#18
|
|
TP-Member
Registriert seit: Aug 2005
|
so irgendwie weiß ich nicht wie das funktionieren soll ich habs einmal so probiert:
PHP-Code:
<?php
include("zip_class.php");
$zip=new zipfile;
$zip->addFile("logo1.gif","logo1.gif",time());
//mein versuch die datei zu speichern
$file="test.zip";
$zipfile = fopen ($file, "a+");
fwrite($zipfile,$zip->file());
?>
jetzt wird die zip datei erstellt und der inhalt ist auch logo1.gif aber nach dem entzippen ist die datei unbrauchbar, wenn ich mir das gif anschauen will kommt immer die fehlermeldung: Typ kann nicht definiert werden!
wie funktioniert das speichern, ist mein lösungsansatz richtig??
|
|
|
24.08.2005, 12:09
|
#19
|
|
TP-Veteran
Registriert seit: Feb 2002
|
Zitat:
|
Zitat von joggl1982
jetzt wird die zip datei erstellt und der inhalt ist auch logo1.gif aber nach dem entzippen ist die datei unbrauchbar, wenn ich mir das gif anschauen will kommt immer die fehlermeldung: Typ kann nicht definiert werden!
wie funktioniert das speichern, ist mein lösungsansatz richtig??
|
Probier's mal so
PHP-Code:
<?php
include("zip_class.php");
$zip=new zipfile;
// Der Inhalt der Datei muss an die Klasse gesendet werden
$zip->addFile( file_get_contents('logo1.gif') ,"logo1.gif",time());
//mein versuch die datei zu speichern
$file="test.zip";
$zipfile = fopen ($file, "a+");
fwrite($zipfile,$zip->file());
?>
__________________
class GetProfileCustomerEntityReceiverInformationReceiverAndProgrammingInforma...{
public function __construct(){ if(!$this) die(' '); } }
http://www.thedailywtf.com/
|
|
|
26.09.2005, 23:21
|
#20
|
|
TP-Junior
Registriert seit: Sep 2005
|
Wie bekommt man jetzt in die Zip datei verschiedene ordner mit datein, leider kann ich mir das nicht vorstellen wie das mit der class gehen soll obwohl ich sie schon ein bisschen studiert habe!
kann mir einer helfen??
danke! 
|
|
|
27.09.2005, 00:15
|
#21
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Zitat:
|
Zitat von georf
Wie bekommt man jetzt in die Zip datei verschiedene ordner mit datein, leider kann ich mir das nicht vorstellen wie das mit der class gehen soll obwohl ich sie schon ein bisschen studiert habe!
kann mir einer helfen??
danke! 
|
steht doch auf seite 1 in diesem thread...
für jede datei die hinzugefügt werden soll, fügst du ein $zip->addFile() hinzu.
|
|
|
27.09.2005, 00:51
|
#22
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
man muss nur den Ordner mit angeben:
PHP-Code:
$zip=new zipfile;
$zip->addFile("/files/song1.mp3","song1.mp3",time());
$zip->addFile("/files/song2.mp3","moresongs/song2.mp3",time());
...
|
|
|
27.09.2005, 15:34
|
#23
|
|
TP-Junior
Registriert seit: Sep 2005
|
Ja, das ist ja auch gar nicht mein Problem, ich möchte mir diese Datei auch speichern, also brauche ich auch die Funktion
file_get_contents
und dann klappt das nicht mehr mit den Ordnern
Versteht ihr mein Problem??
|
|
|
27.09.2005, 18:35
|
#24
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
nein, irgendwie nicht.
Hier mal ein komplettes Beispiel, das funktioniert:
Code:
<?php
/* Beispiel */
$msg="";
$content=0;
if(isset($_POST['submit'])) {
$file1=get_magic_quotes_gpc() ? stripslashes($_POST['file1']) : $_POST['file1'];
$file2=get_magic_quotes_gpc() ? stripslashes($_POST['file2']) : $_POST['file2'];
$file3=get_magic_quotes_gpc() ? stripslashes($_POST['file3']) : $_POST['file3'];
$folder1=get_magic_quotes_gpc() ? stripslashes($_POST['folder1']) : $_POST['folder1'];
$folder2=get_magic_quotes_gpc() ? stripslashes($_POST['folder2']) : $_POST['folder2'];
$folder3=get_magic_quotes_gpc() ? stripslashes($_POST['folder3']) : $_POST['folder3'];
if($file1=="" && $file2=="" && $file3=="") {
$msg="Kann nicht Luft zippen ;-)";
} else {
$zip=new zipfile();
if($file1!="") {
$real1=realpath('./')."/$file1";
if(!is_readable($real1)) {
$msg.="kann $real1 nicht lesen<br>";
} else {
$zip->addFile(file_get_contents($real1),($folder1=="") ? $file1 : "$folder1/$file1",time());
$msg.="zippe $real1 ...<br>";
$content=1;
}
}
if($file2!="") {
$real2=realpath('./')."/$file2";
if(!is_readable($real2)) {
$msg.="kann $real2 nicht lesen<br>";
} else {
$zip->addFile(file_get_contents($real2),($folder2=="") ? $file2 : "$folder2/$file2",time());
$msg.="zippe $real2 ...<br>";
$content=1;
}
}
if($file3!="") {
$real3=realpath('./')."/$file3";
if(!is_readable($real3)) {
$msg.="kann $real3 nicht lesen<br>";
} else {
$zip->addFile(file_get_contents($real3),($folder3=="") ? $file3 : "$folder3/$file3",time());
$msg.="zippe $real3 ...<br>";
$content=1;
}
}
if($content==1) {
$s=$zip->file();
$archivname=realpath('./')."/test.zip";
$handle = fopen ($archivname, "wb");
fwrite($handle,$s);
fclose($handle);
$msg.='<br>Das Archiv: <a href="test.zip">test.zip</a>';
}
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Zipper</title>
<style type="text/css">
</style>
</head>
<body>
<h1>Zipper</h1>
<?php
if($msg!="") echo "<p>$msg</p>";
?>
<form action="#" method="post">
<fieldset>
<legend>Zipper</legend>
<label for="file1">File1:</label>
<input type="text" name="file1">
<label for="folder1">in Ordner:</label>
<input type="text" name="folder1">
<br>
<label for="file2">File2:</label>
<input type="text" name="file2">
<label for="folder2">in Ordner:</label>
<input type="text" name="folder2">
<br>
<label for="file1">File3:</label>
<input type="text" name="file3">
<label for="folder1">in Ordner:</label>
<input type="text" name="folder3">
<br>
<input type="submit" name="submit" value="zip it!">
</fieldset>
</form>
</body>
</html>
<?php
/**
* Zip file creation class.
* Makes zip files.
*
* Based on :
*
* http://www.zend.com/codex.php?id=535&single=1
* By Eric Mueller <eric@themepark.com>
*
* http://www.zend.com/codex.php?id=470&single=1
* by Denis125 <webmaster@atlant.ru>
*
* a patch from Peter Listiak <mlady@users.sourceforge.net> for last modified
* date and time of the compressed file
*
* Official ZIP file format: http://www.pkware.com/appnote.txt
*
* @access public
*/
class zipfile
{
/**
* Array to store compressed data
*
* @var array $datasec
*/
var $datasec = array();
/**
* Central directory
*
* @var array $ctrl_dir
*/
var $ctrl_dir = array();
/**
* End of central directory record
*
* @var string $eof_ctrl_dir
*/
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
/**
* Last offset position
*
* @var integer $old_offset
*/
var $old_offset = 0;
/**
* Converts an Unix timestamp to a four byte DOS date and time format (date
* in high two bytes, time in low two bytes allowing magnitude comparison).
*
* @param integer the current Unix timestamp
*
* @return integer the current date in a four byte DOS format
*
* @access private
*/
function unix2DosTime($unixtime = 0) {
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
if ($timearray['year'] < 1980) {
$timearray['year'] = 1980;
$timearray['mon'] = 1;
$timearray['mday'] = 1;
$timearray['hours'] = 0;
$timearray['minutes'] = 0;
$timearray['seconds'] = 0;
} // end if
return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
} // end of the 'unix2DosTime()' method
/**
* Adds "file" to archive
*
* @param string file contents
* @param string name of the file in the archive (may contains the path)
* @param integer the current timestamp
*
* @access public
*/
function addFile($data, $name, $time = 0)
{
$name = str_replace('\\', '/', $name);
$dtime = dechex($this->unix2DosTime($time));
$hexdtime = '\x' . $dtime[6] . $dtime[7]
. '\x' . $dtime[4] . $dtime[5]
. '\x' . $dtime[2] . $dtime[3]
. '\x' . $dtime[0] . $dtime[1];
eval('$hexdtime = "' . $hexdtime . '";');
$fr = "\x50\x4b\x03\x04";
$fr .= "\x14\x00"; // ver needed to extract
$fr .= "\x00\x00"; // gen purpose bit flag
$fr .= "\x08\x00"; // compression method
$fr .= $hexdtime; // last mod time and date
// "local file header" segment
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
$c_len = strlen($zdata);
$fr .= pack('V', $crc); // crc32
$fr .= pack('V', $c_len); // compressed filesize
$fr .= pack('V', $unc_len); // uncompressed filesize
$fr .= pack('v', strlen($name)); // length of filename
$fr .= pack('v', 0); // extra field length
$fr .= $name;
// "file data" segment
$fr .= $zdata;
// "data descriptor" segment (optional but necessary if archive is not
// served as file)
$fr .= pack('V', $crc); // crc32
$fr .= pack('V', $c_len); // compressed filesize
$fr .= pack('V', $unc_len); // uncompressed filesize
// add this entry to array
$this -> datasec[] = $fr;
// now add to central directory record
$cdrec = "\x50\x4b\x01\x02";
$cdrec .= "\x00\x00"; // version made by
$cdrec .= "\x14\x00"; // version needed to extract
$cdrec .= "\x00\x00"; // gen purpose bit flag
$cdrec .= "\x08\x00"; // compression method
$cdrec .= $hexdtime; // last mod time & date
$cdrec .= pack('V', $crc); // crc32
$cdrec .= pack('V', $c_len); // compressed filesize
$cdrec .= pack('V', $unc_len); // uncompressed filesize
$cdrec .= pack('v', strlen($name) ); // length of filename
$cdrec .= pack('v', 0 ); // extra field length
$cdrec .= pack('v', 0 ); // file comment length
$cdrec .= pack('v', 0 ); // disk number start
$cdrec .= pack('v', 0 ); // internal file attributes
$cdrec .= pack('V', 32 ); // external file attributes - 'archive' bit set
$cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
$this -> old_offset += strlen($fr);
$cdrec .= $name;
// optional extra field, file comment goes here
// save to central directory
$this -> ctrl_dir[] = $cdrec;
} // end of the 'addFile()' method
/**
* Dumps out file
*
* @return string the zipped file
*
* @access public
*/
function file()
{
$data = implode('', $this -> datasec);
$ctrldir = implode('', $this -> ctrl_dir);
return
$data .
$ctrldir .
$this -> eof_ctrl_dir .
pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk"
pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall
pack('V', strlen($ctrldir)) . // size of central dir
pack('V', strlen($data)) . // offset to start of central dir
"\x00\x00"; // .zip file comment length
} // end of the 'file()' method
} // end of the 'zipfile' class
?>
|
|
|
27.09.2005, 21:49
|
#25
|
|
TP-Junior
Registriert seit: Sep 2005
|
Vielen Dank
Funktioniert einwandfrei!!
|
|
|
07.12.2005, 05:39
|
#26
|
|
TP-Newbie
Registriert seit: Dec 2005
|
Guten Tag,
Wie kann ich mit der Zip-Klasse einen ganzen Ordner mit Unterordnern auf einen Rutsch zippen und downloaden?
Der Ordner wird dynamisch erstellt, ich kenne dessen Inhalt im voraus nicht.
Einzelne Files kann ich problemlos zippen.
Danke für die Hilfe
|
|
|
07.12.2005, 22:39
|
#27
|
|
TP-Junior
Registriert seit: Sep 2005
|
in der Post variable ist der Baum zum ordner gegeben (also download_zip)
bei mir functioniert es...
http://georf.ge.funpic.de/page/download.php?link=1
musst auf zippen klicken
aber für große datein total unbrauchbar, weil es einfach zu lange dauert...
PHP-Code:
// Zipp Klasse einladen
include 'zipclass.php';
// Array definiern
$zip_files["files"] = array();
$zip_files["folders"] = array();
// Alle Unterordner durchlaufen
$zip_files = download_zip($zip_files,$_POST["download_zip"]); // Order auflisten
// Neue Zipfile
$zip=new zipfile();
// Für alle Datein
for($i=0;$i<count($zip_files["files"]);$i++){
// Realdateinamen
$real = $zip_files["folders"][$i].'/'.$zip_files["files"][$i];
//Falls Datei lesbar
if(is_readable($real)){
// neuer unterzipdatei
$zip->addFile(
file_get_contents($real),($zip_files["folders"][$i]=="") ?
$zip_files["files"][$i] :
substr($zip_files["folders"][$i],(strlen($_SESSION["downloads"]["ordner"]))).$zip_files["files"][$i],time());
$content=1;
}
}
if($content==1){ // falls inhalt vorhanden (es gibt ordner ohne Datein)
$s=$zip->file();
$archivname=realpath('./')."/temp/Download.zip"; //Name und Pfad
$handle = fopen ($archivname, "wb"); // Schreib du Sau
fwrite($handle,$s);
fclose($handle);
hinweis("Danke für den Download",'Falls der Download nicht selbstständig startet bitte <a href="temp/Download.zip">hier</a> klicken!');
download_statistik("temp/Download.zip",true);
}
}
function download_zip($zip_files,$dir_to_zip){
$dirs = array(); // Array für Verzeichnisse
$files = array(); // Array für Datein
// Ordner öffnen
$verz=opendir($dir_to_zip);
// Alle Verzeichnisse und Datein in ein Array speichern
while ($file = readdir ($verz)){
// Falls ein Ordner
if (is_dir($dir_to_zip.'/'.$file) and $file != '.' and $file != '..'){
array_push($dirs,strtolower($file));
}
// Falls eine Datei
if (is_file($dir_to_zip.'/'.$file)){
array_push($files,strtolower($file));
}
}
// Nach Name sotieren
array_multisort($dirs, SORT_STRING);
array_multisort($files, SORT_STRING);
// Für alle Datein
for($i=0;$i<count($files);$i++){
$zip__file = get_magic_quotes_gpc() ? stripslashes($files[$i]) : $files[$i];
// File in das Array einfügen
array_push($zip_files["files"],$zip__file);
$zip__folder = get_magic_quotes_gpc() ? stripslashes($dir_to_zip) : $dir_to_zip;
// Pfad für die Datei in das Array einfügen
array_push($zip_files["folders"],$zip__folder);
}
// Für alle Ordner
for($i=0;$i<count($dirs);$i++){
//Ordner öffnen
$zip_files = download_zip($zip_files , $dir_to_zip.'/'.$dirs[$i]);
}
// Array zurückgeben
return $zip_files;
}
|
|
|
08.12.2005, 01:24
|
#28
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
also ich habe es sogar mit 40MB-Archiven hinbekommen, Performance war nicht wirklich schlecht.
Das die Funpic-Server natürlich nicht die Performance bieten ist klar, ausserdem haben die doch diese blöde 1MB-Beschränkung.
|
|
|
08.12.2005, 14:02
|
#29
|
|
TP-Junior
Registriert seit: Sep 2005
|
Bei meinem server, der bei mir zuhause steht funktioniert es auch einwandfrei, aber den kann ich mit meiner ISDN Verbindung nicht ans netz stellen und dsl gibt es bei mir noch nicht.
aber bei dir hat das script funktioniert, ist ja eigentlichauch total einfach geschrieben...
|
|
|
04.04.2006, 22:27
|
#30
|
|
TP-Newbie
Registriert seit: Apr 2006
| | |