Visualizzazione dei risultati da 1 a 5 su 5

Discussione: file download

  1. #1

    file download

    .....
    if(!file_exists($server_base_path . $_POST['video'])) {
    echo "invalid file!";
    exit;
    }

    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=".$_POST['video']);
    header("Content-Length: " . filesize($server_base_path . $_POST['video']));
    readfile($server_base_path . $_POST['video']);
    ...........

    uso questo codice per effettuare il file download, di contenuti sul server..
    tutto funziona.

    Ma mi chiedo una cosa:
    è possibile che per download di file grossi (500MB) questo script vada a sovraccaricare
    il processo php sul server?

    lo dico perchè avendo provato a lanciare questo script e quindi il download di un file
    in seguito, aprendo una nuova istanza del browser, la risposta dallo stesso server resta rallentata... e non sono problemi di larghezza di band ain download, perchè ho 2Mbit e il download viaggia a 20-30KB/s.....


    pareri?

    grazie ciao

  2. #2

    Re: file download

    Originariamente inviato da webalboran
    .....
    if(!file_exists($server_base_path . $_POST['video'])) {
    echo "invalid file!";
    exit;
    }

    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=".$_POST['video']);
    header("Content-Length: " . filesize($server_base_path . $_POST['video']));
    readfile($server_base_path . $_POST['video']);
    ...........

    uso questo codice per effettuare il file download, di contenuti sul server..
    tutto funziona.
    Così come lo hai postato, è un codice che apre una voragine di sicurezza poichè permette di scaricare qualsiasi file accessibile allo script PHP, inclusi eventuali file di configurazione con dati di accesso al DB, etc.

    Originariamente inviato da webalboran
    è possibile che per download di file grossi (500MB) questo script vada a sovraccaricare
    il processo php sul server?
    Per file di quelle dimensioni sarebbe opportuno evitare l'utilizzo del PHP o implementare direttamente in codice PHP la funzione readfile().

  3. #3
    x la sicurezza lo so... a monte ci sono una serie di controlli che bloccano l'accesso a queste righe....

    x "implementare in codice php la funzione readfile" , intendi fare l'override della funzione creandone una custom?

  4. #4
    Originariamente inviato da webalboran
    x "implementare in codice php la funzione readfile" , intendi fare l'override della funzione creandone una custom?
    Creare un codice PHP che fa la stessa cosa ma in modo più efficiente.

    In passato sono stati fatti vari test sia sulla memoria richiesta da readfile() che sul carico della CPU. Implementare la cosa con fopen() etc. risulta più veloce e meno esoso in termini di risorse.

  5. #5
    allora forse cosi va meglio:
    $file = $server_base_path . $file_zip;

    //un paio di controlli per la sicurezza ...
    if(!isLogged()){die("");}
    if(findexts($file)!="zip"){die("");}

    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=".$file);
    header("Content-Length: " . filesize($file));

    //open the file
    $fp = fopen($file, 'rb');
    fseek($fp, 0);

    //start buffered download
    while(!feof($fp))
    {
    //reset time limit for big files
    set_time_limit(0);
    print(fread($fp, 1024*8));
    flush();
    ob_flush();
    }

    fclose($fp);

    Cosi meglio? O è ancor amigliorabile?

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.