Funciones del sistema de archivos
Nette\Utils\FileSystem es una clase que contiene funciones útiles para trabajar con un sistema de archivos. Una ventaja sobre las funciones nativas de PHP es que lanzan excepciones en caso de errores.
Si necesitas buscar archivos en el disco, utiliza el Finder.
Instalación:
composer require nette/utils
Los siguientes ejemplos asumen que el siguiente alias de clase está definido:
use Nette\Utils\FileSystem;
Manipulación
copy(string $origin, string $target, bool $overwrite=true): void
Copia un archivo o un directorio completo. Sobrescribe los archivos y directorios existentes por defecto. Si
$overwrite
se establece en false
y ya existe un $target
, lanza una excepción
Nette\InvalidStateException
. Lanza una excepción Nette\IOException
en caso de error.
FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);
createDir(string $directory, int $mode=0777): void
Crea un directorio si no existe, incluyendo los directorios padre. Lanza una excepción Nette\IOException
en caso
de error.
FileSystem::createDir('/path/to/dir');
delete(string $path): void
Borra un fichero o un directorio entero si existe. Si el directorio no está vacío, borra primero su contenido. Lanza una
excepción Nette\IOException
en caso de error.
FileSystem::delete('/path/to/fileOrDir');
makeWritable(string $path, int $dirMode=0777, int $fileMode=0666): void
Establece los permisos de archivo a $fileMode
o los permisos de directorio a $dirMode
.
Recursivamente recorre y establece permisos en todo el contenido del directorio también.
FileSystem::makeWritable('/path/to/fileOrDir');
open(string $path, string $mode): resource
Abre el archivo y devuelve el recurso. El parámetro $mode
funciona igual que la función nativa fopen()
. Si se produce un error, lanza la excepción
Nette\IOException
.
$res = FileSystem::open('/path/to/file', 'r');
read(string $file): string
Lee el contenido de un $file
. Lanza una excepción Nette\IOException
si se produce un error.
$content = FileSystem::read('/path/to/file');
readLines(string $file, bool $stripNewLines=true): \Generator
Lee el contenido del fichero línea a línea. A diferencia de la función nativa file()
, no lee todo el fichero
en memoria, sino que lo lee de forma continua, de modo que se pueden leer ficheros mayores que la memoria disponible.
$stripNewLines
especifica si se eliminan los caracteres de salto de línea de \r
y \n
. En
caso de error, lanza una excepción Nette\IOException
.
$lines = FileSystem::readLines('/path/to/file');
foreach ($lines as $lineNum => $line) {
echo "Line $lineNum: $line\n";
}
rename(string $origin, string $target, bool $overwrite=true): void
Renombra o mueve un archivo o un directorio especificado por $origin
a $target
. Sobrescribe los
archivos y directorios existentes por defecto. Si $overwrite
se establece en false
y
$target
ya existe, lanza una excepción Nette\InvalidStateException
. Lanza una excepción
Nette\IOException
en caso de error.
FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);
write(string $file, string $content, int $mode=0666): void
Escribe $content
en $file
. Lanza una excepción Nette\IOException
si se produce
un error.
FileSystem::write('/path/to/file', $content);
Rutas
isAbsolute(string $path): bool
Determina si la dirección $path
es absoluta.
FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup'); // true
FileSystem::isAbsolute('C:/backup'); // true
joinPaths(string …$segments): string
Une todos los segmentos de la ruta y normaliza el resultado.
FileSystem::joinPaths('a', 'b', 'file.txt'); // 'a/b/file.txt'
FileSystem::joinPaths('/a/', '/b/'); // '/a/b/'
FileSystem::joinPaths('/a/', '/../b'); // '/b'
normalizePath(string $path): string
Normaliza ..
y .
y los separadores de directorio de la ruta.
FileSystem::normalizePath('/file/.'); // '/file/'
FileSystem::normalizePath('\file\..'); // '/file'
FileSystem::normalizePath('/file/../..'); // '/..'
FileSystem::normalizePath('file/../../bar'); // '/../bar'
unixSlashes(string $path): string
Convierte las barras oblicuas en /
utilizadas en los sistemas Unix.
$path = FileSystem::unixSlashes($path);
platformSlashes(string $path): string
Convierte las barras inclinadas en caracteres específicos de la plataforma actual, es decir, \
en Windows y
/
en otros sistemas.
$path = FileSystem::platformSlashes($path);
Enfoque estático frente a no estático
Para reemplazar fácilmente la clase FileSystem
por otra clase, por ejemplo para realizar pruebas, utilícela de
forma no estática:
class AnyClassUsingFileSystem
{
public function __construct(
private FileSystem $fileSystem,
) {
}
public function readConfig(): string
{
return $this->fileSystem->read(/* ... */);
}
...
}