E/S de Archivos
## Objetivos de Aprendizaje
- Leer y escribir archivos
- Trabajar con rutas de archivos
- Manejar operaciones de archivos de forma segura
- Usar funciones de directorios
## Leyendo Archivos
### file_get_contents()
```php
```
### file() - Leer en Arreglo
```php
```
### fopen(), fread(), fclose()
```php
```
### Modos de Lectura
| Modo | Descripción |
|------|-------------|
| r | Solo lectura, comienza al inicio |
| r+ | Leer y escribir, comienza al inicio |
| w | Solo escritura, trunca/crea |
| w+ | Leer y escribir, trunca/crea |
| a | Solo escritura, append al final |
| a+ | Leer y escribir, append al final |
| x | Crear y escribir solo (falla si existe) |
| x+ | Crear y leer/escribir (falla si existe) |
### fgets() - Leer Línea
```php
```
### fgetc() - Leer Carácter
```php
```
### feof() - Verificar Fin de Archivo
```php
```
## Escribiendo Archivos
### file_put_contents()
```php
```
### fwrite() con fopen()
```php
```
### flock() - Bloqueo de Archivos
```php
```
## Archivos CSV
### Leyendo CSV
```php
```
### Escribiendo CSV
```php
```
### Leyendo CSV con Encabezados
```php
```
## Información de Archivos
### file_exists()
```php
```
### is_file() vs is_dir()
```php
```
### Stats de Archivos
```php
```
### pathinfo()
```php
/var/www/html/images
// [basename] => photo.jpg
// [extension] => jpg
// [filename] => photo
// Individual parts
pathinfo($path, PATHINFO_DIRNAME); // /var/www/html/images
pathinfo($path, PATHINFO_BASENAME); // photo.jpg
pathinfo($path, PATHINFO_EXTENSION); // jpg
pathinfo($path, PATHINFO_FILENAME); // photo
?>
```
### realpath()
```php
```
## Operaciones de Directorios
### Creando Directorios
```php
```
### Leyendo Directorios
```php
```
### Funciones de Directorios
```php
```
### Iterador de Directorio (Enfoque Moderno)
```php
isFile()) {
echo $file->getFilename() . "\n";
}
}
// Recursive directory iterator
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator("src")
);
foreach ($iterator as $file) {
if ($file->isFile()) {
echo $file->getPathname() . "\n";
}
}
?>
```
## Copiar, Mover, Eliminar Archivos
### Copiar
```php
```
### Renombrar/Mover
```php
```
### Eliminar
```php
```
## Archivos Temporales
### tempnam()
```php
```
### tmpfile()
```php
```
## Serialización
### serialize()
```php
"Alice",
"age" => 25,
"skills" => ["PHP", "MySQL"]
];
$serialized = serialize($data);
// a:3:{s:4:"name";s:5:"Alice";s:3:"age";i:25;s:6:"skills";a:2:{i:0;s:3:"PHP";i:1;s:5:"MySQL";}}
file_put_contents("data.txt", $serialized);
?>
```
### unserialize()
```php
Alice [age] => 25 [skills] => Array ( [0] => PHP [1] => MySQL ) )
// Warning: Never unserialize untrusted data!
?>
```
### JSON como Alternativa
```php
"Alice", "age" => 25];
$json = json_encode($data);
file_put_contents("data.json", $json);
$loaded = json_decode(file_get_contents("data.json"), true);
?>
```
## Manejo de Errores
### Errores de Archivos
```php
```
### Manejador de Errores Personalizado
```php
```
## Resumen
- `file_get_contents()` lee archivo completo; `file()` lee en arreglo
- `fopen()`, `fgets()`, `fread()`, `fwrite()`, `fclose()` para control detallado
- `file_put_contents()` escribe archivo; `fwrite()` con `fopen()`
- Modos: `r`, `r+`, `w`, `w+`, `a`, `a+`, `x`, `x+`
- Usa `flock()` para bloqueo de archivos
- `fgetcsv()` y `fputcsv()` para archivos CSV
- `file_exists()`, `is_file()`, `filesize()`, `filemtime()` para info de archivos
- `mkdir()`, `rmdir()`, `scandir()`, `glob()` para directorios
- `copy()`, `rename()`, `unlink()` para operaciones de archivos
- `tempnam()` y `tmpfile()` para archivos temporales
- `serialize()`/`unserialize()` para almacenamiento de datos específico de PHP
- `json_encode()`/`json_decode()` para datos entre lenguajes
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →