funktion zum upload von z.b Level daten auf einen Webserver von ??? |
So hier zu werd ich noch bissl mehr schreiben müssen als zur download funktion :) Wichtig ist das ihr eure daten irgendwie in groß buchstaben quetscht. Das heisst ihr speichert z.b. eine X-position von irgendwas in eine buchstabenkette indem ihr z.b. die zahl der X-Koordinate modulo 26 rechnet und dann das ergebnis in einen string parst.. aber darum gehts nicht da müsst ihr schon selbst kreativ werden. Hauptsache nachher bestehen die daten die ihr auf den Webserver uploaden wollt aus einer zeichenkette (ich weiss nicht genau wie lang sie maximal sein darf) die z.b. so ausschaut: ADSKFJAEIRWERUSDIUXCVKJSDKFJWEIRWEIRSKDJFKJ SDKFJWEIRWUJEIRUSDKFJSDKJFISCUVXIUCVKQWEPSDFPOIXCLVJWER Diese daten werden nun von der funktion compression komprimiert indem sie nach dem 2er tupel sucht der am häufigsten vorkommt (dieses verfahren bot sich bei meinen level daten an und bringt mir eine kompression von etwa 40%) . Dieser häufigste 2er Tupel wird dann durch einen klein buchstaben ersetzt... das ganze 26 mal für jeden klein buchstaben im alphabet. Der so gewonnene komprimierte String wird nun noch um den key erweitert der beinhaltet in welcherreihenfolge welche tupel ersetzt wurden. Der key ist also 52 zeichen lang (26mal 2er tupel) und wird VOR die komprimierten daten gesetzt. Dieser nun komprimierte string wird an ein PHP script als parameter gesendet und vom PHP script dekomprimiert und auf den webserver geschrieben. Bei einer maximalen zeichenlänge von ??? funktionierte das ganze nicht mehr (lag aber bei 5000 zeichen etwa..glaube ich) daher auch der ganze komprimierungs quatsch. Die funktion findmost$ sucht wie der name schon sagt das häufigste 2er Tupel.. ich glaube da kann man noch bissl was optimieren oder zumindest könnt ihr sie euren wünschen (3er tupel suchen etc.) anpassen. So genug vom rumgerede hier kommt der source: [code:1:aea09860c6] Type comp Field word$ Field count End Type uploading("test.lev") Function uploading(file$) filein = ReadFile(file$) If filein <> 0 Then While Not Eof(filein) daten$ = daten$ + Chr$(ReadByte(filein)) Wend EndIf CloseFile(filein) ;### hier das verzeichnis ändern indem die daten aufdem ;### webserver hinterlegt werden sollen hier heisst es TMP ;### der ordner muss natürlich die entsprechenden rechte haben daten$="?daten="+compression$(daten$)+"&file=TMP/"+file$ ;### hier natürlich den namen eurer url eintragen succ=upload("www.deine.url.hier.de","upload.php",daten$,80) End Function Function upload(url$,script$,par$,port) is_online=OpenTCPStream(url$,port) If is_online req$=script$+par$ WriteLine is_online,"GET /"+req$+" HTTP/1.1" WriteLine is_online,"Host: "+url$ WriteLine is_online,"User-Agent: upload" WriteLine is_online,"Accept: */*" WriteLine is_online,"" CloseTCPStream is_online EndIf End Function Function compression$(daten$) For x = 0 To 25 key$ = key$+findmost$(daten$) daten$ = Replace(daten$,findmost$(daten$),Chr$(97+x)) Next daten$ = key$+daten$ Return daten$ End Function Function findmost$(daten$) c.comp = New comp cword$ = Mid$(daten$,1,2) ccount = 1 For x = 3 To Len(daten$) Step 2 vergleich$ = Mid$(daten$,x,2) For c2.comp = Each comp If vergleich$ = c2word$ Then c2count = c2count + 1 Next For c.comp = Each comp If vergleich$ <> cword$ Then c.comp = New comp cword$ = vergleich$ ccount = 1 EndIf Next Next For c.comp = Each comp For c2.comp = Each comp If ccount > c2count Then Delete c2 c2.comp = First comp EndIf Next Next c.comp = First comp most$ = cword$ For c.comp = Each comp Delete c Next Return most$ End Function [/code:1:aea09860c6] Hier der Source des PHP scriptes (upload.php) welches auf dem webserver aufgerufen wird: [code:1:aea09860c6] <?php $fp = fopen ($file, "wb"); $daten = decompression($daten); if($fp) { flock($fp,2); fputs($fp,$daten); flock($fp,3); fclose($fp); } function decompression($daten) { $key = substr($daten, 0, 52); $daten = substr($daten, 52, strlen($daten)); for ($x=0; $x<= 52; $x+=2) { $newkey = $newkey.substr($key, strlen($key)-$x, 2); } $key = $newkey; $start = 0; for ($x=25; $x>=0; $x--) { $nach = substr($key, $start, 2); $von = chr(97+$x); $daten = str_replace($von, $nach, $daten); $start += 2; } return $daten; } ?> [/code:1:aea09860c6] Und hier zum schluss noch den code für die dekomprimierung in Blitzbasic für den ders brauch :D [code:1:aea09860c6] Function decompression$(daten$) key$ = Left$(daten$,52) daten$ = Mid$(daten$,53,Len(daten$)) For x = 1 To 52 Step 2 newkey$ = newkey$+Mid$(key$,Len(key$)-x,2) Next key$ = newkey$ start = 1 For x = 25 To 0 Step - 1 daten$ = Replace(daten$,Chr$(97+x),Mid$(key$,start,2)) start = start + 2 Next Return daten$ End Function [/code:1:aea09860c6] Uff.. das wars.. anregungen, lob, kritik, mord drohungen, kriegs erklärungen und alles andere ist natürlich gern gesehen :wink: PS. wer rechtschraibfähler findöt der darf sie behalten muss aber mindestens 50% davon für wohltätige zwecke spenden :lol: |