Newsgroup: it.comp.www.php
Titolo: directory protetta con .htaccess e .htpasswd

Ho una directory archivio protetta con .htaccess e .htpasswd
All'interno ci sono documenti in formato pdf
Gli utenti che hanno login e password possono leggere tutti i documenti.
Gli utenti che non hanno login e passowrd, potranno leggere gli arretrati 
esclusi quelli degli ultimi sette giorni.
Come fare?
Grazie per l'aiuto

Web ha scritto:

O metti un demone nel server che gira e divide in due cartelle i file a
seconda di quanto sono arretrati. O implementi un sistema di login in
cui una volta autenticato accedi ai file protetti altrimenti essi ti
vengono preclusi. Magari con un db tipo mysql cosi' fixi i permessi
meglio. Se ti serve il codice... he he he...

 ha scritto nel messaggio 
news:1158967952.5...@h48g2000cwc.googlegroups.com...


 Grazie...
win o linx e dammi una ragione perche' dovrei perdere due orette del
mio prezioso tempo per supportare il tuo operato.

 
Impara a quotare (e tre)!
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFFQvU5sXXcRsFI+cRAss2AJ0S+nSMRNd08Ur3mssLF0Fll+w9GgCffRFa
83Ap+vryuvoZuvmcbK1zgys=
=Kplz
-----END PGP SIGNATURE-----

 ha scritto nel messaggio 
news:ef324r$9io$4...@area.cu.mi.it...

Imparato? 

 ha scritto nel messaggio 
news:1159006120....@d34g2000cwd.googlegroups.com...
Web ha scritto:


Linux..
Ragioni specifiche non ne ho,
ma se sei una ragazza ti posso portare a cena fuori,
altrimenti mangi da solo!

 Imparato? 
No, lol :P
(guarda un po' il tuo messaggio di prima... la risposta a SyNko. Non si
capisce dove inizi a parlare tu e dove ha finito lui)
Saluti,
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFFRfW5sXXcRsFI+cRAkjJAKCXj76QbXKZ7iTrqDvs5QMp4TmGzQCdHshL
dJvb8aKGth0K7lASAsbiBPo=
=115e
-----END PGP SIGNATURE-----

 capisce dove inizi a parlare tu e dove ha finito lui)
   in altre parole:
http://wiki.news.nic.it/QuotarBene
:)

 altrimenti mangi da solo!
-IMPARA A QUOTARE--IMPARA A QUOTARE--IMPARA A QUOTARE--IMPARA A
QUOTARE--IMPARA A QUOTARE--IMPARA A QUOTARE--IMPARA A QUOTARE--IMPARA A
QUOTARE-
no, sono un ragazzo disoccupato apparente, che sta cavalcando le onde e
se io so fare quello che richiedi ed ho perso del tempo per impararlo
mentre tu portavi fuori a cena delle ragazze!!  quindi o mi presenti
una delle ragazze ;) o mi paghi il codice (legalmente) o lo impari da
solo seguendo le indicazioni che io non ho neanche avuto!
a te la scelta..


E' molto più semplice di quanto tu creda:
memorizzi i dati contenuti nel files pdf in un database.
Implementi un sistema di login, poi generi i pdf utilizzando una classe
tipo ezpdf.
Così non devi nemmeno preoccuparti di andare a vedere quali pdf sono
vecchi e quali no (quando aggiungi i dati nel database registri anche
il timestamp e ogni volta che si genera un pdf cancelli anche i vecchi
record).
Ciao ;)

 ha scritto nel messaggio 
news:1159023354.4...@m7g2000cwm.googlegroups.com...

Mi conviene farti conoscere qualche ragazza.....
Perchè purtroppo, di soldi non  ne circolano..
almeno dalle mie parti...
Mi rimetto al tuo buon cuore!
P.S.
Ho quotato bene?

 ha scritto nel messaggio 
news:1159025128.8...@h48g2000cwc.googlegroups.com...



Ciao ;)
Grazie..
Sto cercando di capire cosa mi hai detto..
Puoi farmi un esempio?

 Puoi farmi un esempio?
Per favore, quota bene, altrimenti non ci capiamo.
Supponiamo che i tuoi pdf siano più o meno così:
Nome: $x
Cognome: $y
Dove $x e $y variano.
Allora tu nel db registri un record per ogni pdf inserendo il nome e il
cognome.
Fin qui ci sei?
Poi crei uno script php che legge i record del database e, su
richiesta, genera un file .pdf che li contiene (puoi usare una classe
che si chiama ezpdf, è semplicissima da usare).
E risolvi tutti i tuoi problemi.
Avevo fatto un esempio per un amico qualche giorno fa.
Lo trovi qui: 
http://www.liceoscientificolanciano.com/pdf/
Prova per capire!
Compila il modulo in alto. Php salva i dati che hai inserito e poi li
mostra nella tabella in basso. Clicca sull'ID e Ezpdf ti genera un .pdf
(che quindi non risiede nemmeno sul server!).

(che quindi non risiede nemmeno sul server!).
Forse mi sono spiegato male!
Io ho giŕ dei documenti in forato pdf
Documento1.pdf   data del documento 19/09/2006
Documento2.pdf   data del documento 20/09/2006
Documento3.pdf   data del documento 21/09/2006
Documento4.pdf   data del documento 22/09/2006
Documento5.pdf   data del documento 23/09/2006
Questi documenti sono dentro la directory archivio che č protetta con 
.htaccess e .htpasswd
L'utente autorizzato a leggere i documenti h una login ed una password..
E puň leggere tutti i documenti
L'utente 'anonimus' puň leggere solamente i documenti piů vecchi di 5 giorni 
pertanto leggerŕ solamente il file Documento1.pdf
Se anziché tenere i documenti dentro la directory archivio, carico tutti i 
files .pdf dentro una tabella di un database, la cosa potrebbe essere piů 
semplice.
Avrň pertanto 3 campi:
ID
data
nomefile
Il campo che contiene il documento in pdf, di che tipo deve essere? (Blog?)
Come caricare da php i file nel database?
Un volta che ho i files nel database come far visionare all'utente il file 
richiesto?
Grazie per la tua pazienza.

 Linux..
ti ascolto giusto perche' usi linux. Per temporeggiare puoi fare uno
sript che gira in background e ogni ora fa il check dei pdf e sposta
quelli "privati" in una cartella con il file .htpasswd di apache che
chiede la password.
devi usare un ciclo While infinito tipo:
infinito=8;
while ($infinito) {
sleep 200; /*200 dovrebbero essere i secondi che rimane fermo tu
aumentali*/
`ls -srt > lista_file`  /* salva l'autput di ls in un file ordinato per
data*/
`cat lista_file | grep ...  > file_priv` /* combina piu' comandi che
filtrano l'output tipo grep, awk, etc.. fino a che ottieni i nomi dei
file da spostare (magari usa il comando `date` per greppare sulla
data*/
list[numero_array]=$(cat file_priv);  /* qui ci vorrebbe un ciclo while
che prende ogni riga e la carica in un array con `fc` o `wc` che legge
una giga per volta con `fc -$n_riga $nome_file`*/
for $i to $totale_righe do
`mv $list[$i] destinazione/`
done
ecco fatto, questo lo avvii in background con un & dopo il nome dello
script e ti sposta i file a seconda della data che setti nella cartella
"privata". Dovrebbe funzionare a parte errori di sintassi. Sai com'e'
ho in testa troppe shell. ehe heh
ti ho regalato dieci minuti....
buona fortuna

 tipo ezpdf.
per fortuna che doveva essere semplice.
una soluzione piu' dispendiosa non la conosci?

Come fare?
Nel file .htaccess neghi l'accesso a tutti, cosi' il file puoi leggerlo
solo da PHP.
Il sistema di login, se tutto va bene, legge il PDF con readfile() dopo
aver mandato gli header giusti; se no ti manda alla pagina "registrati"
e muore.
Il link per scaricare un PDF diventa
	href="getpdf.php?pdf=nomedelpdf"
...se il nome contiene la data parsi quella, se no usi filectime(). Per
sicurezza, controlla che "nomedelpdf" sia un nome valido (via regexp).
Leonardo
-- 
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?

sicurezza, controlla che "nomedelpdf" sia un nome valido (via regexp).
Grazie per l'aiuto!

>sicurezza, controlla che "nomedelpdf" sia un nome valido (via regexp).
Be', tu vuoi passare il file PDF solo agli aventi diritto: quindi devi
sapere se il tizio e' registrato e se il file e' piu' nuovo di un tot.
Se il file PDF si chiama pdf20060913.pdf, la data sai dove prenderla -
altrimenti, filectime() (vedi manuale) ti dice come sapere la data del
file, che (attenzione!) e' la data di copia del file, forse non quella
che serve a te.
Infine, in quello script tu usi un nome costante (documento.pdf)... ma
se vai a cambiarlo, lo dovrai leggere da $_REQUEST (_GET, _POST). Ora,
se io ti passo "documento.pdf" tutto bene... ma se ti passo il nome di
un file diverso, tipo l'elenco delle password, tu me lo mandi pensando
che sia un PDF? Ovviamente no. Devi controllare che il nome passato da
me sia valido. Un modo puo' essere preg_match (di nuovo, v. manuale).


 me sia valido. Un modo puo' essere preg_match (di nuovo, v. manuale).
Ho fatto una prova.
<?php  //file index.php
$Cont_Type = 'application/force-download';  //se non inserisco questa riga, 
non carica il file DocumentiDiProva.pdf e mi dice che non può aprirlo.
$Cont_Tr_Enc = 'binary';
$filename = 'DocumentiDiProva.pdf';  //documento in pdf da leggere
$last_f = './archivio/' . $filename;  // archivio = directory protetta con 
.htaccess
header('Content-Type: ' . $Cont_Type . '; name="' . $filename . '"');
header('Content-Transfer-Encoding: ' . $Cont_Tr_Enc );
header('Content-Length: ' . filesize($last_f) );
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Connection: Close");
//qui c'è il login dell'utente...
if ( se è un utente autorizzato.) {
readfile($last_f);
exit();
}else{
echo "non puoi accedere ai documenti";
}
?>
 se, come mi hai suggerito, sostituisco readfile($last_f);
con
echo "<a href='. $last_f. '>";
non funziona, mi dice che non può aprire il file
Cosa ho sbagiato?

Cosa ho sbagiato?
Nel leggermi: io non t'ho suggerito nulla del genere... ti stavo dicendo
di stare attento se leggi il nome del file dall'input utente. "readfile"
va benissimo.
