Php carga la imagen al servidor remoto con cURL

Me gustaría usar cURL en php para subir una imagen a un servidor de imágenes remoto. Tengo este código, está en el servidor web:

y:

 if (isset($_FILES['uploadfile']) ) { $filename = $_FILES['uploadfile']['tmp_name']; $handle = fopen($filename, "r"); $data = fread($handle, filesize($filename)); $POST_DATA = array( 'somevar' => $somevar, 'uploadfile' => $data ); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://1.1.1.1/receiver.php'); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $POST_DATA); $response = curl_exec($curl); curl_close ($curl); echo $response; } 

En el servidor de imágenes tengo una carga de imágenes que maneja el archivo php, que funcionó muy bien en localhost, pero me gustaría usarlo en el servidor remoto. Así es como manejé el archivo de imagen cargado en el receptor.php:

 move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file) 

Quiero pasar directamente el archivo de imagen a la secuencia de comandos del servidor remoto, así que no necesito volver a escribir todo el script de carga. Intenté publicar el nombre, el tipo y el tamaño de la imagen como variables de publicación, pero no obtuve el [‘tmp_name’] porque no está en el localhost.

¿Como puedo resolver esto? ¡Gracias chicos por cualquier ayuda!

Aquí hay una posible solución;

  • Maneje la carga en su servidor web y mueva el archivo cargado a una ubicación temporal local
  • A continuación, realice una solicitud POST de curl al servidor remoto y cuéntele el nombre y los datos del archivo cargado; como cadena base64_encoded
  • La secuencia de comandos del servidor remoto recibe la carga como una publicación http estándar
  • Todo lo que tiene que hacer ahora es decodificar los datos del archivo, guardarlo como el nombre del archivo especificado

Entonces, así es como se ve la solución:

Lo siento, no probé esto, pero debería funcionar.

index.php

 < ?php // Handle upload if(isset($_POST["submit"])) { // Move uploaded file to a temp location $uploadDir = '/var/www/uploads/'; $uploadFile = $uploadDir . basename($_FILES['userfile']['name']); if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile)) { // Prepare remote upload data $uploadRequest = array( 'fileName' => basename($uploadFile), 'fileData' => base64_encode(file_get_contents($uploadFile)) ); // Execute remote upload $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://1.1.1.1/receiver.php'); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $uploadRequest); $response = curl_exec($curl); curl_close($curl); echo $response; // Now delete local temp file unlink($uploadFile); } else { echo "Possible file upload attack!\n"; } } ?>  
Send this file:

Luego, en el receptor.php , puede hacer lo siguiente:

 // Handle remote upload if (isset($_POST['fileName']) && $_POST['fileData']) { // Save uploaded file $uploadDir = '/path/to/save/'; file_put_contents( $uploadDir. $_POST['fileName'], base64_decode($_POST['fileData']) ); // Done echo "Success"; }