Ich möchte eine Datei mit cURL hochladen. Da cURL den vollständigen Pfad zur Datei benötigt, ist hier mein Code:
%Vor%Allerdings wird cURL auch den vollständigen Pfad der Datei im Anforderungsheader posten:
Content-Disposition: Formulardaten; name="Datei"; Dateiname="/ Pfad / zu / Datei.ext"
Aber ich möchte, dass es nur
istContent-Disposition: Formulardaten; name="Datei"; Dateiname="Datei.ext"
Also ändere ich den Code zu
%Vor%Und dann wirft cURL einfach eine Fehlermeldung
konnte die Datei "file.ext"
nicht öffnen
Kann mir bitte jemand sagen, wie es geht?
Neue Methode (seit PHP 5.5) mit CURLFile :
%Vor%verwende es fast genauso:
%Vor%Alte Methode :
Anstelle von
%Vor%Sie können cURL anweisen, einen anderen Dateinamen zu verwenden:
%Vor% Auf diese Weise wird path/to/file.ext
als Dateiquelle verwendet, aber file.ext
als Dateiname.
Sie werden jedoch einen sehr absoluten Pfad benötigen, so dass Sie wahrscheinlich eine führende /
: /path/to/file.ext
verpassen. Da Sie PHP verwenden, tun Sie immer eine realpath()
:
Oder so ähnlich.
Bitte korrigieren Sie mich, wenn ich falsch liege, aber der cURL-Upload funktioniert nicht mit dem relativen Pfad. Es braucht immer einen absoluten Pfad, likes
%Vor%Wenn also jemand den Ort beim Hochladen auf seinem Webserver auf seiner Datei verstecken will, dann verschiebe ihn entweder in einen temporären Ordner oder benutze fsockopen () (siehe Beispiel im Benutzer-Beitrag des PHP Manuals)
Sie müssen die Datei in einen temporären Bereich stellen und dann von dort auf die Datei verweisen, wenn Sie den tatsächlichen Speicherort der Datei verbergen möchten. Leider unterstützt cURL nicht nur das Senden von binären Daten, oder Sie können einfach die base64- oder binäre Datenzeichenfolge anstelle einer Dateinamenreferenz senden.