Schreiben tempor㤲r Datei umgehen
Andreas Korthaus
- php
Hallo!
Nachdem jetzt Dank eines PHP-Updates das versenden von binären Daten über cURL funktioniert, bliebe da noch eine klitzekleine Frage, die nicht unbedingt mit cURL zu tun hat:
Kann ich auch den Binärstring direkt an die cURL-Funktion übergeben, oder muß ich erst den String in eine Datei schreiben, und den Pfad dann übergeben?
So sieht das Script aus(funktioniert):
$file = "c:/www/test.txt";
$fp = fopen($file, "w");
fputs($fp, $binary_string);
fclose($fp);
$formvars["upfile"] = "@$file";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://server.de/test.php");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $formvars);
$result = curl_exec ($ch);
curl_close ($ch);
Ginge das evtl. direkt ohne Umweg über externe Datei?
Was mich außerdem etwas stutzig macht, wieso wird der Dateipfad und nicht der Dateiname übergeben:
[_FILES] => Array
(
[upfile] => Array
(
[name] => c:/www/test.txt
[type] => text/plain
[tmp_name] => /tmp/phpmpC67k
[size] => 2675
)
)
Viel Grüße
Andreas
Halihallo Andreas
Kann ich auch den Binärstring direkt an die cURL-Funktion übergeben, oder muß ich erst den String in eine Datei schreiben, und den Pfad dann übergeben?
[...]
Ginge das evtl. direkt ohne Umweg über externe Datei?
Du übergibtst ja Formularfelder. Warum packst du die Daten nicht einfach in ein Formularfeld und sendest diese dann über CURL?
$formvars["binary_string"] = 'lkjas9i759843zjkbfadkjz7z...';
diesen kannst du ja dann über $_POST auf der anderen Seite auslesen. Oder hab ich dich misverstanden?
Was mich außerdem etwas stutzig macht, wieso wird der Dateipfad und nicht der Dateiname übergeben:
??? - Der Dateiname steht ja dort test.txt... Oder meinst du tmp_name? - Dort ist phpmpC67k der _Name_ der Datei und /tmp/ das Verzeichnis.
Viele Grüsse
Philipp
Hi!
Ginge das evtl. direkt ohne Umweg über externe Datei?
Du übergibtst ja Formularfelder. Warum packst du die Daten nicht einfach in ein Formularfeld und sendest diese dann über CURL?
$formvars["binary_string"] = 'lkjas9i759843zjkbfadkjz7z...';
Weil dann folgendes auf dem Seerver ankommt:
Array
(
[bindata] => x�í]M�Û¶�ÝûW ²zß"÷?
)
das sollten aber 7KB binäre daten sein!
diesen kannst du ja dann über $_POST auf der anderen Seite auslesen. Oder hab ich dich misverstanden?
nein, im Prinzip schon richtig, nur anscheinend überträgt cURL die Daten dann nicht mit boundary.... sondern einfach als bindata=&%"§$/&%%"...
ich könnte ndas nur mit der zuvor entwickelten methoder mit urlencode(base64($bindata)) umgehen aber wie gesagt wird dadurch der String ca.35% länger und ein paar KB mehr bedeuten eine erheblich längeren Transfer, wogegen das schreiben der Datei fast nichts kostet. Dann mache ich es halt so. Danke Dir!
Was mich außerdem etwas stutzig macht, wieso wird der Dateipfad und nicht der Dateiname übergeben:
??? - Der Dateiname steht ja dort test.txt... Oder meinst du tmp_name? - Dort ist phpmpC67k der _Name_ der Datei und /tmp/ das Verzeichnis.
in $_FILES["upfile"]["name"] steht nicht test.txt, sondern c:\www\test.txt
Aber das habe ich geklärt, genau wie das obige Problem - curl könnte anders, aber die PHP-Schnittstelle nutzt libcurl halt noch nicht komplett. Und das Modul selbst zu verändern(soll möglich sein) lasse ich dann doch lieber ;-)
Grüße
Andreas