ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
1120
1120
EMPFEHLEN
-
25.07.06 16:41 #1
Hallo Leute,
ich versuche gerade ZIP-Files aus verschiedenen Dateien zu erstellen.
Dazu habe ich mir die zip.lib.php geladen.
In dieser zip.lib.php ist folgendes enthalten:So jetzt habe ich in einer zweiten Datei folgenden Codeschnippsel:PHP-Code:<?php
class zipfile {
var $datasec = array();
var $ctrl_dir = array();
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
var $old_offset = 0;
var $pathToFPDF = NULL;
var $pathToDeepDir = NULL;
function zipfile ($output_filename = 'archive.zip', $DeepDir = './DeepDir.php', $FPDF = './fpdf.php') {
header('Content-Type: application/x-zip');
header('Content-Disposition: inline; filename="' . $output_filename . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
$this->pathToFPDF = $FPDF;
$this->pathToDeepDir = $DeepDir;
}
function read_File ($file) {
if (is_file($file)) {
$fp = fopen ($file, 'rb');
$content = fread ($fp, filesize($file));
fclose ($fp);
return $content;
}
}
function replaceSuffix ($file, $suffix = 'pdf') {
$arr = explode('.', $file);
unset($arr[count($arr) - 1]);
$file = NULL;
foreach($arr as $v) $file .= $v . '.';
$file .= $suffix;
return $file;
}
function getDirContent ($dirName = './') {
if (is_dir($dirName)) {
if (include($this->pathToDeepDir)) {
$dir = new DeepDir();
$dir->setDir($dirName);
$dir->load();
return $dir->files;
} else {
if ($handle = opendir($dirName)) {
while (false !== ($file = readdir($handle))) {
if (($file != '.') && ($file != '..') && (is_file($file))) {
$content[] = $file;
}
}
closedir($handle);
return $content;
}
}
}
}
function addDirContent ($dir = './') {
foreach ($this->getDirContent($dir) as $input) {
$this->addFileAndRead(str_replace('.//', NULL, $input));
}
}
function addFileAndRead ($file) {
if (is_file($file))
$this->addFile($this->read_File($file), $file);
}
function addFileAsPDF ($file, $title = 'PDF File', $author = 'Anonymous') {
//You need FPDF to use this function!
//get it at http://www.fpdf.org/
if (include($this->pathToFPDF)) {
$pdf = new PDF();
$pdf->Open();
//edit this as you need it
$pdf->SetTitle($title);
$pdf->SetAuthor($author);
$pdf->PrintChapter(1, $author, $file);
//nothing to edit below!
$this->addFile($pdf->getBuffer(), $this->replaceSuffix($file));
} else {
$filecontent = implode(NULL, file($file));
$content .= '********************************************' . "\n";
$content .= '* *' . "\n";
$content .= '* Couldn\'t find FPDF! *' . "\n";
$content .= '* Adding this File as plain text file. *' . "\n";
$content .= '* *' . "\n";
$content .= '* Below this box is the sourcefile. *' . "\n";
$content .= '* *' . "\n";
$content .= '********************************************' . "\n";
$content .= ' ' . "\n";
$content .= ' ' . "\n";
$content .= ' ' . "\n";
$content .= $filecontent;
$this->addFile($content, $file);
}
}
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;
}
return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
}
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;
$new_offset = strlen(implode('', $this->datasec));
// 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 = $new_offset;
$cdrec .= $name;
// optional extra field, file comment goes here
// save to central directory
$this -> ctrl_dir[] = $cdrec;
}
function file() {
$data = implode(NULL, $this -> datasec);
$ctrldir = implode(NULL, $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
}
}
?>Was passiert jetzt?:PHP-Code:<?php
ob_start();
require("./zip.lib.php");
$zipfile = new zipfile("archive.zip");
$zipfile->addFileAndRead("example.php");
$zipfile->addFileAndRead("example1.php");
echo $zipfile->file();
?>
Die Dateien example.php und example1.php werden nun in das ZIP-File archive.zip gepackt und an den Browser geschickt.
Meine Frage:
Wie kann ich es schaffen, dass diese Datei auf dem Server in einem bestimmten Verzeichnis abgelegt und nicht an den Browser gesendet wird. Sollte die Datei auf dem Server bereits bestehen soll diese einfach überschrieben werden.
Im weiteren Verlauf des Scriptes muss ich die Datei dann per FTP auf einen anderen Server schieben oder wahlweise per eMail versenden - das bekomme ich dann aber auch hin. Ich erwähne das nur - vielleicht gibt es auch einen besseren Weg - also die Datei gleich per FTP zu versenden oder so.
Ich hoffe auf eure Hilfe!
Vielen Dank dafür im voraus!Ich würde mich über die Bewertung meiner Beiträge mit Kurzkommentar sehr freuen!
Die "dumme Frage" ist gewöhnlich das erste Anzeichen einer völlig neuen Entwicklung!
-------------------
Es ist immer Zeit etwas zu verändern ....
.... das alles so bleibt wie es ist!
-------------------
Homepage Landshut
-------------------
/voodoo.css
#meinFeind {position: absolute; bottom: -6ft;}
-
Speichere den Rückgabewert der file()-Methode einfach in einer Datei.
Markus Wulftange
-
Mit den FTP-Funktionen von PHP ist es meines Wissens nach nicht moeglich eine Datei direkt aus einer Variable auf den FTP-Server zu schreiben. Da muss erst lokal eine Datei erstellt werden die dann hochgeladen wird. Mit meiner FTP-Klasse hingegen ist es auch moeglich die Variable direkt in eine Datei auf dem FTP-Server zu schreiben.
Uebrigens, bei einem Download, wie Du es ja jetzt hast, ist es in der Regel besser als Content-Disposition attachment und nicht inline zu nutzen.PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
26.07.06 09:47 #4
@Gumbo:
Ich habe jetzt die header in der zip.lib.php in den Zeilen 14-18 auskommentiert jetzt sendet er mir die Datei natürlich nicht mehr.
Dann habe ich in mein Script folgendes eingebaut:Jetzt habe ich das gewünschte und ich kann prüfen ob die Datei auch wirklich geschrieben wurde. Danke für den TippPHP-Code:<?php
ob_start();
require("./zip.lib.php");
$zipfile = new zipfile();
$zipfile->addFileAndRead("example.php");
$zipfile->addFileAndRead("example1.php");
$daten = $zipfile->file();
$dateiname = "datei.zip";
$datei = fopen($dateiname, 'a+');
$datenschreiben = fputs($datei, $daten);
?>
@Dennis:
Danke für den Tipp mit der FTP-Klasse ich werde mir das gleich mal anschauen.
Ihr seid Super!Geändert von dwex (26.07.06 um 09:54 Uhr)
Ich würde mich über die Bewertung meiner Beiträge mit Kurzkommentar sehr freuen!
Die "dumme Frage" ist gewöhnlich das erste Anzeichen einer völlig neuen Entwicklung!
-------------------
Es ist immer Zeit etwas zu verändern ....
.... das alles so bleibt wie es ist!
-------------------
Homepage Landshut
-------------------
/voodoo.css
#meinFeind {position: absolute; bottom: -6ft;}
Ähnliche Themen
-
Mp3-Links nicht streamen, sondern lokal speichern (WinXP)
Von kalterjava im Forum Audiotechnik, Recording & Audio-SoftwareAntworten: 4Letzter Beitrag: 18.06.10, 08:42 -
Bild nicht anzeigen sondern speichern
Von ciberjoerg im Forum PHPAntworten: 4Letzter Beitrag: 31.03.10, 02:18 -
Bild nicht öffnen sondern Speichern
Von maga147 im Forum PHPAntworten: 6Letzter Beitrag: 03.04.07, 18:06 -
Link nicht laden sondern speichern
Von kesnw im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 26.11.03, 15:54 -
nl2br aber nicht in datei, sondern nur bei ausgabe
Von DevEye im Forum PHPAntworten: 1Letzter Beitrag: 01.09.02, 10:11





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren