WinFuture-Forum.de: Gzinflate In Visual Basic - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Gzinflate In Visual Basic nach gzdeflate in php


#1 Mitglied ist offline   _seym. 

  • Gruppe: aktive Mitglieder
  • Beiträge: 52
  • Beigetreten: 12. Februar 06
  • Reputation: 0
  • Geschlecht:Männlich

  geschrieben 25. Februar 2007 - 00:13

hi zusammen!


ich verzweifle gerade an einem problem: ich möchte viele dateien (php/txt/html/jpg/usw) von meinem webserver runterladen. meine idee war, die files per php in ein archiv zu packen um das dann als einzelne datei laden zu können. nun unterstütz mein webserver kein zip. also dachte ich mir, einfach alle dateien aneinanderzuhängen (natürlich inkl infos um sie danach wieder auseinanderzuschnippeln) und das ganze zu gzippen.

das funzt auch soweit. die andere hälfte des konstrukts ist ein VB programm, welches den stream dann aufdröseln soll, sprich un-gzippen ^^ und da hörts auch schon auf: ich schaffs mit keiner zlib.dll (von denen, die ich gefunden habe) den stream wieder zu entpacken...



wär super wenn jemand ne idee hätte, womit ich das in php packen und in vb entpacken muss, damit das funzt. (oder von mir aus auch na ganz andere alternative zu meinem konstrukt)



vielen dank im voraus!
mfg,
_seym.
0

Anzeige



#2 Mitglied ist offline   _seym. 

  • Gruppe: aktive Mitglieder
  • Beiträge: 52
  • Beigetreten: 12. Februar 06
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 25. Februar 2007 - 21:45

w00t!

hat sich erledigt! habs geschafft!


mfg
mfg,
_seym.
0

#3 Mitglied ist offline   tobiasndw 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.815
  • Beigetreten: 24. September 03
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 25. Februar 2007 - 21:49

Möchtest du uns mitteilen die du das Problem gelöst hast?
0

#4 Mitglied ist offline   _seym. 

  • Gruppe: aktive Mitglieder
  • Beiträge: 52
  • Beigetreten: 12. Februar 06
  • Reputation: 0
  • Geschlecht:Männlich

  geschrieben 25. Februar 2007 - 22:24

joa eigentlich ganz einfach: ich hab die daten jetzt nicht mehr mit gzdeflate gepackt, sondern (ich sprech grade von der php seite) einfach aneinandergehängt, mittels gzwrite komprimiert und in eine temp datei geschrieben. mit infos zu den einzelnen dateien im header (brauch ich ja zum entpacken):

<?php
$data="";
$fils=array(/* mit dateinamen auffüllen */);
$header="<info>";
foreach($fils as $fil){
	if(!is_file($fil)) continue; // sicher ist sicher
	$filsz=filesize($fil);
	$cfilsz+=$filsz; // $cfilsz ist die gesamtgröße der unkomprimierten daten.
	$header.=$fil."*".$filsz."|";
	$data.=file_get_contents($fil);
}
$header=substr($header,0,strlen($header)-1)."</info>"; //die pipe am schluss entfernen
$data=$header.$data; //alles zusammen in die $data variable

$tfil=tempnam("./","stf"); //temp datei...
file_put_contents($tfil,$data); // und rein mit dem schmodder ^^

//ausgabe:
//die funktion "gzcompressfile" hab ich von php.net/gzwrite

echo pack("l",$cfilsz); //erst die uncompressed filesize als long ausgeben
fpassthru(fopen(gzcompressfile($tfil,9),"r")); // dann die komprimierten daten

unlink($tfil.".gz"); //aufräumarbeit...
unlink($tfil);

?>


so. das ganze mit
header("Content-Type: application/octet-stream");
ausgeben und runterladen.

danach ins vb programm laden:
erstmal die deklarationen: (zlib.dll bei google suchen ^^)
Public Declare Function gzopen Lib "zlib.dll" (ByVal path As String, ByVal mode As String) As Long
Public Declare Function gzread Lib "zlib.dll" (ByVal file As Long, ByVal buf As String, ByVal buf_len As Long) As Long
Public Declare Function gzclose Lib "zlib.dll" (ByVal file As Long) As Long


dann der simple code:
  Dim fil As String, tfil As String, fh As Long, out As String
  Dim F As Integer, SFh As Long, SFd() As Byte
  
  fil = "archive.gz"
  tfil = fil & ".tmp"
  
  F = FreeFile ' ein braver coder mach das ^^
  ReDim SFd(FileLen(fil) - 5) ' byte-array dimensionieren auf FileLen - 1 - 4
  Open fil For Binary Access Read As #F
	Get #F, , SFh ' der long wert mit der uncompressed filesize
	Get #F, , SFd ' die daten
  Close #F
  
  F = FreeFile
  Open tfil For Binary Access Write As #F
	Put #F, , SFd ' und die daten allein in ne tempdatei
  Close #F
  
  fh = gzopen(tfil, "r") ' tempfile öffnen
	out = String(SFh, 0) ' stringbuffer mit nullen füllen
	gzread fh, out, SFh ' dekomprimieren
  gzclose fh ' und voila! in "out" ist der datenstring inkl header!


das ganze sieht recht gut aus für ascii data, allerdings werde ich wahrscheinlich für binary-safe statt dem out string ein byte-array verwenden.
der rest vom vb-programm sollte einfach sein. die daten in "out" mittels den header infos slicen und auf der pladde speichern.

viel spaß damit. vielleicht hab ja jemandem helfen können. ^^

mfg.
mfg,
_seym.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0