 |
| 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 |
15.03.2005, 10:37
|
#1
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Zip-Klasse
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).
|
|
|
15.03.2005, 11:10
|
#2
|
|
TP-Senior
Registriert seit: Jan 2003
Ort: Frankfurt/M.
|
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)"
|
|
|
15.03.2005, 12:17
|
#3
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
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
|
|
|
15.03.2005, 12:18
|
#4
|
|
TP-Insider
Registriert seit: Dec 2004
Ort: Braunschweig
|
Schaut interessant aus.. danke für den Tip
|
|
|
15.03.2005, 12:34
|
#5
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
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!
|
|
|
15.03.2005, 12:42
|
#6
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
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
|
|
|
15.03.2005, 12:48
|
#7
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
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 
|
|
|
15.03.2005, 14:03
|
#8
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
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!
|
|
|
15.03.2005, 14:18
|
#9
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
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
|
|
|
15.03.2005, 14:37
|
#10
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
|
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!
|
|
|
15.03.2005, 19:26
|
#11
|
|
TP-Veteran
Registriert seit: Feb 2002
|
Danke 
__________________
class GetProfileCustomerEntityReceiverInformationReceiverAndProgrammingInforma...{
public function __construct(){ if(!$this) die(' '); } }
http://www.thedailywtf.com/
|
|
|
16.03.2005, 00:55
|
#12
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
schiddebön 
Die Rubrik finde ich sehr gut, das könnte eine ideale interne Fundgrube werden.
TP Search <=> Google 
|
|
|
24.08.2005, 09:18
|
#13
|
|
TP-Member
Registriert seit: Aug 2005
|
Hi, ich wuerde mich auch fuer diese klasse interessieren!
habs auch schon auprobiert mit einem *.gif!
allerdings ist dass:
Zitat:
|
Zitat von ergebnis des scriptes
PKÂI3ð›üc logo1.gifËÉOÏ7ÔKÏLð›üc PKÂI3ð›üc logo1.gifPK7>
|
alles was dabei herauskommt
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
|
|
|
24.08.2005, 09:23
|
#14
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
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.
| | |