2010-06-28 8 views
23

Ich bin nicht über das Hochladen einer Datei von einem Browser ein PHP-Skript zu fragen, gibt es viele Tutorials über bereits. Ich frage nach:Hochladen Datei mit PHP zu einem anderen PHP-Server

Ich habe ein PHP-Skript, das eine Datei vom Benutzer akzeptiert hat, und die Datei befindet sich derzeit auf der Festplatte von Server 1. Ich möchte die Datei von Server 1 auf ein PHP hochladen Skript auf Server 2 unter Verwendung des normalen Http-Post-Protokolls, so dass das PHP-Skript auf Server 2 als Standard-Datei-Upload-Handler geschrieben werden kann.

Ich kann keine Anleitung im Internet finden, weil sie alle reden über Browser-> server1. Die Tutorials über PHP hochladen alle reden über ftp, aber ich möchte dieses Protokoll nicht verwenden.

Bitte helfen?

Antwort

30

Sie können CURL dafür verwenden. So etwas sollte es tun.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file' => '@/path/to/file.txt')); 
curl_setopt($ch, CURLOPT_URL, 'http://server2/upload.php'); 
curl_exec($ch); 
curl_close($ch); 

Sie können den server2-Teil dann als normalen Datei-Upload behandeln. Weitere Informationen zu diesen Optionen finden Sie unter curl_setopt().

+0

Danke, es funktioniert sofort :-) – Tominator

+1

Ich brauchte nur noch einmal für ein anderes Projekt, und ich machte einen Fehler in meinem neuen Code, der so subtil war, dass ich es hier posten musste: es ist _sehr_ wichtig, dass der CURLOPT_POST, wahr ist VOR den POSTFIELDS, wenn das auf ein Array gesetzt ist! – Tominator

9

könnten Sie SOAP verwenden, um die Datei von einem Server zum anderen zu senden.

Receiving Server:

<?php 
$server = new Soap_Server(null, array('uri'=>'somerui')); 
$server->addFunction('receiveFile'); 
function receiveFile($file) { 
    file_put_contents('somepath', base64_decode($file)); 
} 
?> 

Senden Server:

<?php 
$client = new Soap_Client(null, array('uri'=>'somerui')); 
$client->receiveFile(base64_encode(file_get_contents('somepath')); 
?> 
+0

Hehe, ein Pluspunkt für Originalität :-) – Tominator

+4

Ich schrieb das vor Jahren, ich war noch ziemlich neu. Jetzt schaudere ich vor Entsetzen, dass ich das vorgeschlagen habe. Benutze die angenommene Antwort. – bkulyk

+0

Keine Sorge, ich habe es nicht benutzt, aber es war original wie gesagt :-) – Tominator

2

Sie benötigen zwei Scripts.

erste Skript, das in Art und Weise emulieren Browser Verhalten wird, eine Datei nehmen und es auf Sekunden Skript senden, das wird behandelt sie wie normale Datei-Upload-Skript.

Meine Vermutung Sie verwenden müssen „http_post_fields“ für das erste Skript, so scheint es, Dateien zu handhaben. http://us2.php.net/manual/en/function.http-post-fields.php

Good Luck.

Verwandte Themen