Cómo insertar una cadena antes del último carácter en un archivo de gran tamaño

AndroidDev:

Tengo un archivo muy grande que consiste en una única cadena. Debido al tamaño del archivo, no quiero leer toda la cadena en la memoria.

El último carácter será siempre un corchete de cierre ]ya que esta cadena es una matriz JSON. Quiero insertar un pequeño objeto JSON (representado como una cadena) inmediatamente antes de que la llave de cierre. He visto algunas ideas, pero no puedo conseguir algo de trabajo.

Como se puede ver, estoy tratando de abrir el archivo y utilizar fseekpara mover el puntero del archivo para justo en frente de la ]. Entonces trato de escribir la nueva cadena en la cadena existente en esa posición.

Sin embargo, el efecto de esto es simplemente para añadir la nueva cadena al final de la cadena existente, que no es lo que quiero.

Como un ejemplo simplificado, digamos que el archivo empieza contiene esta cadena:

[{"name":"alice","city":"london"}]

Y luego quiero añadir una segunda persona para esta lista usando este código:

$new_person = ",{\"name\":\"bob\",\"city\":\"paris\"}";

$filename = "people.json";
$fh = fopen($filename, "a+");
$filesize = filesize($filename);
$stat = fstat($fh);
fseek($fh, $stat[$filesize]-1);
fwrite($fh, $new_person);
fclose($fh); 

Pero lo que es terminar con un archivo que contiene esta cadena:

[{"name":"alice","city":"london"}],{"name":"bob","city":"paris"}

Mis conocimientos de PHP son terribles. No puedo decir si mis fseekapunta hacia el lugar equivocado o si el problema está en otra parte. Gracias por cualquier ayuda.

No es la Absol oscuro:

A partir de los documentos (el énfasis es mío):

a+: Abierto para leer y escribir; colocar el puntero del archivo al final del archivo. Si no existe el archivo, intente crearlo. En este modo, fseek () sólo afecta a la posición de lectura, escritura siempre se anexan.

Usar r+el modo de cambio, y en lugar de fstatque puede hacer:

fseek($fh, -1, SEEK_END);

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=347744&siteId=1
Recomendado
Clasificación