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:



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: