• 2018-12-01 121211
  • 2018-12-02 144318
  • 2018-11-24 163752
  • 2018-11-24 163743
  • 2018-12-05 175943
  • 2018-11-28 151134
  • 2018-11-22 145009
  • 2018-11-16 084045

Script

Qui puoi ricercare e trovare alcuni Script che ho voluto pubblicare per condividerli con voi.

Forzare il Download di un file




In molti casi, quando facciamo un comune link ad un file, questo viene aperto direttamente dal browser, oppure utilizzando il programma predefinito per quel dato file.

e' il caso ad esempio di file txt o jpg (aperti direttamente all'interno del browser), oppure di file doc o pdf (che vengono aperti automaticamente dall'applicazione predefinita (Microsoft Word o Acrobat Reader).

Ci potremmo però trovare nella necessità di forzare il download di un dato file sul PC piuttosto che permettere di visualizzarlo direttamente.

La realizzazione di uno script del genere è piuttosto semplice, e ci viene incontro la funzione header.
La funzione header() permette di inviare una determinata intestazione utilizzata come parametro della funzione stessa. Essa cpermette di creare istruzioni atte a modificare gli headers di una determinata pagina Web; un esempio classico utilizzato spesso dai programmatori PHP è quello del rindirizzamento, ma questa funzione può essere impiegata per numerosi altri scopi.

Quando vogliamo forzare il download dobbiamo mandare il contenuto del file direttamente agli Header specificando il contenuto MIME(cioè lo standar di internet, ogni file ha il suo gif,zip txt).
Nell'header ci devono essere:

  • Content-type (tipo di documento)
  • Content-Disposition (destinazione del contenuto)
  • Content-Description (descrizione del contenuto )
  • Content-Length (lunghezza del contenuto)

Vediamo ora un esempio pratico, realizzando una piccola funzione:

/*
ForceDownload('/percorsodelsile/file.txt','fnomefile.txt');
*/

function ForceDownload($path,$name)
{
    header('Pragma: private');
    header('Cache-control: private, must-revalidate');
    header("Content-Type: application/octet-stream");
    header("Content-Length: " .(string)(filesize($path)) );
    header('Content-Disposition: attachment; filename="'.($name).'"');
    readfile($path);
    exit;
}

 

Sul sito di HTML.IT ho trovato il seguente listato, dove sono stati elencati alcuni possibili utilizzi della funzione header():

# modifica dell'header relativo allo status della richiesta,
# utile nel caso in cui si debbano risolvere problematiche
# relative alla riscrittura delle URL
header('HTTP/1.1 200 OK');

# header per le richieste non soddisfatte dal server
header('HTTP/1.1 404 Not Found');

# header prodotto dall'impossibilità di accedere alla
# risorsa richiesta
header('HTTP/1.1 403 Forbidden');

# header prodotto per segnalare una risorsa
# spostata in modo permanente su un percorso diverso
# da quello utilizzato per definire la richiesta
header('HTTP/1.1 301 Moved Permanently');

# header prodotto nel caso di malfunzionamenti del server
# in seguito al tentativo di soddisfare una richiesta
header('HTTP/1.1 500 Internal Server Error');

# rindirizzamento della richiesta su un percorso diverso
# da quello specificato
header('Location: http://www.miosito.it/');

# rindirizzamento della richiesta entro un periodo
# di tempo definito (delay)
header('Refresh: 5; url=http://www.miosito.it/');
echo 'Il browser verrà redirezionato entro 5 secondi';

# override del valore relativo all'header X-Powered-By
header('X-Powered-By: PHP/5.2.8');

# modifica dell'header relativo al linguaggio utilizzato
header('Content-language: en');

# modifica dell'header relativo alla data dell'ultima modifica
$time = time() - 60;
header('Last-Modified: '.g mdate('D, d M Y H:i:s', $time).' GMT');

# header per segnalare l'assenza di modifiche
header('HTTP/1.1 304 Not Modified');

# impostazione del Content-Length per operazioni di caching
header('Content-Length: 168');

# header per il download
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.zip"');
header('Content-Transfer-Encoding: binary');

# scaricamento di un file
readfile('file.zip');

# disabilitazione della cache per il documento corrente
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); # Date in the past
header('Pragma: no-cache');

# impostazione del content type per
# le varie tipologie di estensioni:
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain');
header('Content-Type: image/jpeg');
header('Content-Type: application/zip');
header('Content-Type: application/pdf');
header('Content-Type: audio/mpeg');
header('Content-Type: application/x-shockwave-flash');

# richiesta di autenticazione
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Accesso Riservato"');
echo 'Inserire i dati per il login';