2011-08-09 26 views
5

Estoy usando cURL para transferir archivos de imágenes de un servidor a otro usando PHP. Este es mi código cURL:Cargas múltiples de archivos con cURL

// Transfer the original image and thumbnail to our storage server 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_VERBOSE, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, 'http://' . $server_data['hostname'] . '.localhost/transfer.php'); 
curl_setopt($ch, CURLOPT_POST, true); 
$post = array(
    'upload[]' => '@' . $tmp_uploads . $filename, 
    'upload[]' => '@' . $tmp_uploads . $thumbname, 
    'salt' => 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q' 
); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
$resp = curl_exec($ch); 

Este es el código en transfer.php en el servidor estoy subiendo a:

if($_FILES && $_POST['salt'] == 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q') 
{ 
    // Save the files 
    foreach($_FILES['upload']['error'] as $key => $error) 
    { 
     if ($error == UPLOAD_ERR_OK) 
     { 
      move_uploaded_file($_FILES['upload']['tmp_name'][$key], $_FILES['upload']['name'][$key]); 
     } 
    } 
} 

Todo parece funcionar, aparte de un pequeño error de lógica. Solo se está guardando un archivo en el servidor al que me estoy transfiriendo. Esto es probablemente porque estoy llamando a ambas imágenes upload[] en mi matriz de campos de publicación, pero no sé cómo hacerlo. Estoy tratando de imitar haciendo esto:

<input type="file" name="upload[]" /> 
<input type="file" name="upload[]" /> 

¿Alguien sabe cómo puedo hacer que esto funcione? ¡Gracias!

Respuesta

0

El código en sí se ve bien, pero no sé sobre su directorio de destino move(). Está utilizando el nombre de archivo sin procesar proporcionado por el cliente (que es su secuencia de comandos curl). Está utilizando el nombre de archivo cargado original (como se especifica en su secuencia de comandos curl) como el destino del movimiento, sin sobreescribir y sin datos de ruta. Si los dos archivos cargados tienen el mismo nombre de archivo, sobrescribirá la primera imagen procesada con la que haya sido procesada en segundo lugar por PHP.

trate de poner un poco de depuración en todo el comando de desplazamiento():

if (!move_uploaded_file($_FILES['upload']['tmp_name'][$key], $_FILES['upload']['name'][$key])) { 
    echo "Unable to move $key/"; 
    echo $_FILES['upload']['tmp_name'][$key]; 
    echo ' to '; 
    echo $_FILES['upload']['name'][$key]; 
} 

(I dividir el eco en varias líneas de legibilidad).

+0

Eso no escupe nada, lo que significa que la jugada fue correcta. El directorio de destino es el mismo directorio que el script transfer.php. Esto es solo un servidor de almacenamiento, sin estructura de directorio. – Josh

+0

haga un 'print_r ($ _ FILES)' y vea exactamente lo que está pasando para los nombres de archivo y similares. Incluso si ambas partes están bajo tu control, usar nombres de archivos directamente como tú me pone nervioso. –

3

aquí es su error en la llamada rizo ...

var_dump($post) 

que está golpeando fuertemente las entradas de matriz de su gama $ post ya que las cadenas principales son idénticos ...

que este cambio

$post = array(
    'upload[0]' => '@' . $tmp_uploads . $filename, 
    'upload[1]' => '@' . $tmp_uploads . $thumbname, 
    'salt' => 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q' 
); 
+4

considera cambiar tu sal ahora que lo has publicado ... –

Cuestiones relacionadas