Ti sei perso il VI Convegno gt? Forse puoi rimediare... www.convegnogt.it X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql > Funzioni di PHP
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 11-03-09, 22:42   #1 (permalink)
ModSenior
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,703
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
[File e Cartelle] readfile();

PHP 4, 5
Sintassi: int readfile ( string $file [,bool $include_path=false [, resource $context ]] )

Readfile è una funzione di PHP che serve ad inviare un file come output (download da browser) sfruttando gli opportuni header.
La funzione restituisce il numero di byte relativi al file puntato ($file). In caso di errore nella lettura del file restituirà invece FALSE.

Vari esempi di utilizzo sono presenti sul sito di php.net, quì.
Ne riporto uno, il più semplice, che utilizza dei normalissimi header di output transfer, presente nella pagina sopra lincata:
Codice PHP:
<?php
$file 
'monkey.gif';

if (
file_exists($file)) {
    
header('Content-Description: File Transfer');
    
header('Content-Type: application/octet-stream');
    
header('Content-Disposition: attachment; filename='.basename($file));
    
header('Content-Transfer-Encoding: binary');
    
header('Expires: 0');
    
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    
header('Pragma: public');
    
header('Content-Length: ' filesize($file));
    
ob_clean();
    
flush();
    
readfile($file);
    exit;
}
?>
E' importante avere gli adeguati permessi di lettura sul file puntato dalla funzione.

Opzionalmente è possibile ricercare il file all'interno della include_path stabilita impostandola su TRUE.

Con la risorsa $context è possibile richiamare una funzione di flusso (Stream Functions).
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 11-11-09, 20:39   #2 (permalink)
User Newbie
 
Data di registrazione: Nov 2009
Messaggi: 3
Ciao, ho seguito la vostra guida per scaricare i file con php.
E' stata molto utile, pero ho un problema: quando scarico un file .doc per esempio e vado ad aprirlo è vuoto, e dice che è di sola lettura.

Ultima modifica di Thedarkita : 11-11-09 20:55. Motivo: Maiuscole
nicolanapo non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 11-11-09, 20:56   #3 (permalink)
Moderatore
 
L'avatar di Thedarkita
 
Data di registrazione: Aug 2006
Ubicazione: Messina
Messaggi: 6,203
Invia un messaggio tramite Skype a Thedarkita
Ciao nicolanapo, fai attenzione alla punteggiatura e alle maiuscole...
Prova ad impostare i permessi a 777 al file richiamato dalla funzione readfile.
Thedarkita non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 11-11-09, 21:45   #4 (permalink)
User Newbie
 
Data di registrazione: Nov 2009
Messaggi: 3
Ho provato a impostare i permessi ma niente.
Il codice l'ho copiato dalla guida quindi per la punteggiatura credo stia bene.
ho effettuato una modifica, ho messo nel file downloadit.php due righe all'inizio e cioe:
$nome_file=$_GET['nome_file'];
$dimensioni_file=$_GET['dimensioni_file'];

perche quando mi elencava i file e cliccavo per scaricarli mi scaricava il file downloadit.php stesso. spero di essere stato chiaro.
nicolanapo non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 11-11-09, 22:19   #5 (permalink)
ModSenior
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,703
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Ciao nicolanapo e benvenuto nel Forum GT.

Io ho appena testato con un file .doc e funziona regolarmente.

Direi che dovresti verificare il percorso del file che viene passato agli header e soprattutto che il file in remoto non sia per caso vuoto ed in sola lettura.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 12-11-09, 13:07   #6 (permalink)
User Newbie
 
Data di registrazione: Nov 2009
Messaggi: 3
Ciao, le uniche modifiche che ho effettuato sono state cambiare il nome della directory da docs a quella che uso, e mettere nel file downloadit.php queste due righe:
$nome_file=$_GET['nome_file'];
$dimensioni_file=$_GET['dimensioni_file'];

Il file remoto non è vuoto e non è in sola lettura...

Ultima modifica di Leonov : 15-11-09 18:59. Motivo: Maiuscole.
nicolanapo non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 04-03-10, 12:36   #7 (permalink)
User Newbie
 
Data di registrazione: Mar 2010
Messaggi: 1
Io ho un problema simile, ossia io mi prendo il mio bel file da scaricare, nella pagina iniziale, lo passo a download.php, che me lo scarica con il suo nome, il problema è che mi scarica solamente pochi byte 200/300 del file e pertanto risulta corrotto, dove sbaglio
fackie76 non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 01-02-12, 12:01   #8 (permalink)
User
 
L'avatar di antoniog2
 
Data di registrazione: Feb 2011
Ubicazione: Pietrasanta - Lucca - ITALY
Messaggi: 259
Invia un messaggio tramite MSN a antoniog2 Invia un messaggio tramite Skype a antoniog2
Quote:
Thedarkita Visualizza il messaggio
Ciao nicolanapo, fai attenzione alla punteggiatura e alle maiuscole...
Prova ad impostare i permessi a 777 al file richiamato dalla funzione readfile.
Se io lo metto dentro una cartella devo dare i permessi chmod 777 anche alla cartella?
__________________
Negozio AG Promozioni
antoniog2 non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 01-02-12, 12:11   #9 (permalink)
User
 
L'avatar di antoniog2
 
Data di registrazione: Feb 2011
Ubicazione: Pietrasanta - Lucca - ITALY
Messaggi: 259
Invia un messaggio tramite MSN a antoniog2 Invia un messaggio tramite Skype a antoniog2
Quote:
antoniog2 Visualizza il messaggio
Se io lo metto dentro una cartella devo dare i permessi chmod 777 anche alla cartella?
Sono riuscito a fare il download con i permessi 777 anche alla cartella.
Ho impostato il file con nome scarica.php e ho inserito il file nella cartella.
scarica.php è nella root.
Ora proverò a dare alla cartella solo i permessi di lettura per vedere se ciò è funzionale alle mie necessità e sarei già ad almeno il 33% di ciò che mi interessa realizzare cioè un download di file a tempo e limitandolo a 1 solo download.
__________________
Negozio AG Promozioni
antoniog2 non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 01-02-12, 12:37   #10 (permalink)
User
 
L'avatar di antoniog2
 
Data di registrazione: Feb 2011
Ubicazione: Pietrasanta - Lucca - ITALY
Messaggi: 259
Invia un messaggio tramite MSN a antoniog2 Invia un messaggio tramite Skype a antoniog2
Ho notato che nello script c'è il seguente codice:

Codice:
...
header('Expires: 0');
...


Si imposta in secondi?
__________________
Negozio AG Promozioni
antoniog2 non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Vecchio 01-02-12, 12:59   #11 (permalink)
User
 
L'avatar di antoniog2
 
Data di registrazione: Feb 2011
Ubicazione: Pietrasanta - Lucca - ITALY
Messaggi: 259
Invia un messaggio tramite MSN a antoniog2 Invia un messaggio tramite Skype a antoniog2
Sono riuscito a modificare il file per passargli il nome del file da scaricare ma vorrei modificarlo ulteriormente per consentire solo 1 download e che tale download sia fatto entro 7 giorni dall'inoltro del link via email.
In alternativa mi accontenterei di consentire 1 solo download.
__________________
Negozio AG Promozioni
antoniog2 non in linea  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Segnalo this Post!OKNO this Post!
Rispondi citando
Rispondi


Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 01:19.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.