Andreas Korthaus: _curl: Problem mit Binärdaten

Hallo;-)

Mal wieder mein leidiges Thema mit der Übertragung von Binärdaten über HTTP. Habe schätzungsweise 5 Möglichkeiten probiert und habe es noch nicht geschafft.
Nochmal kurz: Ich will einen Binästring(gz) von einem Win2000 Server mit PHP 4.2.2 und Apache 2 auf einen Linzx-Server an ein PHP-Script übertragen. Ich habe auf dem Windowsrechner sogar inzwischen das cURL-Modul von PHP ans Laufen gebracht, funktioniert prima mit normalen POST-Daten, aber sobald ich es mit einer Datei probiere, klappt es nicht richtig. Das ganze ist wieder höchst seltsam, denn das Problem hat jetzt nichts direkt mit den binärdaten zu tun, nur dass das Senden von binären Daten in php_curl nur als Array funktioniert:

$file = "test.txt";
$formvars["upfile"] = "@$file";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https:/server.de/test.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $formvars);
echo curl_exec ($ch);
curl_close ($ch);

Das funktioniert so prima, bis auf die Kleinigkeit, dass der Variable "upfile" irgendwelche komischen Zeichen angehängt werden:

[_FILES] => Array
        (
            [upfileýýýý] => Array
                (
                    [name] => test.txt
                    [type] => text/plain
                    [tmp_name] => /tmp/phptZYx0a
                    [size] => 29
                )

)

Wie gesagt hat das nichts mit der Upload-Datei zu tun, sondern lediglich mit dem Array, der für Binärdaten aber meines Wissens unumgänglich ist.
Ich kann auch folgendes machen:

$formvars["test"] = "blabla";

das gibt dann auf dem Server

[_POST] => Array
        (
            [testýýýýÝÝÝÝÝÝÝÝ ] => blabla
        )

Nun, funktionieren tut dagegen

$formvars = "test=blabla";

[_POST] => Array
        (
            [test] => blabla
        )

Ich will wirklich nicht damit nerven, aber kann das denn alles sein? Egal was ich probiere, es scheitert immer an irgendwlechen total dummen Problemen! Ich weiß auch gar nicht wo ich an weitere Informationen dazu komme, oder an wen ich mich sonst wenden könnte, ich beziehe meine Informationen ausschließlich aus:

http://curl.haxx.se/libcurl/php/examples/?ex=multipartpost.php

und den Kommentaren von
http://php.benscom.com/manual/en/ref.curl.php
http://php.benscom.com/manual/en/function.curl-setopt.php

Das hat sicher was mit Windows zu tun, oder habe ich evtl bei cURL was vergessen?

Ich habe mir noch mal den TCP-Traffic angesehen, das entscheidende steht entsteht also schon vorher:

name="testýýýýÝÝÝÝÝÝÝÝ."

Hat jemand eine Idee was das jetzt schon wieder sein kann?

0001  00 90 1A 10 14 D3 00 40 F4 1E 47 68 88 64 11 00    .ü...Ó.@ô.Ghˆd..
0002  0A 1F 01 25 00 21 45 00 01 23 32 19 40 00 80 06    ...%.!E..#2.@.€.
0003  EA 9E 50 85 86 38 3E 43 C8 1C 0C 91 00 50 17 79    êžP…†8>CÈ..‘.P.y
0004  63 F8 66 86 AF A9 50 18 44 10 7E BC 00 00 50 4F    cøf†ß©P.D.~¼..PO
0005  53 54 20 2F 65 6E 76 2E 70 68 70 20 48 54 54 50    ST /env.php HTTP
0006  2F 31 2E 31 0D 0A 48 6F 73 74 3A 20 6B 6E 65 74    /1.1..Host: knet
0007  2D 73 79 73 74 65 6D 73 2E 64 65 0D 0A 50 72 61    -systems.de..Pra
0008  67 6D 61 3A 20 6E 6F 2D 63 61 63 68 65 0D 0A 41    gma: no-cache..A
0009  63 63 65 70 74 3A 20 69 6D 61 67 65 2F 67 69 66    ccept: image/gif
000A  2C 20 69 6D 61 67 65 2F 78 2D 78 62 69 74 6D 61    , image/x-xbitma
000B  70 2C 20 69 6D 61 67 65 2F 6A 70 65 67 2C 20 69    p, image/jpeg, i
000C  6D 61 67 65 2F 70 6A 70 65 67 2C 20 2A 2F 2A 0D    mage/pjpeg, */*.
000D  0A 43 6F 6E 74 65 6E 74 2D 4C 65 6E 67 74 68 3A    .Content-Length:
000E  20 31 34 30 0D 0A 45 78 70 65 63 74 3A 20 31 30     140..Expect: 10
000F  30 2D 63 6F 6E 74 69 6E 75 65 0D 0A 43 6F 6E 74    0-continue..Cont
0010  65 6E 74 2D 54 79 70 65 3A 20 6D 75 6C 74 69 70    ent-Type: multip
0011  61 72 74 2F 66 6F 72 6D 2D 64 61 74 61 3B 20 62    art/form-data; b
0012  6F 75 6E 64 61 72 79 3D 63 75 72 6C 63 5A 58 73    oundary=curlcZXs
0013  77 51 57 2F 47 67 32 31 6B 43 56 42 44 66 50 69    wQW/Gg21kCVBDfPi
0014  78 65 39 64 30 36 37 0D 0A                         xe9d067..

0001  00 90 1A 10 14 D3 00 40 F4 1E 47 68 88 64 11 00    .ü...Ó.@ô.Ghˆd..
0002  0A 1F 00 B8 00 21 45 00 00 B6 32 1A 40 00 80 06    ...¸.!E..¶2.@.€.
0003  EB 0A 50 85 86 38 3E 43 C8 1C 0C 91 00 50 17 79    ë.P…†8>CÈ..‘.P.y
0004  64 F3 66 86 AF A9 50 18 44 10 60 A8 00 00 0D 0A    dóf†ß©P.D.`¨....
0005  2D 2D 63 75 72 6C 63 5A 58 73 77 51 57 2F 47 67    --curlcZXswQW/Gg
0006  32 31 6B 43 56 42 44 66 50 69 78 65 39 64 30 36    21kCVBDfPixe9d06
0007  37 0D 0A 43 6F 6E 74 65 6E 74 2D 44 69 73 70 6F    7..Content-Dispo
0008  73 69 74 69 6F 6E 3A 20 66 6F 72 6D 2D 64 61 74    sition: form-dat
0009  61 3B 20 6E 61 6D 65 3D 22 74 65 73 74 FD FD FD    a; name="testýýý
000A  FD DD DD DD DD DD DD DD DD 0B 22 0D 0A 0D 0A 62    ýÝÝÝÝÝÝÝÝ."....b
000B  6C 61 62 6C 61 0D 0A 2D 2D 63 75 72 6C 63 5A 58    labla..--curlcZX
000C  73 77 51 57 2F 47 67 32 31 6B 43 56 42 44 66 50    swQW/Gg21kCVBDfP
000D  69 78 65 39 64 30 36 37 2D 2D 0D 0A                ixe9d067--..

Viele Grüße
Andreas

  1. Am Anfang der Ausgabe bekommme ich übrigens folgenden Header angezeigt:

    HTTP/1.1 100 Continue

    HTTP/1.1 200 OK
    Date: Tue, 08 Oct 2002 17:35:04 GMT
    Server: Apache/df-exts 1.1 (Unix) mod_ssl/2.8.11 OpenSSL/0.9.6e AuthPG/1.2 FrontPage/5.0.2.2510
    X-Powered-By: PHP/4.1.2
    Transfer-Encoding: chunked
    Content-Type: text/html

    ich habe auch mal folgende option versucht:

    curl_setopt($ch, CURLOPT_UPLOAD,1);

    dann stürzt der Apache2 aber ab mit folgender Fehlermeldung, die ich beim besten Willen nicht verstehe:

    [Tue Oct 08 16:58:30 2002] [notice] Parent: Created child process 468
    [Tue Oct 08 16:58:31 2002] [notice] Child 468: Child process is running
    [Tue Oct 08 16:58:31 2002] [notice] Child 468: Acquired the start mutex.
    [Tue Oct 08 16:58:32 2002] [notice] Child 468: Starting 250 worker threads.
    [Tue Oct 08 16:58:43 2002] [notice] Parent: child process exited with status 1073807364 -- Restarting.
    [Tue Oct 08 16:58:44 2002] [notice] Parent: Created child process 2228
    [Tue Oct 08 16:58:45 2002] [notice] Child 2228: Child process is running
    [Tue Oct 08 16:58:45 2002] [notice] Child 2228: Acquired the start mutex.
    [Tue Oct 08 16:58:45 2002] [notice] Child 2228: Starting 250 worker threads.
    [Tue Oct 08 16:58:47 2002] [notice] Parent: child process exited with status 3221225477 -- Restarting.
    [Tue Oct 08 16:58:48 2002] [notice] Parent: Created child process 1764
    [Tue Oct 08 16:58:49 2002] [notice] Child 1764: Child process is running
    [Tue Oct 08 16:58:49 2002] [notice] Child 1764: Acquired the start mutex.
    [Tue Oct 08 16:58:49 2002] [notice] Child 1764: Starting 250 worker threads.
    [Tue Oct 08 16:58:57 2002] [notice] Parent: Received shutdown signal -- Shutting down the server.
    [Tue Oct 08 16:58:58 2002] [notice] Parent: Child process exited successfully.