Mal 'ne blöde Frage: wozu braucht man das wenn's doch schon X gute Packer-Programme gibt??
hier eine sehr einfach zu handhabene Klasse von Eric Mueller.
Erstellt zip-Archive mit Ordnerstrukturen, alles so, wie man es von einem Packer kennt.
Beispiel:
PHP-Code:$zip=new zipfile;
$zip->addFile("/files/song.mp3","song.mp3",time());
//bei senden wird einfach das file ausgegeben, man kann es aber auch normal speichern
echo $zip->file();
und hier eine einfache Funktion, die ein Zipfile in ein Array einliest:
PHP-Code:function getZipFileContents($file_contents, $full_information = FALSE)
{
/* getting position of central directory */
$file_size = strlen($file_contents);
$pointer = $file_size - 277;
if ($pointer < 0) { $pointer = 0; }
$pointer = strpos($file_contents, "\x50\x4b\x05\x06\x00\x00\x00\x00", $pointer) + 4;
/* reading central directory */
$central_directory = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', substr($file_contents, $pointer, 18));
$pointer = $central_directory['offset'];
$archive_data = array();
/* getting archive data */
for ($t = $central_directory['disk_start']; $t < $central_directory['disk_entries']; $t++)
{
/* reading central file header */
$central_file_header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', substr($file_contents, $pointer, 46));
/* extracting filename */
$filename = substr($file_contents, $pointer + 46, $central_file_header['filename_len']);
/* extracting extrafield */
$extra = substr($file_contents, $pointer + 46 + $central_file_header['filename_len'], $central_file_header['extra_len']); /* extracting comment */
$comment = substr($file_contents, $pointer + 46 + $central_file_header['filename_len'] + $central_file_header['extra_len'], $central_file_header['comment_len']);
$pointer += 46 + $central_file_header['filename_len'] + $central_file_header['extra_len'] + $central_file_header['comment_len'];
/* filter directories */
if ($filename{strlen($filename) - 1} != '/')
{
/* calculating position of compressed content */
$content_start = $central_file_header['offset'] + 30 + $central_file_header['filename_len'] + $central_file_header['extra_len'];
if ($central_file_header['compression'] == 0)
{
/* extracting uncompressed content */
$content = substr($file_contents, $content_start, $central_file_header['compressed_size']);
} else {
/* extracting compressed content */
$content = substr($file_contents, $content_start, $central_file_header['compressed_size']);
$content .= pack('VV', $central_file_header['crc'], $central_file_header['size']);
/* decompressing content */
$content = @gzinflate($content);
}
/* getting filestatus */
$status = 'ok';
if ($content === FALSE && $status == 'ok') {
$status = 'err_decompress';
}
if (crc32($content) != $central_file_header['crc'] && $status == 'ok')
{
$status = 'err_crc';
}
if (strlen($content) != $central_file_header['size'] && $status == 'ok')
{
$status = 'err_length';
}
/* saving information */
if ($full_information)
{
if ($central_file_header['mdate'] && $central_file_header['mtime'])
{
$hour = ($central_file_header['mtime'] & 0xF800) >> 11;
$minute = ($central_file_header['mtime'] & 0x07E0) >> 5;
$seconde = ($central_file_header['mtime'] & 0x001F)*2;
$year = (($central_file_header['mdate'] & 0xFE00) >> 9) + 1980;
$month = ($central_file_header['mdate'] & 0x01E0) >> 5;
$day = $central_file_header['mdate'] & 0x001F;
$timestamp = mktime($hour, $minute, $seconde, $month, $day, $year);
} else {
$timestamp = time();
}
$i = count($archive_data);
$archive_data[$i] = array();
$archive_data[$i]['filename'] = $filename;
$archive_data[$i]['timestamp'] = $timestamp;
$archive_data[$i]['comment'] = $comment;
$archive_data[$i]['extrafield'] = $extra;
$archive_data[$i]['status'] = $status;
if ($status == 'ok')
{
$archive_data[$i]['content'] = $content;
} else {
$archive_data[$i]['content'] = FALSE;
}
} else {
if($status == 'ok')
{
$archive_data[$filename] = $content;
} else {
$archive_data[$filename] = FALSE;
}
}
}
}
return $archive_data;
}
Geändert von steffenk (14.10.2006 um 17:23 Uhr)
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Mal 'ne blöde Frage: wozu braucht man das wenn's doch schon X gute Packer-Programme gibt??
"Das Gewissen ist die Stimme der Seele. (J.J. Rousseau)"
Um Daten / Texte / Dokus / Bilder einer Webseite online zu packen und dem User als ein .zip zum Download zur Verfügung zu stellen? ;-)
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Schaut interessant aus.. danke für den Tip
gibts da keine Readme oder how2use oder ähnliches dazu?
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Die Klasse ist doch so gut wie selbsterklärend, und in der Datei sind ja auch zwei Links mit drin![]()
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
was braucht man mehr als $zip->addFile und dann das Ergebnis als $zip->file() ?
Die Parameter zum übergeben stehen ja in der Funktion, deshalb habe ich oben
das Beispiel angegeben.
Einfacher gehts kaum noch![]()
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Hätt ja sein können, dass man zB. mehrere Dateien zusammen in ein ZIP packen kann.
Möglich ist auch, die ZIP dann zu speichern, oder gleich einem DL zuzuführen.
Also ums Zippen noch a bissi Rund-Drum-Komfort.
Links:
erster: The following error happened: Cannot load object of type code with ID: 535
zweiter: The following error happened: Cannot load object of type code with ID: 470
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Du kannst mehrere Dateien in ein ZIP packen mit der Klasse.
Code:$zip=new zipfile; $zip->addFile("/files/song1.mp3"),"song1.mp3",time()); $zip->addFile("/files/song2.mp3"),"song2.mp3",time()); $zip->addFile("/files/song3.mp3"),"song3.mp3",time()); echo $zip->file();
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Danke!
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Danke![]()
class GetProfileCustomerEntityReceiverInformationReceiverAndProgrammingInforma...{
public function __construct(){ if(!$this) die(' '); } }
http://www.thedailywtf.com/
schiddebön
Die Rubrik finde ich sehr gut, das könnte eine ideale interne Fundgrube werden.
TP Search <=> Google![]()
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Hi, ich wuerde mich auch fuer diese klasse interessieren!
habs auch schon auprobiert mit einem *.gif!
allerdings ist dass:
alles was dabei herauskommtZitat von ergebnis des scriptes
Ich habe 1 zu 1 den code von St@eff.en verwendet, nur dass ich statt dem mp3 die datei logo1.gif verwendet habe!!!
Kann mir da wer weiterhelfen??
mfg joggl
Hat doch geklappt.
Allerdings nutzt es Dir nichts, dieses am Bildschirm auszugeben.
Entweder Du speicherst das in eine logo.zip oder du sendest es mit entsprechenden Headern, so das der speichern-Dialog kommt.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
wo kann ich dass einstellen dass die datei als zip gespeichert wird oder welche funktion benötige ich dafür?Zitat von St@eff.en
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)