In questo articolo, esploreremo il componente Symfony Filesystem, che fornisce metodi utili per interagire con un file system. Dopo l'installazione e la configurazione, creeremo alcuni esempi reali di come utilizzarlo.
Più spesso, dovrai interagire con un file system se hai a che fare con applicazioni PHP. Nella maggior parte dei casi, si finisce per utilizzare le funzioni PHP di base o si crea la propria classe wrapper personalizzata per ottenere la funzionalità desiderata. In ogni caso, è difficile da mantenere per un periodo di tempo più lungo. Quindi quello di cui hai bisogno è una libreria che sia ben gestita e facile da usare. È qui che entra in gioco il componente Symfony Filesystem.
Il componente Symfony Filesystem fornisce utili metodi di wrapper che rendono l'interazione con il file system un gioco da ragazzi e un'esperienza divertente. Diamo un'occhiata veloce a cosa è capace di:
In questo articolo, ti mostrerò come liberare la potenza del componente Symfony Filesystem. Come al solito, inizieremo con le istruzioni di installazione e configurazione, quindi implementeremo alcuni esempi reali per dimostrare i concetti chiave.
In questa sezione, installeremo il componente Symfony Filesystem. Suppongo che tu abbia già installato Composer nel tuo sistema poiché avremo bisogno di installare il componente Fileystem disponibile su Packagist.
Quindi vai avanti e installa il componente Filesystem usando il seguente comando.
$ compositore richiede symfony / filesystem
Questo dovrebbe aver creato un composer.json file, che dovrebbe assomigliare a questo:
"require": "symfony / filesystem": "^ 4.1"
Quindi questa è la parte di installazione, ma come si dovrebbe utilizzarla? In realtà, è solo questione di includere il autoload.php file creato da Composer nella tua applicazione, come mostrato nello snippet seguente.
In questa sezione creeremo un esempio che dimostra come utilizzare il componente Filesystem nelle applicazioni per eseguire varie operazioni sul filesystem.
Per cominciare, andiamo avanti e creare il index.php file con il seguente contenuto.
Qui, abbiamo inizializzato il
filesystem
oggetto a$ fsObject
e ha salvato la directory corrente in$ current_dir_path
. Nelle prossime sezioni, useremo$ fsObject
per eseguire diverse operazioni.Crea una nuova directory
Per prima cosa creeremo una nuova directory.
// crea una nuova directory prova $ new_dir_path = $ current_dir_path. "/ Foo"; if (! $ fsObject-> esiste ($ new_dir_path)) $ old = umask (0); $ fsObject-> mkdir ($ new_dir_path, 0775); $ fsObject-> chown ($ new_dir_path, "www-data"); $ fsObject-> chgrp ($ new_dir_path, "www-data"); umask ($ vecchio); catch (eccezione IOExceptionInterface $) echo "Errore nella creazione della directory in". $ Eccezione-> getPath ();Qui, abbiamo usato il
esiste
metodo per verificare se il foo la directory esiste già prima di crearla.Successivamente, abbiamo usato il
mkdir
metodo per creare il foo directory con il 0775 permessi, il che significa che sono leggibili ed eseguibili da tutti, ma solo scrivibili dal proprietario del file e dal loro gruppo. (Questa è la notazione ottale per i permessi del filesystem - per saperne di più, controlla questa ripartizione della notazione ottale.) Inoltre, abbiamo usato il chown e chgrp metodi per cambiare il proprietario e il gruppo di foo elenco.Crea un nuovo file e aggiungi contenuti
In questa sezione, creeremo un nuovo file e aggiungeremo i contenuti a quel file.
// crea un nuovo file e aggiungi contenuti prova $ new_file_path = $ current_dir_path. "/Foo/bar.txt"; if (! $ fsObject-> exists ($ new_file_path)) $ fsObject-> touch ($ new_file_path); $ fsObject-> chmod ($ new_file_path, 0777); $ fsObject-> dumpFile ($ new_file_path, "Aggiunta di contenuto fittizio al file bar.txt. \ n"); $ fsObject-> appendToFile ($ new_file_path, "Questo dovrebbe essere aggiunto alla fine del file. \ n"); catch (eccezione IOExceptionInterface $) echo "Errore durante la creazione del file in". $ Eccezione-> getPath ();Qui, abbiamo usato il
toccare
metodo per creare un nuovo file e quindi utilizzatochmod
per impostare le sue autorizzazioni a 0777-globalmente leggibile, scrivibile ed eseguibile.Una volta creato il file, puoi usare il
File spazzatura
metodo per aggiungere contenuti in quel file. D'altra parte, se si desidera aggiungere contenuti al file già esistente, è possibile utilizzare ilappendToFile
metodo, come mostrato nell'esempio precedente.Copia una directory
Finora, abbiamo creato il foo directory e il bar.txt file usando il
$ fsObject
oggetto. In questa sezione vedremo come copiare una directory insieme ai contenuti.// copia una directory prova $ src_dir_path = $ current_dir_path. "/ Foo"; $ dest_dir_path = $ current_dir_path. "/ Foo_copy"; if (! $ fsObject-> esiste ($ dest_dir_path)) $ fsObject-> mirror ($ src_dir_path, $ dest_dir_path); catch (eccezione IOExceptionInterface $) echo "Errore nella copia della directory in". $ Eccezione-> getPath ();Come puoi vedere, per prima cosa abbiamo creato i nomi dei percorsi con concatenazione di stringhe. Quindi, una volta assicurati che la directory non esistesse già usando il
esiste
metodo, abbiamo usato ilspecchio
metodo per copiare il foo directory nel foo_copy elenco.Rimuovere una directory
Infine, vediamo come rimuovere una directory.
// rimuove una directory prova $ arr_dirs = array ($ current_dir_path. "/ foo", $ current_dir_path. "/ foo_copy"); $ FsObject-> rimuovere ($ arr_dirs); catch (eccezione IOExceptionInterface $) echo "Errore durante l'eliminazione della directory in". $ Eccezione-> getPath ();Di nuovo, è abbastanza semplice: per cancellare una directory, basta usare il
rimuovere
metodo.È possibile trovare il codice completo per index.php nel nostro repository GitHub.
Conclusione
Questa è una breve introduzione al componente Symfony Filesystem. Il componente Symfony Filesystem fornisce metodi che rendono l'interazione con un file system un gioco da ragazzi. Abbiamo esaminato come installare il componente e abbiamo creato una manciata di esempi per dimostrare vari aspetti del componente.
Spero che questo articolo ti sia piaciuto e sentiti libero di pubblicare i tuoi pensieri utilizzando il feed di seguito!