php - link - Descargar de forma remota un archivo desde un enlace externo a mi servidor: la descarga se detiene prematuramente
descargar archivo pdf javascript (1)
Tengo un conjunto de páginas donde ingreso la URL de un archivo y hago que mi servidor descargue ese archivo y lo guarde en una carpeta de mi servidor. El problema es que no sé cómo descargar un archivo a mi servidor. He intentado los dos métodos siguientes, y ninguno de los dos funcionó.
Éste arroja un error sobre una secuencia abierta fallida:
$url = ''http://www.example.com/file.zip'';
$enc = urlencode($url);
$dir = "/downloads/file.zip";
$raw = file_get_contents($enc);
file_put_contents($dir, $raw);
Este funciona pero solo obtengo 18kb de un archivo de 270kb: (He intentado aumentar el tiempo de espera)
set_time_limit(0);
$url = ''http://www.eample.com/file.zip'';
$fp = fopen (''/downloads/file.zip'', ''w+'');
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_BINARYTRANSFER => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FILE => $fp,
CURLOPT_TIMEOUT => 50,
CURLOPT_USERAGENT => ''Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)''
));
$results = curl_exec($ch);
if(curl_exec($ch) === false)
{
echo ''Curl error: '' . curl_error($ch);
}
Éste arroja un error sobre una secuencia abierta fallida:
... $enc = urlencode($url); ...
Diría que no es de extrañar, porque no necesita "urlencode" esa url que ya está codificada correctamente. Tratar:
$url = ''http://www.example.com/file.zip'';
$file = "/downloads/file.zip";
$src = fopen($url, ''r'');
$dest = fopen($file, ''w'');
echo stream_copy_to_stream($src, $dest) . " bytes copied./n";
Ver stream_copy_to_stream
Docs . Si necesita establecer más elementos de HTTP como user-agent, etc., use los Documentos de Opciones de Contexto de HTTP .