Ich bekomme dieses seltsame Verhalten mit libCURL. Wenn ich versuche, eine Datei hochzuladen, indem ich "@" an den Anfang des Dateinamens anfüge (wie in der man-Seite von libCURL dokumentiert), sendet libCURL anstelle des hochzuladenden Dateiinhalts den Dateinamen selbst (mit dem @ am Anfang).
Dies wird unter Windows 2008 R2 mit xampp Version 5.6.8 ausgeführt, in dem curl kompiliert wurde (curl-Version 7.40.0).
Hier ist releant Code-Fragment:
%Vor%Dieser Code funktioniert unter Linux, aber nicht unter Windows Server 2008.
Hier sind die Formulardaten, die ich bekomme:
%Vor% Wie Sie sehen können, erhalte ich @C:\image.png
anstelle von Inhalten.
Weiß jemand, warum libCURL den Dateiinhalt nicht hochladen würde?
Aus der Dokumentation von curl-setopt
CURLOPT_POSTFIELDS Die vollständigen Daten, die in einer HTTP- "POST" -Operation gepostet werden sollen. Um eine Datei zu veröffentlichen, fügen Sie einen Dateinamen mit @ voran und verwenden Sie den vollständigen Pfad. Das Dateityp kann explizit angegeben werden, indem Sie dem Dateinamen mit folgen der Typ im Format '; type = mimetype'. Dieser Parameter kann entweder sein übergeben als eine urlencodierte Zeichenfolge wie 'para1 = val1 & amp; para2 = val2 & amp; ...' oder als ein Array mit dem Feldnamen als Schlüssel und Felddaten als Wert. Wenn Wert ist ein Array, der Content-Type-Header wird auf gesetzt Multipart / Formulardaten. Ab PHP 5.2.0 muss der Wert ein Array für Dateien sein Diese Option wird mit dem Präfix @ übergeben. Ab PHP 5.5.0 ist das @ Präfix ist veraltet und Dateien können mit CURLFile gesendet werden. Das @ Präfix kann zur sicheren Weitergabe von Werten, die mit @ beginnen, deaktiviert werden Setzen Sie die Option CURLOPT_SAFE_UPLOAD auf TRUE.
Das Verhalten hängt von der php-Version ab und das @ -Präfix ist jetzt veraltet.
Sie sollten die CurlFile-Klasse verwenden, um die CURLOPT_POSTFIELDS der curl-Anfrage wie folgt zu setzen:
%Vor%