Archivo_get_contents
Skip to contentPágina principal / PHP: Escribir y anexar a archivos con file_put_contentsLa función PHP file_put_contents() es un atajo útil para volcar una cadena en un archivo (en comparación con el uso de fopen, fputs, etc). Por defecto creará un nuevo archivo si no existe, o sobreescribirá el archivo si existe. Hace poco releí la documentación de esta función y descubrí que también es posible añadir contenido a un archivo con file_put_contents.Escribir en un archivo nuevo / sobrescribir un archivo existentePasa un nombre de archivo y la cadena que se va a escribir en el archivo (también se puede pasar una matriz que contenga un flujo, pero eso está fuera del alcance de este artículo) y se creará un archivo nuevo con el contenido de la cadena o se sobrescribirá uno existente con el contenido de la cadena.file_put_contents(‘/ruta/al/nombre_del_archivo’, $datos);
¿Qué es el contenido file put?
La función file_put_contents() escribe datos en un archivo. Esta función sigue estas reglas cuando accede a un fichero: Si FILE_USE_INCLUDE_PATH está establecido, comprueba la ruta de inclusión en busca de una copia de nombre_archivo. Crea el fichero si no existe. Abre el fichero.
¿Cómo almacenar datos en un archivo en PHP?
PHP Escribir a Archivo – fwrite()
La función fwrite() es usada para escribir en un archivo. El primer parámetro de fwrite() contiene el nombre del archivo a escribir y el segundo parámetro es la cadena a escribir.
Php _archivos
Debería ser obvio que esto sólo debería usarse si estás haciendo una escritura, si estás escribiendo múltiples veces en el mismo archivo deberías manejarlo tú mismo con fopen y fwrite, el fclose cuando hayas terminado de escribir. Benchmark abajo:file_put_contents() para 1,000,000 escrituras – promedio de 3 benchmarks: real 0m3.932s user 0m2.487s sys 0m1.437sfopen() fwrite() para 1,000,000 escrituras, fclose() – promedio de 3 benchmarks: real 0m2.265s user 0m1.819s sys 0m0.445s
Vale la pena notar que debes asegurarte de usar la ruta correcta cuando trabajes con esta función. La estaba usando para ayudar con el registro en un manejador de errores y a veces funcionaba – mientras que otras veces no. Al final era porque a veces se llamaba desde diferentes rutas resultando en un fallo al escribir en el archivo de registro.__DIR__ es tu amigo.
Sugiero ampliar file_force_contents() función de TrentTompkins en gmail punto com mediante la adición de verificación si el parche es como: “../foo/bar/file “if (strpos($dir, “../”) === 0) $dir = str_replace(“..”, substr(__DIR__, 0, strrpos(__DIR__, “/”)), $dir);
Php escribir en archivo
Esta función escribe en un archivo con el equivalente de fopen(), fwrite() (lo contrario de fread() ), y fclose() – todo en una función, igual que file_get_contents. Toma dos parámetros, el nombre del archivo a escribir y el contenido a escribir respectivamente, con un tercer parámetro opcional que especifica banderas extra a las que llegaremos en un momento. Si file_put_contents() tiene éxito devuelve el número de bytes escritos en el fichero, en caso contrario devolverá false.
Recuerde que tendrá que establecer $nombre_archivo primero – aparte de eso el script es sencillo, y debería mostrar “52 bytes escritos”, que es la suma total de las tres líneas de texto más los dos caracteres de nueva línea utilizados para implosionar() el array. Recuerde que el carácter de nueva línea es de hecho sólo un carácter dentro de los archivos, mientras que PHP lo representa usando dos, \ y n.
Puede pasar un tercer parámetro a file_put_contents(), el cual, si se establece a FILE_APPEND, actuará para añadir el texto en su segundo parámetro al texto existente en el archivo. Si no utiliza FILE_APPEND, el texto existente será borrado y reemplazado, lo que no siempre es el comportamiento deseado.
Php fopen
Estoy intentando escribir en un fichero del directorio /tmp que tiene permisos: drwxrwxrwt. Cuando ejecuto file_put_contents desde php -a shell interactivo, funciona correctamente y crea un archivo con el contenido proporcionado. Cuando llamo a esta función en el código, devuelve el número de bytes escritos en el archivo, pero no se crea ningún archivo en el directorio de destino. No aparece ningún error en los registros de php y/o apache2.
Resultó que PrivateTmp=true en el script systemd de apache. Eso estaba creando un directorio tmp separado dentro del directorio tmp. No se puede escribir en /tmp con php, a pesar de tener permisos 777 y no tener el valor open_basedir