|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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! |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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? |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Io per il mio sito su altervista ho uno script download.php messo sotto la root e che contiene: Codice:
<?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);
?>
/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.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 18-06-2007 alle 10:25. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
L'array associativo $_SERVER è già fornito dal PHP.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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 |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Poi nello script devi specificare la directory che contiene i file da scaricare, è la parte che ho evidenziato in rosso.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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? |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Si può anche fare più generico ma è da modificare e comunque ci sarebbero questioni di sicurezza da tenere in conto.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
Si si funziona
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! |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Per quale motivo non funziona sul tuo PC? Che problemi dà?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Innanzitutto sul tuo PC Apache e PHP sono configurati correttamente? Non dovrebbe cambiare nulla tra locale e web, se non il nome dell'host.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#17 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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! |
|
|
|
|
|
#18 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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? |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#20 |
|
Member
Iscritto dal: May 2005
Città: L'aquila
Messaggi: 182
|
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! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:46.




















