En ocasiones necesitamos forzar que el navegador del usuario descargue un archivo. Un PDF, una imagen, un archivo de acceso privado… son casos en los que podemos necesitar descargar un archivo y que en usos normales, el navegador abriría él mismo. Para realizarlo, nos hemos preparado una función que hará nuestro trabajo:
Descargar archivo
Y si necesitamos comprimir el archivo antes de enviarlo al usuario, lo podemos hacer así :
Descargar ZIP
espero que sea de utilidad
Descargar archivo
function downloadFile($fileUrl){
// get file size
if (substr($fileUrl,0,4)=='http') {
$fileSize = array_change_key_case(get_headers($fileUrl, 1),CASE_LOWER);
if ( strcasecmp($fileSize[0], 'HTTP/1.1 200 OK') != 0 ) { $fileSize = $fileSize['content-length'][1]; }
else { $fileSize = $fileSize['content-length']; }
} else { $fileSize = @filesize($fileUrl); }
// download file
$ctype="application/octet-stream";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fileUrl)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fileSize);
readfile("$fileUrl");
exit();
}
//con solo llamar la funcion downloadFile('/misfiles');
No tiene mucho secreto, recogemos el tamaño del archivo a descargar, cambiamos las cabeceras que vamos a escribir para forzar la descarga del archivo y enviamos su contenido, provocando su descarga.Y si necesitamos comprimir el archivo antes de enviarlo al usuario, lo podemos hacer así :
Descargar ZIP
function downloadZipFile($fileUrl){
$fileContent = file_get_contents($fileUrl);
$compressed = gzencode($fileContent, 9);
$fileSize = mb_strlen($compressed);
// download file
$ctype="application/octet-stream";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fileUrl).".gz\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fileSize);
echo $compressed;
exit();
}
solo llamar la funcion mas carpeta o archivo
Hemos utilizado las funciones de compresión zlib de PHP, por lo que será necesario comprobar que tenemos disponibles las funciones antes de utilizarlo.espero que sea de utilidad
1
Puntos
Puntos
1887
Visitas
Visitas
0
Resp
Resp
Por pablo hace 9 años
Master