bella pillola
detto questo, però, dico la mia
non conviene, per nessun motivo, mantenere il nome del file utilizzato sul server!
Personalmente utilizzo un paio di righe di codice che mi generano un nome casualmente su un loop
Con queste poche righe di codice viene generato un nome di file causale, con relativo percorso e estensione (rappresentati da path e ext) cosi da evitare la possibilità di richiamare direttamente il file se non si vuole/non si può (vedi ad es se si sta su hosting windows) bloccare l'accesso alla directory tramite htaccesscodice:do { $name = $path . '/' . sha1(uniqid(microtime(), true)) . '.' . $ext; } while(file_exists($filename) === true);
In aggiunta, un'altra cosa che faccio per abitudine, è quella di utilizzare le sotto cartelle basate sulla prima lettera e poi sulle prime due lettere
quindi il codice diventerebbe
Questo serve per evitare un lavoro inutile quando il sistema deve accedere alla directory con i file da scaricare, cosa che si fa sentire SOPRATTUTTO quando si sta su file system di rete perché non può essere utilizzato nessun sistema di caching o simili (e se uno c'ha 50 mila file o 100 mila file ha un rallentamento maggiore rispetto ad avere sparpagliati questi file per le directory)codice:do { $random = sha1(uniqid(microtime(), true)); $name = $path . '/' . substr($random, 0, 1) . '/' . substr($random, 0, 2) . '/' . $random . '.' . $ext; while(file_exists($filename) === true); }
Altre techniche comprendono quello di utilizzare un file indice in modo da poter mantenere bilanciato il numero di file presenti nella struttura ad albero ma non è convieniente con php per due motivi:
- un eventuale accesso simultaneo in scrittura distruggerebbe il file di indice e l'uso di un database farebbe perdere il vantaggio prestazionale
- una soluzione del genere mostra i muscoli solo su ENORMI quantità di file con filesystem lenti e/o di rete



Rispondi quotando