Necesito una función como preg_replace pero en lugar de cadenas necesito que trabaje con archivos/contenido de archivos.Reemplazo de contenido de archivos en PHP
Respuesta
que puede hacer:
$file = 'filename';
file_put_contents($file,str_replace('find','replace',file_get_contents($file)));
@ respuesta de codaddict es bastante sufficent para archivos pequeños (y sería cómo iba a ponerlo en práctica si el tamaño del archivo se encontraba bajo una MIB). Sin embargo, consumirá una tonelada de memoria y, como tal, debe tener cuidado al leer archivos de gran tamaño.
Si quieres una memoria Versión mucho más, podría utilizar stream filters ...
class ReplaceText_filter extends php_user_filter {
protected $search = '';
protected $replace = '';
public function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writable($in)) {
$bucket->data = str_replace(
$this->search,
$this->replace,
$bucket->data
);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
public function onCreate() {
if (strpos($this->filtername, '.') === false) return false;
list ($name, $arguments) = explode('.', $this->filtername, 2);
$replace = '';
$search = $arguments;
if (strpos($arguments, '|') !== false) {
list ($search, $replace) = explode('|', $arguments, 2);
}
if (strpos($search, ',') !== false) {
$search = explode(',', $search);
}
if (strpos($replace, ',') !== false) {
$search = explode(',', $replace);
}
$this->search = $search;
$this->replace = $replace;
}
}
stream_filter_register('replacetext.*', 'ReplaceText_Filter');
Por lo tanto, a continuación, puede añadir un filtro de secuencia arbitraria. El nombre del filtro determina los argumentos:
$search = 'foo';
$replace = 'bar';
$name = 'replacetext.'.$search.'|'.$replace;
stream_filter_append($stream, $name);
o para matrices,
$search = array('foo', 'bar');
$replace = array('bar', 'baz');
$name = 'replacetext.'.implode(',', $search).'|'.implode(',', $replace);
stream_filter_append($stream, $name);
Obviamente este es un ejemplo muy simple (y no hace un montón de comprobación de errores), pero que le permite hacer algo como esto:
$f1 = fopen('mysourcefile', 'r');
$f2 = fopen('mytmpfile', 'w');
$search = array('foo', 'bar');
$replace = array('bar', 'baz');
$name = 'replacetext.'.implode(',', $search).'|'.implode(',', $replace);
stream_filter_append($f1, $name);
stream_copy_to_stream($f1, $f2);
fclose($f1);
fclose($f2);
rename('mytmpfile', 'mysourcefile');
Y que mantendrá el uso de memoria muy baja al procesar archivos potencialmente enormes (GIB) o TiB ...
Ah, y la otra cosa interesante, es que puede editar en línea diferentes tipos de flujo. Lo que quiero decir con eso es que puede leer desde una secuencia HTTP, editar en línea y escribir en una secuencia de archivos. Es bastante potente (ya que puede encadenar estos filtros) ...
El único problema con esta respuesta es cuando los términos de búsqueda se encuentran en diferentes sectores, especialmente cuando se trata de archivos de más de 8 KiB. – bit2shift
- 1. Contenido dividido de php en varios archivos
- 2. Reemplazo de controles de contenido en OpenXML
- 3. Reemplazo de variable de PHP
- 4. Reemplazo de php para safe_mode
- 5. ¿Reemplazo de la función __autoload de PHP?
- 6. Emoticon Reemplazo - PHP
- 7. Reemplazo para PEAR: MDB2 en PHP 5.3
- 8. php: obtener contenido de archivos y almacenar archivos en una carpeta particular
- 9. Almacenamiento de contenido de archivos en DB
- 10. Eliminar contenido de archivos android
- 11. ¿Cómo reemplazo parte de una cadena en PHP?
- 12. Obtener contenido de archivos en AppHarbor
- 13. Lista de contenido del directorio (php)
- 14. Obtener contenido de archivos en el script java
- 15. ereg/eregi reemplazo para PHP 5.3
- 16. bloqueo de archivos en php
- 17. Lectura de archivos xlsx en PHP
- 18. Script PHP de carga de archivos PHP
- 19. ¿Cómo publicar una página .php en lugar de .html en github para probar contenido de php?
- 20. php Reemplazo de varios espacios con un solo espacio
- 21. En PHP, ¿es posible inspeccionar el contenido de un archivo Zip sin extraer primero su contenido?
- 22. php, descarga de archivos
- 23. PHP DOM elemento de reemplazo con un nuevo elemento
- 24. ¿Es Quercus un reemplazo viable para PHP en entornos Java?
- 25. ¿Cómo busco contenido histórico de archivos mercuriales?
- 26. ¿Monitorea el contenido de archivos/directorios?
- 27. Reemplazo de archivo atómico en Python
- 28. diferencia entre el contenido de dos archivos
- 29. tipo de contenido para archivos MHT
- 30. Ver contenido de archivos eliminados Svn
Puede arrastrar el contenido de los archivos a una variable al recorrerlo usando fread y luego trabajar con preg_replace como lo haría con una cadena de texto? – Chris
Sí, pero luego el contenido actualizado se debe escribir en los archivos de los que se tomó. –
Entonces, ¿cuál es el problema para volver a escribir el contenido en el archivo? –