Ciao a tutti, vi spiego il mio problema:
Ho due script, uno index.php e l'altro download.php. Il primo ha il compito di mettere inviare al secondo il link di un file, mentre il secondo si occupa di loggare alcune informazioni e scaricare il file con gli header.
Tutto funziona bene, tranne per il fatto che mentre il client sta scaricando il file, per lui è impossibile navigare in altre pagine dello stesso sito, perché si bloccano nel caricamento, senza restituire alcun errore. Non appena il download termina (perché è stato completato o perché è stato interrotto) le pagine tornano visibili.
Come mai?
Vi allego il mio download.php
Grazie mille per le eventuali risposte!
Ho due script, uno index.php e l'altro download.php. Il primo ha il compito di mettere inviare al secondo il link di un file, mentre il secondo si occupa di loggare alcune informazioni e scaricare il file con gli header.
Tutto funziona bene, tranne per il fatto che mentre il client sta scaricando il file, per lui è impossibile navigare in altre pagine dello stesso sito, perché si bloccano nel caricamento, senza restituire alcun errore. Non appena il download termina (perché è stato completato o perché è stato interrotto) le pagine tornano visibili.
Come mai?
Vi allego il mio download.php
Codice:
<?php
session_start();
if(!isset($_SESSION['user_logged'])){
header("Location: login.php");
die();
}
include("includes/config.inc.php");
include("includes/getip.inc.php");
$conn = db_connect($db_host,$db_user,$db_password,$db_name);
$file = $_GET['file']; //il nome del file
$ext = $_GET['ext']; //l'estensione del file
$size = filesize($dir.$file);
switch($ext)
{
case "exe": $ctype="application/octet-stream";
break;
case "pdf": $ctype="application/pdf";
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 "jpe": case "jpeg":
case "jpg": $ctype="image/jpg";
break;
default: $ctype="application/force-download";
}
//Loggo le informazioni
$username = $_SESSION['username'];
$ip = getIp();
$data = date("d/m/Y H:i:s");
$filename = $file;
$query = "INSERT INTO ".$download_table." (username, ip, data, filename) VALUES ('$username', '$ip', '$data', '$filename')";
$result = mysql_query($query,$conn);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
//Faccio scaricare il file
header("Pragma: public");
//header("Expires: 0");
header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
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=".$file);
//header("Content-Description: File Transfer");
//header("Accept-Ranges: bytes");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $size");
set_time_limit(0);
@readfile($abs_dir.$file) OR die("<html><body OnLoad=\"javascript: alert('No file found');history.back();\" bgcolor=\"#F0F0F0\"></body></html>");;
exit;
?>
Grazie mille per le eventuali risposte!