Eurokicker
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 15.03.2005, 10:37   #1
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

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$pointer18));
    
$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$pointer46));
        
/* 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;

Angehängte Dateien
Dateityp: zip zip_class.zip (1,9 KB, 2411x aufgerufen)
__________________

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

Geändert von steffenk (14.10.2006 um 17:23 Uhr).
steffenk ist offline   Mit Zitat antworten


Alt 15.03.2005, 11:10   #2
TP-Senior
 
Benutzerbild von madace
 
Registriert seit: Jan 2003
Ort: Frankfurt/M.
madace ist auf einem guten Weg
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)"
madace ist offline   Mit Zitat antworten
Alt 15.03.2005, 12:17   #3
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
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
Boris ist offline   Mit Zitat antworten
Alt 15.03.2005, 12:18   #4
TP-Insider
 
Benutzerbild von SteffenR
 
Registriert seit: Dec 2004
Ort: Braunschweig
SteffenR bringt sich richtig einSteffenR bringt sich richtig ein
Schaut interessant aus.. danke für den Tip
SteffenR ist offline   Mit Zitat antworten
Alt 15.03.2005, 12:34   #5
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 15.03.2005, 12:42   #6
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
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
Boris ist offline   Mit Zitat antworten
Alt 15.03.2005, 12:48   #7
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
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
steffenk ist offline   Mit Zitat antworten
Alt 15.03.2005, 14:03   #8
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 15.03.2005, 14:18   #9
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
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
Boris ist offline   Mit Zitat antworten
Alt 15.03.2005, 14:37   #10
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
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!
321 ist offline   Mit Zitat antworten
Alt 15.03.2005, 19:26   #11
TP-Veteran
 
Benutzerbild von fettmme
 
Registriert seit: Feb 2002
fettmme bringt sich richtig einfettmme bringt sich richtig ein
Danke
__________________
class GetProfileCustomerEntityReceiverInformationReceiverAndProgrammingInforma...{
public function __construct(){ if(!$this) die(' '); } }
http://www.thedailywtf.com/
fettmme ist offline   Mit Zitat antworten
Alt 16.03.2005, 00:55   #12
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
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
steffenk ist offline   Mit Zitat antworten
Alt 24.08.2005, 09:18   #13
TP-Member
 
Registriert seit: Aug 2005
joggl1982 macht alles soweit korrekt
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
joggl1982 ist offline   Mit Zitat antworten
Alt 24.08.2005, 09:23   #14
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
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
<