La ricerca avanzata nel file system con PHP

Author Photo
postato il 13 Agosto 2012
(5 commenti)

L'accesso al file system è una delle operazioni più comuni di qualsiasi applicazione. Anche lavorando sul Web è normale dover leggere il contenuto di una risorsa o scrivere dei contenuti in un nuovo file. In altri casi l'accesso al file system è necessario per analizzare il contenuto di alcune directory e selezionare in modo intelligente le risorse desiderate. PHP permette di eseguire facilmente operazioni di questo tipo. Trattandosi di operazioni abbastanza comuni, è normale che ogni team di lavoro, o sviluppatore, abbia già a disposizione i propri strumenti. Il rischio, in questi casi, è quello di restare eccessivamente vincolati al proprio metodo di ricerca nel file system. Usare blocchi di codice ben collaudati presenta ovvi vantaggi, ma si rischia di reinventare ogni volta la ruota.

Questo articolo introduce alcuni metodi di ricerca avanzata di files e directories, che risultano al tempo stesso più potenti e più semplici delle funzioni PHP solitamente più conosciute. Per definire meglio l'argomento, prima di procedere faremo un breve excursus delle estensioni PHP che regolano l'accesso al file system.

File System Related Extension

Le estensioni progettate per accedere al file system sono documentate qui.

Alla data del nostro articolo (agosto 2012) sono disponibili ben nove estensioni, ma di queste solamente quattro riguardano le operazioni comunemente necessarie per gestire files e directories: Direct IO, Directories, Fileinfo e Filesystem. Probabilmente possiamo stringere ancora di più il cerchio e concentrarci solamente sulle ultime tre: l'estensione Direct IO è infatti una libreria di basso livello, nata allo scopo di permettere l'accesso alle risorse attraverso codice nativo. Per questo motivo la libreria è supportata solo su Windows, e probabilmente non farà parte delle prossime versioni di PHP.

Le estensioni fondamentali di riferimento sono quindi tre: Directories permette la gestione e navigazione delle directories, senza occuparsi dell'accesso alle risorse. L'unica funzione che fa da collegamento tra le directories e le risorse è scandir(), che ritorna l'elenco di files e directories contenuti nel path specificato.

La seconda estensione, Fileinfo, si occupa di fornire informazioni sulle singole risorse. Occorre però prestare attenzione quando utilizziamo quest'estensione, soprattutto negli ambienti professionali: la libreria è sviluppata su base euristica e non sull'analisi rigorosa di specifiche standard. Ciò significa che usando le funzioni offerte da Fileinfo otteniamo generalmente dell'informazione corrette, ma non possiamo avere la certezza che tali informazioni siano fedeli nel 100% dei casi. Come sempre, tutto dipende da ciò che dobbiamo fare. Consideriamo ad esempio un ipotetico algoritmo che debba analizzare l'intero file system alla ricerca di alcune risorse specifiche. Se la nostra applicazione è molto pignola su formato di tali risorse, ovvero preferiamo scartarne una in più piuttosto che una in meno, possiamo usare l'estensione Fileinfo come filtro di primo livello (grossolano) e poi selezionare tra i risultati le risorse ci interessano, usando un filtro di secondo livello (fine).

L'ultima estensione, Filesytem, è probabilmente la più interessante ed anche la più utilizzata. Qui troviamo quasi tutte le funzioni che servono per gestire il file system. Abbiamo funzioni per gestire permessi e proprietari; copiare, rinominare e spostare files o directories; scrivere e leggere risorse ecc. E' proprio la ricchezza di questa estensione che rende difficile la conoscenza completa della libreria: è quindi normale abituarsi ad usare sempre le stesse funzioni, restando all'oscuro di alcune interessanti potenzialità di PHP. Nelle prossime pagine vedremo qualche esempio concreto di ricerca avanzata, che utilizzerà una funzione a volte poco conosciuta: la funzione glob().

Indice
  1. La ricerca avanzata nel file system con PHP
  2. La funzione glob()
  3. Conclusioni
Author Image Bio

Chi è Stefano Adriani

Laureato in Fisica. Negli ultimi vent'anni si è principalmente occupato di formazione e documentazione tecnica nell'ambito IT, ma vanta anche esperienze come sviluppatore Java e JSP, soprattutto per quanto riguarda architetture SOAP. Le sue competenze variano dal design delle interfacce di front-end (HTML5, CSS3 e jQuery) fino allo sviluppo del backend (PL/SQL), passando per il project-management e il game-design (serious games and e-learning).

Aiutaci a migliorare facendoci sapere se hai apprezzato questo articolo.