cmaster
Goto Top

Dateiupload mittels cURL

Hi,

ich habe eine PHP-Datei in der Daten auf- und zubereitet werden, die ich dann in der Variable $putString habe.
Diese Daten muss ich als Datei-Upload an einen Server übertragen.

Dafür hab ich jetzt schon einiges mit cURL rumprobiert, und verschiedene Versionen getestet, aber leider hat keine funktioniert:


Variante 1:
$putString = "Hello, world!";  
$putData = tmpfile();
fwrite($putData, $putString);
fseek($putData, 0);

$ch = curl_init();
$data = array("name" => "datei", "file" => "@{$putData}");  

curl_setopt($ch, CURLOPT_URL, "http://localhost/test.php");  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

echo curl_exec($ch);
echo curl_error($ch);
fclose($putData);
curl_close($ch);
Resultat: cURL-Fehlermeldung: failed creating formpost data


Variante 2:
$putString = "Hello, world!";  
$putData = tmpfile();
fwrite($putData, $putString);
fseek($putData, 0);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/test.php");  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($putString));
curl_setopt($ch, CURLOPT_INFILE, $putData);
curl_setopt($ch, CURLOPT_PUT, 1);

echo curl_exec($ch);
fclose($putData);
curl_close($ch);
Resultat in Datei test.php:
$_REQUEST: Array ( )$_FILES: Array ( )



Was ist an meinem Quellcode falsch bzw. wie kann ich zu meinem gewünschten Ergebnis kommen?

Vielen Dank

Gruß Stefan

Content-Key: 123357

Url: https://administrator.de/contentid/123357

Printed on: April 18, 2024 at 21:04 o'clock

Member: godlie
godlie Aug 24, 2009 at 16:00:51 (UTC)
Goto Top
Hallo,
mit dem Beispiel aus der php manuel funktionierts bei mir.
<?php

/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/

$ch = curl_init();

$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');  

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');  
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);
?>
Ich glaube das es dich beim fseek afbaut bzw. das er die daten wlche er da bekommt net ganz verarbeiten kann.
probier doch mal die datei lokal temporär zu specihern und dann einfach mit pfadangabe einzubinden und danach
wenn der upload erfolgreich war kannst sie ja löschen.
Member: cMaster
cMaster Aug 25, 2009 at 14:23:14 (UTC)
Goto Top
Hi godlie,

das mit dem tmpfile() und fseek() hab ich aus folgendem Kommentar aus'm php.net
http://www.php.net/manual/de/function.curl-setopt.php#83948

Dürfte ich Dich mal bemühen, diese Variante noch zu testen, denn mich würde interessieren, ob das so wirklich nicht geht, oder ob ich nur zu doof bin, dieses Bsp. an zu wenden?

Falls es jemand anderes auch testen möchte, ich bin für jede Rückmeldung dankbar ;)

Gruß Stefan
Member: Kuga2009
Kuga2009 Sep 23, 2009 at 17:38:12 (UTC)
Goto Top
Hi Stefan,

hatte das Problem in ähnlicher Form ebenfalls und konnte es lösen, indem ich den "realpath" für die Dateinamen verwendet habe:

Zitat von @cMaster:
(...)
"file" => "@{$putData}"
(...)

"file" => "@" . realpath($putData)

Vielleicht hilft Dir das.

Viele Grüße
Frank