wie man eine Datei mit Curl mit PHP hochlädt [geschlossen]

78

Ich möchte wissen, wie man Dateien mit cURL oder irgendetwas anderem in PHP hochlädt. Ich habe viele Male in Google gesucht, aber keine Ergebnisse.

Mit anderen Worten, der Benutzer sieht eine Datei-Upload-Schaltfläche in einem Formular, das Formular wird in mein PHP-Skript gepostet, und mein PHP-Skript muss es erneut in einem anderen Skript (z. B. auf einem anderen Server) veröffentlichen.

Ich habe diesen Code, um die Datei zu empfangen und hochzuladen

Code:

echo"".$_FILES['userfile']."";
$uploaddir = './';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
if ( isset($_FILES["userfile"]) ) {
    echo '<p><font color="#00FF00" size="7">Uploaded</font></p>';
    if (move_uploaded_file
($_FILES["userfile"]["tmp_name"], $uploadfile))
echo $uploadfile;
    else echo '<p><font color="#FF0000" size="7">Failed</font></p>';
}

Ich möchte, dass der Code die Datei an die Empfängerdatei sendet.

Hadidi44
quelle
5
nicht mit "ftp", ich möchte die Datei mit curl in $ _FILES ['userfile']
Hadidi44
Ähm ... was jetzt? Wohin möchten Sie es senden? Was ist Ihr Zielsystem?
Bis Helge
zur PHP-Datei (Quelle in Frage) - Zielsystem ist Linux
Hadidi44

Antworten:

150

Verwenden:

if (function_exists('curl_file_create')) { // php 5.5+
  $cFile = curl_file_create($file_name_with_full_path);
} else { // 
  $cFile = '@' . realpath($file_name_with_full_path);
}
$post = array('extra_info' => '123456','file_contents'=> $cFile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result=curl_exec ($ch);
curl_close ($ch);

Sie können auch verweisen:

http://blog.derakkilgo.com/2009/06/07/send-a-file-via-post-with-curl-and-php/

Wichtiger Hinweis für PHP 5.5+:

Jetzt sollten wir https://wiki.php.net/rfc/curl-file-upload verwenden, aber wenn Sie diesen veralteten Ansatz weiterhin verwenden möchten, müssen Sie festlegencurl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);

karthik
quelle
8
Vielleicht ist es besser, die integrierte Funktion von curl zu verwenden: php.net/manual/es/function.curl-file-create.php . Natürlich können Sie die Methode von POSTFIELDS verwenden und den vorangestellten Wert mit füllen @. Wie auch immer, der Asnwer wird aus einer benutzerdefinierten Verwendung von Curl aus einem Blog kopiert. Die richtige Antwort lautet, dass das @Zeichen es als Datei definiert, nicht als var. $ post enthält ein @filename.jpgBeispiel.
m3nda
2
@ erm3nda Das ist nur PHP 5.5+.
Jeremy Logan
9
@fiXedd Ich verwende derzeit PHP 5.6 und die Verwendung curl_file_createist erforderlich (die von Karthik bereitgestellte Lösung funktioniert nicht). Also sollte der Code auf so etwas aktualisiert werden:if function_exists('curl_file_create')) { $cFile = curl_file_create($dest); } else { $cFile = '@' . realpath($dest); }
Marek Roj
2
Wofür wird extra_info => 123456verwendet?
Aaron Gillion
1
Diese Lösung funktioniert in PHP 5.6 nicht mehr. Die Lösung besteht darin, die Datei wie folgt hinzuzufügen: new CURLFile (realpath ($ fileName));
Michał Fraś