POST-Übergabe des Array $_FILES mit CURL

  • Themenstarter Themenstarter frank burian
  • Beginndatum Beginndatum
F

frank burian

Hallo,

ich hole eine Seite über CURL und diese kommt per POST über ein Formular.

Das Array $_POST kommt einwandfrei rüber. Aber das Array $_FILES (wenn ein Dateiupload im FORM vorkommt) haut nicht ganz hin.

Hat jemand eine Ahnung wie ich den originalen Dateinamen mit bekomme? Ich bekomme immer nur ein temporären Dateiname, wo eigentlich der originale Dateiname stehen sollte.

das Array $_FILES müsste so aussehen:
Code:
Array ( [myupload] => Array ( [name] => derDateiname.zip  [type] => application/octet-stream [tmp_name] => /tmp/php7fovgs [error] => 0 [size] => 4400 ) )

es sieht aber LEIDER so aus:

Code:
Array ( [myupload] => Array ( [name] => phpcJK5gM  [type] => application/octet-stream [tmp_name] => /tmp/php7fovgs [error] => 0 [size] => 4400 ) )

hat jemand eine ahnung. mein code sieht so aus:

PHP:
...
           if ($this->responseMethod == 'POST')
            {
                $postfields = array();
                foreach ($_POST as $key => $value)
                    $postfields[$key] = urlencode($value);
                if (!empty($_FILES))
                {
                    foreach ($_FILES as $key => $value)
                        if ((trim($value['name'])!="") && (trim($value['tmp_name'])!=""))
                        {
                            $tmp_name = realpath($value['tmp_name']);
                            $postfields[$key] = "@$tmp_name";
                        }
                }
                curl_setopt($cUrl, CURLOPT_POSTFIELDS, $postfields);
            }
...

Hoffentlich kann mir jemand weiterhelfen. Danke!
 
wenn ich das mache, bekomm ich diese Fehlermeldung "failed creating formpost data".

hab oft gesehen das es welche so gemacht habe, aber das funktioniert ja nicht. wie auch, denn ein Upload wird ja als temporäre datei auf dem server gespeichert. wenn ich nur den originalen dateinamen angebe, ist es ja kein wunder...das er das File dann nicht findet.

Lösung? thx
 
Hmm ich hatte mich um cURL File Posts nie beschäftigt Aber ich denke du musst die Datei vorher umbennen.. am besten verschieben aus dem tmp verzeichniss raus... und dann sie dem Post anhängen.
 
da ist mir die gefahr zu gross, das mehrere user gleichzeitig eine datei mit dem gleichen namen hochladen. das ist keine lösung.

das muss doch machbar sein?
 
Ich kenne es so das aus timestamp und username ein md5 Hash erstellt wird und der als Name für das File benutzt wird. Spricht da was dagegen?
 
aber ich weiß nicht was mir das bringen soll. ich will in $_FILES den originalen Dateinamen haben, mehr nicht.
 
Ok, ich würde dir zwar raten dir ne File-Tabelle in deiner DB anzulegen, die Namen der Files in die Tabelle einzutragen und den Files als Namen die Zeilen-ID zu geben, du kannst die Dateinamen ja beim Download wieder anfügen. Aber letztenendes ist es deine Entscheidung und vielleicht kommt ja noch die Richtige Lösung für dich...
 
Das geht nicht ohne das du die Datei umbenennst...

Was du machen kannst ist den Dateinamen nochmal gesondert zu übertragen wenn du einfluss auf die 2. Seite hast.

Wenn du einen Brief bekommst, ihn aufmachst, und in einen neuen umschlag steckst. Kann auch keiner mehr sagen was auf dem ersten umschlag stand.
 
ich habe keinen einfluss auf die 2 seite, sprich auf die seite die angezeigt wird! dem entsprechend hilft mir die datenbank lösung auch nicht weiter.

hier hatte das auch jemand mal gefragt, aber eine lösung hat er auch nicht bekomm. aber
möglich muss es sein, sonst wäre es ein riesen bug!

http://curl.haxx.se/mail/curlphp-2007-03/0033.html
 
Zurück