Neste artigo, vamos explorar o componente Symfony Filesystem, que fornece métodos úteis para interagir com um sistema de arquivos. Após a instalação e configuração, criaremos alguns exemplos reais de como usá-lo.
O componente do sistema de arquivos do Symfony
Na maioria das vezes, você precisará interagir com um sistema de arquivos se estiver lidando com aplicativos PHP. Na maioria dos casos, você acaba usando as funções principais do PHP ou cria sua própria classe de wrapper personalizada para obter a funcionalidade desejada. De qualquer forma, é difícil manter por um longo período de tempo. Então, o que você precisa é de uma biblioteca que seja bem mantida e fácil de usar. É aí que entra o componente Symfony Filesystem.
O componente Symfony Filesystem fornece métodos de wrapper úteis que tornam a interação do sistema de arquivos uma brisa e uma experiência divertida. Vamos ver rapidamente do que ele é capaz:
- criando um diretório
- criando um arquivo
- editando o conteúdo do arquivo
- alterando o proprietário e o grupo de um arquivo ou diretório
- criando um link simbólico
- copiando um arquivo ou diretório
- removendo um arquivo ou diretório
- e mais
Neste artigo, mostrarei como liberar o poder do componente Symfony Filesystem. Como de costume, começaremos com as instruções de instalação e configuração e, em seguida, implementaremos alguns exemplos do mundo real para demonstrar os principais conceitos.
Instalação e configuração
Nesta seção, vamos instalar o componente Symfony Filesystem. Suponho que você já instalou o Composer em seu sistema, pois precisaremos dele para instalar o componente Filesystem disponível no Packagist.
Então vá em frente e instale o componente Filesystem usando o seguinte comando.
$composer require symfony/filesystem
Isso deveria ter criado um compositor.json arquivo, que deve ficar assim:
{ "require": { "symfony/filesystem": "^4.1" } }
Então essa é a parte da instalação, mas como você deve usá-la? Na verdade, é apenas uma questão de incluir o autoload.php arquivo criado pelo Composer em seu aplicativo, conforme mostrado no trecho a seguir.
Um exemplo do mundo real
Nesta seção, criaremos um exemplo que demonstra como você pode usar o componente Filesystem em seus aplicativos para executar várias operações do sistema de arquivos.
Para começar, vamos em frente e criar o index.php arquivo com o seguinte conteúdo.
Aqui, inicializamos o
Filesystem
objetar a$fsObject
e salvou o diretório atual para$current_dir_path
. Nas próximas seções, usaremos$fsObject
para realizar diversas operações.Faça um novo diretório
Primeiro, vamos criar um novo diretório.
//make a new directory try { $new_dir_path = $current_dir_path . "/foo"; if (!$fsObject->exists($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($old); } } catch (IOExceptionInterface $exception) { echo "Error creating directory at". $exception->getPath(); }Aqui, usamos o
exists
método para verificar se o foo diretório já existe antes de criá-lo.A seguir, utilizamos o
mkdir
método para criar o foo diretório com o 0775 permissões, o que significa legível e executável por todos, mas apenas gravável pelo proprietário do arquivo e seu grupo. (Esta é a notação octal para permissões do sistema de arquivos - para saber mais, confira esta divisão da notação octal.) Além disso, usamos a notação octal chown e chgrp métodos para alterar o proprietário e o grupo do foo diretório.Criar um novo arquivo e adicionar conteúdo
Nesta seção, criaremos um novo arquivo e adicionaremos conteúdo a esse arquivo.
// create a new file and add contents try { $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, "Adding dummy content to bar.txt file.n"); $fsObject->appendToFile($new_file_path, "This should be added to the end of the file.n"); } } catch (IOExceptionInterface $exception) { echo "Error creating file at". $exception->getPath(); }Aqui, usamos o
touch
método para criar um novo arquivo e, em seguida, usadochmod
para definir suas permissões para 0777— globalmente legível, gravável e executável.Uma vez que o arquivo é criado, você pode usar o
dumpFile
método para adicionar conteúdo nesse arquivo. Por outro lado, se você quiser adicionar conteúdo ao arquivo já existente, você pode usar oappendToFile
método, como mostrado no exemplo acima.Copiar um diretório
Até agora, criamos o foo diretório e o bar.txt arquivo usando o
$fsObject
objeto. Nesta seção, veremos como copiar um diretório junto com o conteúdo.//copy a directory try { $src_dir_path = $current_dir_path . "/foo"; $dest_dir_path = $current_dir_path . "/foo_copy"; if (!$fsObject->exists($dest_dir_path)) { $fsObject->mirror($src_dir_path, $dest_dir_path); } } catch (IOExceptionInterface $exception) { echo "Error copying directory at". $exception->getPath(); }Como você pode ver, primeiro construímos os nomes dos caminhos com concatenação de strings. Então, uma vez que nos certificamos de que o diretório já não existia usando o
exists
método, usamos omirror
método para copiar o foo diretório para o foo_copy diretório.Remover um diretório
Finalmente, vamos ver como remover um diretório.
//remove a directory try { $arr_dirs = array( $current_dir_path . "/foo", $current_dir_path . "/foo_copy" ); $fsObject->remove($arr_dirs); } catch (IOExceptionInterface $exception) { echo "Error deleting directory at". $exception->getPath(); }Novamente, é bastante simples - para excluir um diretório, basta usar o
remove
método.Você pode encontrar o código completo para index.php em nosso repositório do GitHub.
Conclusão
Essa é uma breve introdução ao componente Symfony Filesystem. O componente Symfony Filesystem fornece métodos que facilitam a interação com um sistema de arquivos. Analisamos como instalar o componente e criamos vários exemplos para demonstrar vários aspectos do componente.
Espero que você tenha gostado deste artigo e sinta-se à vontade para postar seus pensamentos usando o feed abaixo!
Miniatura de postagem gerada por OpenAI DALL-E.
Este post foi atualizado com contribuições de Sajal Soni. Sajal pertence à Índia e adora passar o tempo criando sites baseados em estruturas de código aberto.