El uso de cURL para descargar un archivo zip no funciona con el código php de seguimiento

Lo que probé/estoy intentando

function download_data($target_document,$outfile_location) 
{
    log_message('info', 'Downloading every page in data set');

    do 
    {   

       $ch = curl_init ($target_document.'apiKey=' . self::$API_KEY);       
       $fp = fopen($outfile_location . "data.zip", "w");

        curl_setopt($ch, CURLOPT_FILE, $fp);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_exec($ch);
        $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        fclose($fp);

        $this->http_status = $http_status;

            if($this->http_status != 200) 
            {
                $this->data_retry_count += 1;   
            }

    } while($this->http_status != 200 && $this->data_retry_count < $this->retry_max);

        if($this->http_status == 200) 
        {

            return;

        }

}

Usando el código anterior, todo funciona sin problemas, excepto que obtengo un archivo comprimido (zip) sin contenido. Si descargo el documento de destino en el navegador, funciona. ¿Tengo que hacer algo diferente con curl para obtener el contenido del archivo zip?

Ignore el $this variables ya que esta función es parte de una clase y esas variables representan la variable contenida dentro de la clase.

preguntado el 04 de julio de 12 a las 03:07

¿Comprobó que el archivo de salida se abrió correctamente? -

2 Respuestas

Esto debería solucionar tu problema.

Esto descargará archivos ZIP sin que estén vacíos, fue la solución a mi problema no hace mucho tiempo.

También debes considerar echo curl_error($ch); para depurar.

<?php 
function get_file1($file, $local_path, $newfilename) { 
    $err_msg = ''; 
    echo "<br>Attempting message download for $file<br>"; 
    $out = fopen($newfilename, 'wb'); 
    if ($out == FALSE){ 
      print "File not opened<br>"; 
      exit; 
    } 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_FILE, $out); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_URL, $file); 

    curl_exec($ch); 
    echo "<br>Error is : ".curl_error ( $ch); 

    curl_close($ch); 
    //fclose($handle); 

}
?>

Fuente: http://www.weberdev.com/get_example.php3?ExampleID=4009

Respondido 04 Jul 12, 04:07

suena como si estuviera tratando de hacer un tipo de función FTP o wget con curl. No estoy seguro de qué tan bien funciona con curl. Alternativas:

Para ftp en PHP:

http://php.net/manual/en/book.ftp.php

para wget como funcionalidad con PHP, puede probar

file_get_contents ($ url)

http://php.net/manual/en/function.file-get-contents.php

Respondido 04 Jul 12, 03:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.