¿Cuál es la mejor manera de sobrescribir una línea específica en un archivo? Básicamente quiero buscar en un archivo la cadena '@parsethis' y sobrescribir el resto de esa línea con otra cosa.Sobrescribir línea en archivo con PHP
Respuesta
Probablemente haga lo que sugirió Jeremy, pero una forma alternativa de hacerlo aquí es otra solución. Esto no ha sido probado o usado y es para sistemas * nix.
$cmd = "grep '@parsethis' " . $filename;
$output = system($cmd, $result);
$lines = explode("\n", $result);
// Read the entire file as a string
// Do a str_repalce for each item in $lines with ""
Su problema principal es el hecho de que la nueva línea puede no tener la misma longitud que la línea anterior. Si necesita cambiar la longitud de la línea, no hay forma de reescribir al menos todo el archivo después de la línea modificada. La forma más fácil es crear un nuevo archivo modificado y luego moverlo sobre el original. De esta manera, hay un archivo completo disponible en todo momento para los lectores. Use el bloqueo para asegurarse de que solo un script esté modificando el archivo de una vez, y como va a reemplazar el archivo, realice el bloqueo en un archivo diferente. Consulte flock()
.
Si está seguro de que la nueva línea será la misma longitud que la línea de edad, se puede abrir el archivo en modo de lectura/escritura (uso r+
como segundo argumento a fopen()
) y llamar ftell()
para guardar la posición del la línea comienza en cada momento antes de llamar al fgets()
para leer una línea. Una vez que encuentre la línea que desea sobrescribir, puede usar fseek()
para volver al comienzo de la línea y fwrite()
los datos nuevos. Una forma de obligar a la línea a tener siempre la misma longitud es espaciando la almohadilla hasta la longitud máxima posible.
Si el archivo es realmente grande (archivos de registro o algo así) y está dispuesto a sacrificar velocidad para el consumo de memoria, podría abrir dos archivos y esencialmente hacer el truco Jeremy Ruten propuesto utilizando archivos en lugar de la memoria del sistema.
$source='in.txt';
$target='out.txt';
// copy operation
$sh=fopen($source, 'r');
$th=fopen($target, 'w');
while (!feof($sh)) {
$line=fgets($sh);
if (strpos($line, '@parsethis')!==false) {
$line='new line to be inserted' . PHP_EOL;
}
fwrite($th, $line);
}
fclose($sh);
fclose($th);
// delete old source file
unlink($source);
// rename target file to source file
rename($target, $source);
o si el archivo no es demasiado grande:
$sample = file_get_contents('sample');
$parsed =preg_replace('#@parsethis.*#', 'REPLACE TO END OF LINE', $sample);
Vas a tener que elegir delimitadores '#' que no están presentes en el archivo sin embargo.
- 1. ¿Cómo sobrescribir register_argc_argv en PHP?
- 2. python sobrescribir la línea anterior
- 3. cómo sobrescribir datos en un archivo txt?
- 4. Windows: Sobrescribir archivo en uso
- 5. ¿Cómo sobrescribir una línea impresa en el caparazón con Ruby?
- 6. Archivo PHP cargar y sobrescribir el archivo con el mismo nombre
- 7. Obtener una línea en un archivo enorme con PHP
- 8. sobrescribir en medio de un archivo
- 9. Lea y sobrescribir un archivo en Python
- 10. Java - No sobrescribir con bufferedwriter
- 11. Sobrescribir la función predeterminada de php
- 12. sobrescribir una línea específica en un archivo de texto usando VB.NET
- 13. ¿Cómo sobrescribir css en línea a través de javascript?
- 14. Sobrescribir el marco de destino desde la línea de comando
- 15. ¿Cómo sobrescribir algunos bytes de un archivo binario con dd?
- 16. PHP: Leer línea específica del archivo
- 17. Leer en archivo de texto línea por línea php - no se detectó nueva línea
- 18. C++ sobrescribir datos en un archivo en una posición particular
- 19. cómo realizar boost :: filesystem copy_file con sobrescribir
- 20. Leyendo línea específica de un archivo en PHP
- 21. PHP - ¿Devolviendo la última línea en un archivo?
- 22. PHP Modificar una sola línea en un archivo de texto
- 23. ¿Cómo sobrescribir una función en otro archivo javascript?
- 24. Escribir en el medio del archivo (sin sobrescribir datos)
- 25. Cómo duplicar un archivo PHP con PHP
- 26. Leer un archivo de texto con php
- 27. PHP SimpleXML nueva línea
- 28. Cómo sobrescribir solo parte de un archivo en C++
- 29. Vaciado un archivo con php
- 30. PHP sendmail funciona en línea de comandos de Ubuntu, pero no desde un archivo php
Esto como siempre lo he hecho. Tendré curiosidad por ver si hay una manera de modificar los archivos in situ. –
Si usa file() para in, después de la implosión probablemente desee file_put_contents() para hacer eso en una sola línea, también. –