Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    problema header e readfile

    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!

  2. #2
    Comincio a pensare che non sia possibile fare altrimenti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.