problema readfile e header

LostCore

Nuovo Utente
24 Apr 2005
2
0
0
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

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!