Fahrtenbuch genial!
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 24.08.2005, 09:42   #16
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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; 
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer

Geändert von steffenk (24.08.2005 um 09:51 Uhr).
steffenk ist offline   Mit Zitat antworten


Alt 24.08.2005, 10:01   #17
Guest
 
Registriert seit: Mar 2004
Ort: Süddeutschland
Jakob macht alles soweit korrekt
Smile

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!
Jakob ist offline   Mit Zitat antworten
Alt 24.08.2005, 10:10   #18
TP-Member
 
Registriert seit: Aug 2005
joggl1982 macht alles soweit korrekt
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??
joggl1982 ist offline   Mit Zitat antworten
Alt 24.08.2005, 12:09   #19
TP-Veteran
 
Benutzerbild von fettmme
 
Registriert seit: Feb 2002
fettmme bringt sich richtig einfettmme bringt sich richtig ein
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->addFilefile_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/
fettmme ist offline   Mit Zitat antworten
Alt 26.09.2005, 23:21   #20
TP-Junior
 
Registriert seit: Sep 2005
georf macht alles soweit korrekt
Question

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!
georf ist offline   Mit Zitat antworten
Alt 27.09.2005, 00:15   #21
TP-Moderator
 
Benutzerbild von Rizzo
 
Registriert seit: Aug 2004
Ort: Kaiserslautern
Rizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine User
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.
Rizzo ist gerade online   Mit Zitat antworten
Alt 27.09.2005, 00:51   #22
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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()); 
... 
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 27.09.2005, 15:34   #23
TP-Junior
 
Registriert seit: Sep 2005
georf macht alles soweit korrekt
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??
georf ist offline   Mit Zitat antworten
Alt 27.09.2005, 18:35   #24
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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

?>
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 27.09.2005, 21:49   #25
TP-Junior
 
Registriert seit: Sep 2005
georf macht alles soweit korrekt
Vielen Dank
Funktioniert einwandfrei!!
georf ist offline   Mit Zitat antworten
Alt 07.12.2005, 05:39   #26
kaj
TP-Newbie
 
Registriert seit: Dec 2005
kaj macht alles soweit korrekt
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
kaj ist offline   Mit Zitat antworten
Alt 07.12.2005, 22:39   #27
TP-Junior
 
Registriert seit: Sep 2005
georf macht alles soweit korrekt
Lightbulb

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($dirsSORT_STRING);
  
array_multisort($filesSORT_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;

georf ist offline   Mit Zitat antworten
Alt 08.12.2005, 01:24   #28
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 08.12.2005, 14:02   #29
TP-Junior
 
Registriert seit: Sep 2005
georf macht alles soweit korrekt
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...
georf ist offline   Mit Zitat antworten
Alt 04.04.2006, 22:27   #30
Pot
TP-Newbie
 
Registriert seit: Apr 2006