Newsgroup: it.comp.www.php
Titolo: Random di cartelle su FS...parco

Avendo una situazione sul filesystem di questo genere:
cartella1/sotto1/file1.jpg
cartella1/sotto1/file2a.jpg
cartella1/sotto1/fileabc.jpg
cartella2b/sotto1/file4.jpg
cartella2b/sotto1/filecba.jpg
cartella3abc/sotto1/file.jpg
Quale sistema mi consigliate, che sia poco pesante, per:
1)selezionare N directory in modo casuale
2)selezionare per ogni directory N file in modo casuale
Tenete presente che le directory principali possono assere anche 200
mentre le sottodurectory hanno un nome fisso (non così i file che però
sono tutti .jpg).
Alla fine vorrei avere un array contenente N percorsi a file .jpg
pescati random.
Grazie a tutti.
-- 
Libera il tuo pensiero
www.amiciamici.com
Giornalismo dal basso sull'amicizia e sul turismo: scrivi con noi!
"Pronto Chi Bussa" il primo podcast di Parma e provincia?

 Grazie a tutti.
Se non ho capito male, i nomi delle dir / file sono "casuali", non hanno 
un suffisso-prefisso numerico, sbaglio? Se è così dovresti prima fare 
una "dir" acquisire tutti i nomi delle directory e poi estrarre a caso. 
La stessa cosa ripetuta per le sotto-directory e per la lista dei file.
Certo 200 items non sono molti ma alla fine devi interrogare il fs, 
mettere tutto in array e poi tirare a caso... Per esempio, fare una 
procedura batch che ogni tot giorni/ore/minuti fa un elenco completo del 
contenuto del fs e poi "tiri a caso" su questa lista?
	Francesco

 contenuto del fs e poi "tiri a caso" su questa lista?
Preferirei avere gli aggiornamenti istantanei nel momento del
caricamento di nuove directory.
Per ora faccio così:
-)leggo tutte le dir
B)ne prendo una a caso
-)leggo i file jpg contenuta nella sottodir
-)ne prendo uno a caso
-)ripeto N volte da (B)


 caricamento di nuove directory.
Come carichi i file su fs? Se tramite script potresti trasformare quella 
procedura batch che avevo proposto su "chiamata", dopo l'upload del 
file, in questo modo hai sempre una lista aggiornata.
	Francesco

Francesco F ha scritto:

Niente da fare.
Il processo avviene via FTP perchè, a volte sono anche 200MB per volta.
Di fatto ho un server per le sole foto e non compie altre operazioni se
non visualizzarle (mediamente 750 visite uniche a picchi di 8000 pagine
viste/24ore).
Per questo vorrei limare il superfluo.


 
Azz..niente di fatto!
Ma la procedura che stai attualmente utilizzando "ammazza" il server? E 
dov'e' il maggior spreco di risorse? PHP o I/O?
	Francesco

 
Un'altra soluzione potrebbe essere quella di demandare direttamente al 
SO la generazione della lista dei file (per esempio un find 
/root_directory) poi estrarre da questa lista n righe "a caso" 
utilizzando il php  per l'estrazione random.
Resta da verificare se è più performante un find "completo" da SO oppure 
   una serie di dir eseguite da php (ovvero la tua attuale implementazione)
	Francesco

    implementazione)
E` sicuramente piu` performante il find (non deve essere interpretato da 
PHP, non viene astratto dal fs da PHP, e` precompilato), se limitato con 
parametri giusti.
Basta farlo partire dalla directory e dirgli di cercare solo le directory:
find /var/www/sito/dati/ftp -type d
Bye.

 
Non avevo dubbi sulla performance del find da shell, resta il problema 
dell'estrazione random: dovrebbe farla via pipe da shell poichè se a 
regime ha 5000 immagini (suddivise tra n cartelle) deve sempre eseguire 
un find, catturare l'output su php, metterla in array, fare un rand 
etc...La mia perplessità era su quest'aspetto (anche se nella precedente 
mail non l'avevo scritto!): il beneficio della bash può essere 
vanificato dal parsing del risultato.
Che sia fortune la risoluzione del problema? 
http://linux.die.net/man/6/fortune
	Francesco

Francesco F ha scritto:

Sottolineo come, per ora, debba rimanere preferibile l'ottimizzazione
dello script PHP.
Es: $i++ peggiore di ++$i etc.....
A tal proposito ho letto tempo fa un post interessante.....vediamo se lo
ritrovo.


 
Va bene ottimizzare il codice ma se l'istruzione dir da PHP ha un 
inpatto nello script pari a 100 e la differenza tra un $i++ e ++$i ha 
impatto 1, io cercherei di trasformare l'elefante in un ippopotamo 
piuttosto mettere a dieta il topolino!
	Francesco

Francesco F ha scritto:

Hai ragionissimo: volevo solo dire che non ho la possibilità di usare
shell o processi in batch e l'inserimento delle foto avviene da parti di
utenti che più di usare (e di grazia) un programma FTP non possono fare.
In nottata posto lo script...datemi tempo di depurarlo delle schifezze e
dei dati "sensibili" così mi dite cosa ne pensate e magari serve a qualcuno.


 
Ma il server gira su Win o Linux? E non hai la possibilità di utilizzare 
exec? Se devi fare tutto via php, povero topolino...
	Francesco