Andreas Korthaus: Probleme mit POST Header (multipart/form-data)

Beitrag lesen

Hi!

Ich weiß es auch nicht, ich glaub ich dreh langsam am Rad. Ich habe Dein Script 1:1 kopiert, aber mit demselben Ergebnis. Sowohl vom Linux-Rechner aus als auch vom Windows-Rechner. Ich habe mir den Traffic nochmal angeguckt, ich sehe beim besten Willen keinen Unterschied zwischen diesem Script, und einem gewöhnlichen Upload, wo dann aber die Daten zur Verfügung stehen. Ich verstehe es nicht!!!!

OK, wieder einige Tests später, bin drauf gekommen das meine Contend-Angabe immer zu wenig war, habe mal bei einem Origuinalen Upload abgezählt, da war der letzte bundary auch mit bei, also habe ich das jetzt so geschrieben:

<?php

$host = "www.server.de";
 $path = "/test.php";
 $boundary ="blak";

define(CRLF, "\xD\xA");

$name = "da_name";
 $filename = "da_filename";
 $gzstring = "HIER_SOLL_MAL_EIN_GZ-STRING_HIN";

$data = $boundary.CRLF;
 $data .= "Content-Disposition: form-data; ";
 $data .= "name="$name"; ";
 $data .= "filename="$filename"".CRLF;
 $data .= "Content-Type: text/plain".CRLF.CRLF;
 $data .= $gzstring.CRLF;
 $data .= "--".$boundary."--".CRLF;

$header = "POST $path HTTP/1.0".CRLF;
 $header .= "Host: $host".CRLF;

$header .= "Content-type: multipart/form-data; boundary=$boundary".CRLF;
 $header .= "Content-length: ".strlen($data).CRLF.CRLF;

$header .= $data;

$fp = fsockopen($host, 80);
    fputs($fp, $header);

while(!feof($fp)) {
        $res .= fread($fp,1);
    }
    fclose($fp);

echo $res;
?>

und siehe da es geht:

[_FILES] => Array
        (
            [da_name] => Array
                (
                    [name] => da_filename
                    [type] => text/plain
                    [tmp_name] => /tmp/phpoKZoyc
                    [size] => 31
                )

)

Weiß gar nicht wie ich Dir danken soll! Alleine hätte ich es wohl nicht geschafft! Wobei ich mich jetzt ernsthaft frage warum es bei Dir funktioniert hat und bei mir nicht?!

Was hälst Du von einer htaccess Authentifizierung:

$header .= "Authorization: Basic ".base64_encode("$username:$password").CRLF;

Ich habe übrigens mal ein bisschen in der OHP-Doku gelesen, sehr viele Fehler in zusammenhang mit Ubertragung binärer Daten entstehen wohl tatsächlich durch die "Zeilenenden" und in PHP kann man das komplett umgehen wenn man die contrend-length angibt, wobei der Apache auf der anderen Seite ja auch noch ein wörtchen mitzusprechen hat ;-)

ich versuche jetzt einfach mal einen gz-String zu übertragen, vielleicht klappts ja einfach so!

Nochmals vielen Dank und schöne Grüße,
Andreas