View Full Version : download di un pdf
Salve a tutti,ho un problema!
Sto creando un sito web e nella pagina dei download ho inserito un pdf.
Il problema è che invece di effettuare il download il link che lo richiama me lo fa visualizzare nel web...
Come posso risolvere questo inconveniente?
Salve a tutti,ho un problema!
Sto creando un sito web e nella pagina dei download ho inserito un pdf.
Il problema è che invece di effettuare il download il link che lo richiama me lo fa visualizzare nel web...
Come posso risolvere questo inconveniente?Innanzitutto la visualizzazione del pdf dall'interno del browser si può disabilitare, basta aprire Acrobat Reader, Edit -> Preferences, scheda "Internet" e si smarca la voce "Display PDF in browser" (o l'equivalente in italiano, chiaramente ;) )
Cosa che peraltro consiglio vivamente, in quanto la visualizzazione del PDF nel browser può essere lenta e/o scomoda.
È anche possibile forzare il download del PDF ma è necessario: 1) modificare il mimetype sul web server oppure 2) Usare un linguaggio server-side (es. PHP) per far scaricare il PDF impostando un preciso mimetype.
Non è detto che puoi fare una delle due cose, dipende da come è fatto il tuo sito e dal tipo di hosting che usi.
Per l'hosting utilizzo altervista,come linguaggio server side utilizzo il php e se può esserti utile,dal lato client il javascript!
Capirai che chiedere ad ogni utente che visualizza il sito di disabilitare la visualizzazione di un pdf da browser è un pò oneroso,quindi ti chiederei gentilmente di spiegarmi la seconda opzione che mi hai consigliato.
Grazie!
ti chiederei gentilmente di spiegarmi la seconda opzione che mi hai consigliato.Leggi <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1229640) vecchio thread in cui avevo postato il codice per forzare il download di un file.
Ok,già ora va meglio!
Cmq ho ancora qualche dubbio!Lo script che mi hai consigliato dove devo salvarlo e come faccio a richiamare uno specifico file?
Es:
Sono nella home page e voglio richiamare un file che si chiama prova.pdf situato nella cartella download.Dove salvo lo scritp e come richiamo prova.pdf passandogli lo script?
Ok,già ora va meglio!
Cmq ho ancora qualche dubbio!Lo script che mi hai consigliato dove devo salvarlo e come faccio a richiamare uno specifico file?
Es:
Sono nella home page e voglio richiamare un file che si chiama prova.pdf situato nella cartella download.Dove salvo lo scritp e come richiamo prova.pdf passandogli lo script?Innanzitutto dipende da quanti file devi poter scaricare, perché potresti anche realizzare uno script più generico.
Io per il mio sito su altervista ho uno script download.php messo sotto la root e che contiene:
<?php
$DOCUMENT_ROOT = substr ($_SERVER['SCRIPT_FILENAME'], 0, -strlen ($_SERVER['SCRIPT_NAME']));
if (isset ($_GET['id']) && $_GET['id'] != "")
{
$basename = basename ($_GET['id']);
$filename = "${DOCUMENT_ROOT}/path_dove_ci_sono_i_file_per_download/" . $basename;
if (file_exists ($filename))
{
header ("Pragma: public");
header ("Expires: 0");
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Cache-Control: private", false);
header ("Content-Type: application/force-download");
header ("Content-Disposition: attachment; filename=\"" . $basename . "\";");
header ("Content-Description: File Transfer");
header ("Content-Transfer-Encoding: binary");
header ("Content-Length: " . filesize ($filename));
set_time_limit (0);
@readfile ($filename);
}
}
exit (0);
?>E lo script va linkato con:
/download.php?id=un_file.ext
La riga iniziale serve per ottenere il document-root, cioè la directory dove è presente la 'root' del sito. Purtroppo (a meno che ultimamente abbiano cambiato/migliorato la cosa ... dovrei verificare) su altervista la variabile $_SERVER['DOCUMENT_ROOT'] non è gestita correttamente.
Perfetto,ora va molto meglio!
Credo di aver capito...
Un'ultima cosa,ma $_SERVER['SCRIPT_FILENAME'] devo dichiarala nello script oppure è implicitamente dichiarata?
Cmq più tardi provo questa soluzione e se ho novità/miglioramenti posto qui.
Grazie ancora
Un'ultima cosa,ma $_SERVER['SCRIPT_FILENAME'] devo dichiarala nello script oppure è implicitamente dichiarata?L'array associativo $_SERVER è già fornito dal PHP.
Mi è sorto un altro dubbio in merito alle chiamate...
Io gli script php ce li ho tutti dentro una cartella chiamata script.
Ora il mio pdf si trova dentro una cartella chiamata file entrambi sono situate a partire dalla root.
Ora come faccio a richiamare il file a.pdf da una pagina che si trova nella root?
Per capirci,dovrei prima dire che lo script si trova nella cartella /script e poi dirgli che il file si trova nella cartella /file/blablabla.
Potresti gentilemente farmi questo esempio di chiamata?
Grazie ciao
Mi è sorto un altro dubbio in merito alle chiamate...
Io gli script php ce li ho tutti dentro una cartella chiamata script.
Ora il mio pdf si trova dentro una cartella chiamata file entrambi sono situate a partire dalla root.
Ora come faccio a richiamare il file a.pdf da una pagina che si trova nella root?
Per capirci,dovrei prima dire che lo script si trova nella cartella /script e poi dirgli che il file si trova nella cartella /file/blablabla.
Potresti gentilemente farmi questo esempio di chiamata?
Grazie ciaoLo script PHP che ho riportato sopra lo puoi mettere dove vuoi, nella root o in qualunque sotto directory. L'inportante che è nei link presenti nelle pagine metterai chiaramente il path giusto: /blabla/download.php?id=blabla
Poi nello script devi specificare la directory che contiene i file da scaricare, è la parte che ho evidenziato in rosso.
Scusa ma lo script non è generico?
Nel senso,gli script sono fatti per essere richiamati e utilizzati in modo generale...
Se per ogni file che devo scaricare devo scrivere il percorso dentro lo script,dovrei generare tanti script quanti sono i file da scaricare...Mi sebra un po una soluzione onerosa non credi?
Scusa ma lo script non è generico?
Nel senso,gli script sono fatti per essere richiamati e utilizzati in modo generale...
Se per ogni file che devo scaricare devo scrivere il percorso dentro lo script,dovrei generare tanti script quanti sono i file da scaricare...Mi sebra un po una soluzione onerosa non credi?No, è generico nel senso che nello script specifichi una ben precisa cartella da cui si possono scaricare i file e poi lo script lo richiami passando il parametro 'id' per indicare quale file scaricare.
Si può anche fare più generico ma è da modificare e comunque ci sarebbero questioni di sicurezza da tenere in conto.
Si si funziona :D
Lo stavo provando sul mio pc e non funzionava!Ora ho caricato tutto su altervista e funziona!
Grazie mille per i consigli.
Sono stati preziosi!
Lo stavo provando sul mio pc e non funzionava!Per quale motivo non funziona sul tuo PC? Che problemi dà?
apre una nuova finestra con l'indirizzo della chiamata nella barra,ma non mi da la finestra APRI/SALVA!
Sul web funziona invece :-)
apre una nuova finestra con l'indirizzo della chiamata nella barra,ma non mi da la finestra APRI/SALVA!
Sul web funziona invece :-)Innanzitutto sul tuo PC Apache e PHP sono configurati correttamente? Non dovrebbe cambiare nulla tra locale e web, se non il nome dell'host.
Beh con lavoro con EASY PHP (ha incorporato sia APACHE che PHP),ma configurazioni particolari non ne ho fatte!
Non so xchè non va!
Cmq l'importante è che funziona sul web!
Cmq ho già un'idea su come modificare lo script,solo che ora non ho il tempo materiale per farlo!
Devo consegnare un progetto a breve e sono un po in ritardo!
L'idea sarebbe gestirlo con le sessioni,cioè assegnare ad una variabile di sessione il path del file da scaricare (dato che nel mio caso nella cartella "file" ci sono ulteriori sottocartelle) e nello script che mi hai consigliato al posto del path gli passo la variabile di sessione...
Che ne pensi,può andare?
L'idea sarebbe gestirlo con le sessioni,cioè assegnare ad una variabile di sessione il path del file da scaricare (dato che nel mio caso nella cartella "file" ci sono ulteriori sottocartelle) e nello script che mi hai consigliato al posto del path gli passo la variabile di sessione...
Che ne pensi,può andare?Cioè tu hai più pagine di download, associate a directory diverse da cui scaricare e vuoi che a ciascuna pagina venga assegnato il path corretto?
Con le sessioni tecnicamente funzionerebbe ma se uno dalla 'home' del tuo sito apre diverse pagine in altre finestre la sessione è la stessa .....
Come ho gìà detto, lo script si può rendere anche più generico, in modo che il parametro possa accettare anche un path. La cosa più importante è che vengano fatto dei test in modo da impedire utilizzi malevoli. Poi lo puoi fare come ti pare e piace.
Potresti anche aggiungere un altro parametro es. 'd' da usare con d=1&id=file o d=2&id=file e nello script in base al valore in 'd' scegli la cartella da usare.
Ripeto: puoi farlo come ti pare, l'importante è tenere sempre in conto la sicurezza!
Si vabbè è ovvio che gli script anche con le sessioni andrebbero controllati attivati in base a determinate scelte,nel senso che se uno clicca sul link (nella pagina dei download) allora verrebbe settata la variabile di sessione!
Cmq era solo un'idea!
nel senso che se uno clicca sul link (nella pagina dei download) allora verrebbe settata la variabile di sessione!La variabile di sessione andrebbe settata quando viene richiesta la pagina che contiene i link per download, non nello script che fisicamente fa il download, chiaramente.
Ovviamente!
Nello script che fisicamente esegue il download andrebbe solo passato il valore della variabile di sessione,ossia l'indirizzo!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.