file_put_contents()
La función file_put_contents() de PHP escribe datos en un archivo, creándolo si no existe y sobreescribiendo su contenido por defecto.
La función file_put_contents() escribe una cadena en un archivo en una sola llamada. Es el reemplazo moderno y de una sola línea para la secuencia clásica fopen() → fwrite() → fclose(): PHP abre el archivo, escribe los datos y cierra el manejador por ti. Esta página cubre su sintaxis, parámetros, valor de retorno, indicadores para agregar datos y bloqueo, y los errores que con más frecuencia confunden a los desarrolladores.
Sintaxis
file_put_contents(string $filename, mixed $data, int $flags = 0, ?resource $context = null): int|falseParámetros
| Parámetro | Requerido | Descripción |
|---|---|---|
$filename | Sí | Ruta del archivo a escribir. Si no existe, PHP lo crea. |
$data | Sí | Los datos a escribir — una string, un array de strings (unidas sin separador, como implode('', $array)), o un recurso de stream cuyo contenido restante se copia. |
$flags | No | Una máscara de bits: FILE_APPEND, LOCK_EX y/o FILE_USE_INCLUDE_PATH. Por defecto es 0 (sobreescribir). |
$context | No | Un recurso de contexto de stream creado con stream_context_create(), por ejemplo para establecer encabezados HTTP al escribir en un stream remoto. |
Valor de retorno
file_put_contents() devuelve el número de bytes escritos, o false en caso de error. Dado que 0 es un resultado válido (pero falsy) cuando se escribe una string vacía, verifica siempre el fallo con la comparación estricta === false en lugar de una prueba de veracidad flexible.
Escribir un archivo
Por defecto la función sobreescribe el contenido existente del archivo (o lo crea si no existe):
<?php
$filename = 'myfile.txt';
$data = 'This is some data to be written to the file.';
$bytes = file_put_contents($filename, $data);
if ($bytes === false) {
echo "Failed to write to $filename";
} else {
echo "Wrote $bytes bytes to $filename";
}Salida:
Wrote 44 bytes to myfile.txtEl contador devuelto, 44, es la longitud de la string en bytes.
Agregar datos en lugar de sobreescribir
Pasa el indicador FILE_APPEND para añadir al final del archivo en lugar de reemplazar su contenido — muy útil para archivos de registro:
<?php
$log = 'app.log';
file_put_contents($log, "First line\n", FILE_APPEND);
file_put_contents($log, "Second line\n", FILE_APPEND);
echo file_get_contents($log);Salida:
First line
Second lineSin FILE_APPEND, la segunda llamada borraría la primera línea.
Bloquear el archivo mientras se escribe
Si varios procesos pueden escribir en el mismo archivo al mismo tiempo, agrega LOCK_EX para adquirir un bloqueo exclusivo durante la escritura. Combina los indicadores con el operador OR a nivel de bits (|):
<?php
file_put_contents('counter.txt', "ping\n", FILE_APPEND | LOCK_EX);Esto evita que dos escritores intercalen su salida y corrompan el archivo.
Escribir un array
Cuando $data es un array, sus elementos de tipo string se concatenan sin separador. Únelos tú mismo si necesitas delimitadores:
<?php
$lines = ['apple', 'banana', 'cherry'];
file_put_contents('fruits.txt', implode("\n", $lines));
echo file_get_contents('fruits.txt');Salida:
apple
banana
cherryErrores comunes
- Fallo silencioso por permisos. Si el directorio no tiene permisos de escritura, la llamada devuelve
falsey emite una advertencia — no lanza una excepción. Verifica el valor de retorno (=== false) o envuelve la llamada e inspeccionaerror_get_last(). - El directorio padre debe existir.
file_put_contents()crea el archivo pero no los directorios faltantes. Llama amkdir($dir, 0777, true)primero si es necesario. FILE_APPENDno es lo mismo que sobreescribir. Olvidar el indicador es la causa más común de "mi registro sigue borrándose."- Los datos vacíos son válidos. Escribir
''devuelve0, que es falsy — usa=== falsepara no confundir una escritura vacía exitosa con un error.
Funciones relacionadas
file_get_contents()— la contraparte de lectura que carga un archivo completo en una string.fwrite()— escritura de nivel inferior cuando necesitas un manejador abierto (por ejemplo, muchas escrituras pequeñas en un bucle).fopen()— abre un manejador de archivo para lectura o escritura mediante stream.file_exists()— verifica si un archivo existe antes de escribir.
Conclusión
file_put_contents() es la forma más sencilla de escribir una string en un archivo en PHP: una sola llamada abre, escribe y cierra el archivo. Usa FILE_APPEND para agregar datos a un archivo, LOCK_EX para escrituras concurrentes, y verifica siempre el éxito con una comprobación estricta === false.