Curl y subir archivo

hanschrome Seguir

Alfa
Programador
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Ene 2014
Mensajes
25
Hola a todos, llevo toda la mañana intentando subir un archivo de imagen con Curl en PHP, pero no consigo enviarlo con el filetype correcto.

En un método de una clase tengo esto:
Insertar CODE, HTML o PHP:
	    $ch = curl_init();
	    curl_setopt($ch, CURLOPT_HEADER, 1);
	    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
	    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Cookie: ' . $cookie]);
	    curl_setopt($ch, CURLOPT_URL, 'http://' . $host . $path);
	    curl_setopt($ch, CURLOPT_POST, 1);
	    curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);

	    return curl_exec($ch);

La variable $vars que se puede observar en CURLOPT_POSTFIELDS contiene un array:
['file' => '@C:/wamp/www/upimg/img/1.png']
Es decir, que envía el archivo 1.png.

La petición va dirigida a un archivo llamado vars.php, que contiene esto:

Insertar CODE, HTML o PHP:
<?php
var_dump($_GET);
var_dump($_POST);
var_dump($_FILES);
?>

Pero cuando realizo la petición, me devuelve esto:
upd.jpg
La línea del detalle:
Insertar CODE, HTML o PHP:
array (size=1)
  'file' => 
    array (size=5)
      'name' => string '1.png' (length=5)
      'type' => string 'application/octet-stream' (length=24)
      'tmp_name' => string 'C:\wamp\tmp\php8A37.tmp' (length=23)
      'error' => int 0
      'size' => int 2896

Como veis me asigna un type que no es el correcto, pues debería ser 'image/png'. La imagen es un archivo png en toda regla creado con photoshop.

¿Alguien sabe por qué ocurre esto y qué debo arreglar?

Muchas gracias a todos.

---------------------Prueba posterior--------------------
He probado con este código en el vars.php:
Insertar CODE, HTML o PHP:
move_uploaded_file($_FILES['file']['tmp_name'],'1.png');

Y el archivo se guarda correctamente y es exactamente el mismo que la imagen anterior, pudiéndose visualizar.
Entonces... ¿Por qué no lo envía con el filetype correcto?
 
Última edición:

snake8d2

Gamma
Programador
Verificación en dos pasos desactivada
Desde
23 Jun 2012
Mensajes
163
Probá con:
PHP:
$vars = array('file'=>'@C:/wamp/www/upimg/img/1.png;type=image/png');
Para forzar el type.
 

hanschrome

Alfa
Programador
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Ene 2014
Mensajes
25
Probá con:
PHP:
$vars = array('file'=>'@C:/wamp/www/upimg/img/1.png;type=image/png');
Para forzar el type.

Al final lo hice con fsockopen en bruto, así podía setear todo exactamente como quería, pero probaré de ese modo, me interesa saber hacerlo de las dos maneras.
 

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba