- Home
- Categorie
- Coding e Sistemistica
- Coding
- come forzare il download anzichè aprire il file sul browser?
-
come forzare il download anzichè aprire il file sul browser?
vorrei forzare il download dei file, ma quando li scarico alcuni di questi sono corrotti:
.txt (LO APRE ma mi cancella il contenuto)
.mpg (LO APRE correttamente)
.mp3 (LO APRE correttamente).rtf (NON LO APRE)
.pdf (NON LO APRE).doc (LO APRE ma ci mette all'interno tantissimi segni strani, praticamente è inutilizzabile)
chiamo la pagina della funzione:
<a href="../filesharing_files/admin_download_file.php?filename=<?=$rowfile2[file]?>"><?=$rowfile2['file']?></a>
pagina funzione (admin_download_file.php) che si trova all'interno della directory (filesharing_files) anche i file da scaricare si trovano all'interno della directory (filesharing_files)
[php]
$nomefile = $_GET['filename'];// Must be fresh start
if( headers_sent() )
die('Headers Sent');// Required for some browsers
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');// Parse Info / Get Extension $fsize = filesize($nomefile); $path_parts = pathinfo($nomefile); $ext = strtolower($path_parts["extension"]); // Determine Content Type switch ($ext) { case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpeg": case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; } header("Pragma: public"); // required header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); // required for certain browsers header("Content-Type: $ctype"); header("Content-Disposition: attachment; filename=\"".basename($nomefile)."\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".$fsize); ob_clean(); flush(); readfile( $nomefile );[/php]
-
up
-
Ciao prinzart,
prova ad utilizzare semplicemente questo sistema:
[php]
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$name.'"');
readfile($_GET['filename']);
[/php]
-
ho provato anche il tuo codice ma continua a darmi file corrotti.
-
[PHP]
<?php
session_start();
include('../inc_function.php');
?><?php
$idevento = $_GET['idcorsievento'];
$idfile = $_GET['idcorsifile'];
$idlogin = $_SESSION['idlogin'];
$ip = $_SERVER['REMOTE_ADDR'];$file = $_GET['filename'];
$sql = "INSERT INTO d_corsi_file_contatore (data, ora, ip, id_login, id_corsi_file, id_corsi_evento)
VALUES (curdate(), curtime(), '$ip', '$idlogin', '$idfile', '$idevento')";
mysql_query($sql, $conn) or die (mysql_error());header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile($_GET['filename']);?>
[/PHP]
-
Attenzione alla sicurezza...
Appendendo una variabile nella barra degli indirizzi del browser, si può scaricare qualsiasi file... file php compresi!
Occorre fare opportuni controlli sulle variabili passate in GET.