¿Cómo puedo sobrescribir el contenido de un archivo con nuevo contenido en PHP?


Traté de usar fopen, pero solo logré agregar contenido al final del archivo. ¿Es posible sobrescribir todos los contenidos con contenido nuevo en PHP?

 34
Author: newbie, 2011-09-26

3 answers

Uso file_put_contents()

file_put_contents('file.txt', 'bar');
echo file_get_contents('file.txt'); // bar
file_put_contents('file.txt', 'foo');
echo file_get_contents('file.txt'); // foo

Alternativamente, si estás atascado con fopen() puedes usar los modos w o w+:

'w' Open for writing only; coloque el puntero del archivo al principio del archivo y trunque el archivo a longitud cero. Si el archivo no existe, intente crearlo.

'w +' Abierto para lectura y escritura; coloque el puntero del archivo al principio del archivo y trunque el archivo a longitud cero. Si el archivo no existe, intente crearlo.

 61
Author: Mike B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-01 02:42:23
$fname = "database.php";
$fhandle = fopen($fname,"r");
$content = fread($fhandle,filesize($fname));
$content = str_replace("192.168.1.198", "localhost", $content);

$fhandle = fopen($fname,"w");
fwrite($fhandle,$content);
fclose($fhandle);
 1
Author: Ram Pukar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-22 10:44:27

Alternativamente, si usted tiene el control total de su servidor, ¿por qué no "garantizar" la operación modificándolo eliminando el archivo antes?

$wait=exec('rm -r -f myfile.txt');
file_put_contents('myfile.txt','new content');

El wait espera aquí es sólo para mantener la comando eliminar hasta que se hace, y hacer el file_put_contents seguro porque a veces solo agrega contenido, no lo reemplaza por uno nuevo

MI MÉTODO PREFERIDO [el más efectivo de todos] es usar fopen, fwrite y fclose [it costará menos CPU y nunca falla]

$f=fopen('myfile.txt','w');
fwrite($f,'new content');
fclose($f);
 1
Author: PYK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-26 00:38:50