2010-06-28 27 views
23

No estoy preguntando sobre la carga de un archivo de un navegador a un script php, hay muchos tutoriales sobre eso. Estoy preguntando sobre esto:Subir archivo con php a otro servidor php

Tengo un script php que ha aceptado un archivo del usuario, y el archivo está actualmente en el disco duro del servidor 1. Quiero subir el archivo del servidor 1 a un php secuencia de comandos en el servidor 2, utilizando el protocolo de publicación Http regular, por lo que la secuencia de comandos php en el servidor 2 se puede escribir como un controlador de carga de archivos estándar.

No puedo encontrar ningún tutorial en Internet, porque todos hablan de navegador-> servidor1. Los tutoriales sobre php upload hablan de ftp, pero no quiero usar ese protocolo.

Por favor ayuda?

Respuesta

30

Puede usar CURL para esto. Algo como esto debería hacerlo.

$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); 

A continuación, puede manejar la parte del servidor2 como una carga de archivos normal. Consulte curl_setopt() para obtener más información sobre esas opciones.

+0

Gracias, funciona inmediatamente :-) – Tominator

+1

Lo necesitaba de nuevo para otro proyecto, e hice un error en mi nuevo código que era tan sutil que tuve que publicarlo aquí: es _muy_ importante que el CURLOPT_POST, verdadero ¡ANTES de los POSTFIELDS cuando está configurado en una matriz! – Tominator

9

Puede usar SOAP para enviar el archivo de un servidor a otro.

Recepción de servidor:

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

servidor de envío:

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

Hehe, uno más para la originalidad :-) – Tominator

+4

Escribí esto hace años, todavía era bastante nuevo. Ahora me estremezco de horror al sugerir esto. Usa la respuesta aceptada. – bkulyk

+0

No me preocupo, no lo usé, pero fue original como dije :-) – Tominator

2

Se necesitan dos secuencias de comandos.

Primer script que emulará en cierto modo el comportamiento del navegador, tomará un archivo y lo enviará al script de segundos, que lo manejará igual que el script de carga de archivos normal.

Supongo que tiene que usar "http_post_fields" para la primera secuencia de comandos, parece que maneja los archivos. http://us2.php.net/manual/en/function.http-post-fields.php

Buena suerte.

Cuestiones relacionadas