Curl e subir arquivo

  • Autor Autor hanschrome
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
hanschrome

hanschrome

Alfa
Programador
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
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:
Inserir CODE, HTML ou 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:

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

Pero cuando realizo la petición, me devuelve esto:
upd.webp
La línea del detalle:
Inserir CODE, HTML ou 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:
Inserir CODE, HTML ou 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 edição:
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Probá con:
PHP:
$vars = array('file'=>'@C:/wamp/www/upimg/img/1.png;type=image/png');
Para forzar el type.
 
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.
 
Voltar
Topo