Foros del Web » Programando para Internet » PHP »

Opción CURLOPT_FILE de CURL

Estas en el tema de Opción CURLOPT_FILE de CURL en el foro de PHP en Foros del Web. La opción CURLOPT_FILE dice: "El fichero que la transferencia guardará el resultado. Por defecto es STDOUT (la ventana del navegador)." Yo lo que quiero hacer ...
  #1 (permalink)  
Antiguo 18/03/2011, 07:41
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Opción CURLOPT_FILE de CURL

La opción CURLOPT_FILE dice: "El fichero que la transferencia guardará el resultado. Por defecto es STDOUT (la ventana del navegador)."

Yo lo que quiero hacer es desde mi página, descargar el fichero desde una web cn autenticación HTTP y devolverlo en la respuesta HTTP del usuario de mi web.

Consigo descargar el fichero no logro reenviarlo en la repsuesta como fichero. Siempre me muestra el recultado en texto.

Código PHP:
$curl curl_init();
curl_setopt($curlCURLOPT_HTTPAUTHCURLAUTH_BASIC ) ;
curl_setopt($curlCURLOPT_USERPWD"user:pass");
curl_setopt($curlCURLOPT_SSLVERSION,3);
curl_setopt($curlCURLOPT_SSL_VERIFYPEERFALSE);
curl_setopt($curlCURLOPT_RETURNTRANSFERfalse);
curl_setopt($curlCURLOPT_FILESTDOUT);
curl_setopt($curlCURLOPT_URL$url);
curl_exec($curl);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
curl_close($curl); 
Si lo hago guardándolo primero en disco y devolviendo ese fichero no hay problemas.
  #2 (permalink)  
Antiguo 18/03/2011, 10:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Opción CURLOPT_FILE de CURL

Usa RETURNTRANSFER para devolver el resultado en una variable y haz echo de esa variable.

Saludos.
  #3 (permalink)  
Antiguo 18/03/2011, 12:24
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Opción CURLOPT_FILE de CURL

Con eso muestro el fichero o lo descargo? Yo lo que quiero es descargarlo como fichero, no mostrarlo.
  #4 (permalink)  
Antiguo 18/03/2011, 13:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Opción CURLOPT_FILE de CURL

Con eso lo asigna a una variable cuando haces curl_exec(). y ya posteriormente puedes hacer un echo a la variable.

Saludos.
  #5 (permalink)  
Antiguo 21/03/2011, 08:43
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Opción CURLOPT_FILE de CURL

Con este código consigo lo que quiero. Que es cargar el ficheor desde la web remota y enviarlo como respuesta en mi web.

Código PHP:
$GLOBALS['array_headers']=array();
    
function 
readHeader($curl$header)
{
    
$GLOBALS['array_headers'][]=$header;
    return 
strlen($header); 
}

$curl curl_init();
curl_setopt($curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC ) ;
curl_setopt($curl,CURLOPT_USERPWD,"user:pass");
curl_setopt($curl,CURLOPT_SSLVERSION,3);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($curl,CURLOPT_HEADERFUNCTION,"readHeader");
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_FILE);
curl_setopt($curl,CURLOPT_URL,$url);
$resultado=curl_exec($curl);
$curl_close($curl); 

foreach(
$GLOBALS['array_headers'] as $header)
{
    
header($header);
}
echo 
$resultado
El problema es que hay ficheros de más de 100 Mb y tardan un buen rato en descargarse de esta manera. Pero si no quiero que me pida usuario y contraseña, no veo otra manera.

Estos ficheros dónde se guardan? En memoria o en disco?
  #6 (permalink)  
Antiguo 21/03/2011, 10:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Opción CURLOPT_FILE de CURL

Se guardan en memoria ya que se asignan a una variable ($resultado).

Saludos.
  #7 (permalink)  
Antiguo 21/03/2011, 10:35
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Opción CURLOPT_FILE de CURL

Cita:
Iniciado por GatorV Ver Mensaje
Se guardan en memoria ya que se asignan a una variable ($resultado).

Saludos.
Vamos que no es la manera más adecuada para descargar los ficheros grandes.
  #8 (permalink)  
Antiguo 21/03/2011, 10:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Opción CURLOPT_FILE de CURL

Así es, no es lo mejor, pero debido a que necesitas utilizar un usuario/contraseña que no conoces es la mejor forma, otra sería descargar el archivo y dejarlo en una carpeta en tu server.

Saludos.

Etiquetas: curl
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:08.