Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21

Discussione: Download file protetti

  1. #11
    Codice PHP:
    <?php
    include_once("../include/config.php");
    include_once(
    "../include/auth.lib.php");

    list(
    $status$user) = auth_get_status();

        function 
    readfileheader($file) {
        
        if(
    $file) {
        
          
    header("Expires: Mon, 12 Jul 1976 06:20:00 GMT");
          
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");

          
    header("Cache-Control: no-store, no-cache, must-revalidate");
          
    header("Cache-Control: post-check=0, pre-check=0"false);

          
    header("Pragma: no-cache");
        
          
    header('Content-type: application/octet-stream');
          
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
          
    readfile($file);
          
        } 
        
      }

    switch(
    $status){
        case 
    AUTH_LOGGED:
        
    $nomefile $_GET['file'];
        
    $string './download/'.$nomefile;
        
    readfileheader($string);
        
         
    /*
        
       header("Refresh: 1;URL=./download/$file");
        */
        
    break;

    case 
    AUTH_NOT_LOGGED:
    echo 
    'You must be logged in to do that';
    header("Refresh: 3;URL=../memberslogin.php");
    break;
          
    }
    ?>
    Dici che così non possa funzionare? Meglio se faccio una pagina che mi controlla lo stato dell'utente e mi rimanda a download2.php e lì richiamo il readfile??

  2. #12
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    non posso dirtelo, dipende da cosa c'è prima o dentro i files config e auth.lib.php basta anche un ritorno a capo dopo la chiusura del tag ?> o dell'html per far smettere di funzionare il sistema.

    Potresti controllare con la funzione headers_sent per vedere se qualcosa è stato già dato in output, altrimenti un altra via potrebbe essere la redirezione a download2, ma anche li dovresti controllare che l'utente sia autorizzato, altrimenti...

    ciao

  3. #13
    Bè config si collega al database, e auth_lib contiene funzioni che mi dicono se è loggato oppure no. (Credo che questi siano output, giusto?)

    Cosa vuol dire un ritorno a capo dopo la chiusura del ?>

  4. #14
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    ti spiego un po' il meccanismo dell'header, cosi capisci cosa intendo.

    Quando tu crei una pagina html, contiene dei tag, ma in realtà la risposta che viene data dal server e che tu leggi con il tuo browser contiene un header e il corpo della pagina vera e propria che è quella che dopo l'interpretazione dei tag viene letta dal browser.

    All'interno dell'header possono essere date altre informazioni al browser tipo dirgli se utilizzare o meno la cache, se redirezionarlo ad un'altra pagina oppure dirgli che tipo di contenuto stai fornendo. (in automatico per le pagine html è text/html).

    Ora, tu con il tuo header stai dicendo di interpretare quel file come pdf.
    Se tu provassi a mettere in una pagina semplicemente readfile('nomefile.pdf'); vedresti una serie di caratteri, che in genere cominciano con qualcosa tipo (non è importante ora la sintassi precisa)
    PDF1....

    Il punto è che se prima di readfile hai stampato qualcosa sulla pagina (anche un ritorno a capo o qualsiasi altra cosa) quello che viene inviato dal browser non è più solo il pdf, ma il pdf preceduto dal tuo output, e quindi il file viene sporcato e non puoi leggerlo.


    Questo vuol dire che se hai un file php incluso con :

    1. un echo al suo interno
    2. qualsiasi carattere, anche un semplice ritorno a capo fatto con l'invio dopo la chiusura del tag ?> (questo lo puoi vedere negli editor che numerano le righe dei files,vedi la foto esempio).

    di fatto stai dando un output in stampa alla pagina sporcando il file che vuoi dare all'utente
    Immagini allegate Immagini allegate

  5. #15
    Sei stato molto chiaro, ma come faccio a risolvere il mio problema?

    apparentemente non stampo niente, (forse è il controllo se l'utente è registrato nel mio database?)

  6. #16
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    hai provato la funzione headers_sent per verificare che non mandi nulla?

    ciao

  7. #17
    Dove l'aggiungo alla mia pagina??

    Codice PHP:
    <?php
    include_once("../include/config.php");
    include_once(
    "../include/auth.lib.php");

    list(
    $status$user) = auth_get_status();

        function 
    readfileheader($file) {
        
        if(
    $file) {
        
          
    header("Expires: Mon, 12 Jul 1976 06:20:00 GMT");
          
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");

          
    header("Cache-Control: no-store, no-cache, must-revalidate");
          
    header("Cache-Control: post-check=0, pre-check=0"false);

          
    header("Pragma: no-cache");
        
          
    header('Content-type: application/octet-stream');
          
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
          
    readfile($file);
          
        } 
        
      }

    switch(
    $status){
        case 
    AUTH_LOGGED:
        
    $nomefile $_GET['file'];
        
    $string '/download/'.$nomefile;


    readfileheader($string);
        
        break;

    case 
    AUTH_NOT_LOGGED:
    echo 
    'You must be logged in to do that';
    header("Refresh: 3;URL=../memberslogin.php");
    break;
    }
    ?>

  8. #18
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Sostituisci:

    codice:
    readfileheader($string);
    con

    codice:
    if (!headers_sent($filename, $linenum)) {
       readfileheader($string); 
        exit;
    } else {
        echo "Headers già inviati nel file $filename alla linea $linenum".
        exit;
    }
    vedi che ti da quando lo lanci.

  9. #19
    Mi lancia il download del file .pdf

    Quindi prima non stampa niente, va direttamente alla funzione readfileheader

  10. #20
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    che comunque è errato?

    Hai provato anche con altri files?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.