Hola! Tengo este fragmento de código que hace parte del trabajo.
$txt = fopen("archivo.php","a+");
fwrite($txt, "valor1" .chr(10));
y queda algo como:
valor1
valor2
...
Lo que quiero hacer es que haga eso mismo, pero despues de unas cuantas lineas. Por ejemplo, en ese archivo esta:
<?php
$var = 1;
$vard = 2;
//Aqui quiero empezar a insertar los valores
echo "
[b]valor1
valor2[/b]
";
?>
Como ven, lo que quiero lograr es que se vallan agregando las lineas, despues de:
<?php
$var = 1;
$vard = 2;
Y antes de:
";
?>
Espero que me puedan ayudar! Saludos
Veo que si agrego las lineas al principio no hay problema, va llenando donde lo deje en blanco. Pero no encuentro la forma de hacerlo entre las lineas de abajo.
Estas en un problema al que todo el mundo se enfrenta tarde o temprano, todo el mundo se come la cabeza con el y al final acaban optando por soluciones más eficientes como guardar los datos en un lado externo.
Dicho esto, hay algunos modos que puedes encontrar por ahí para hacer estas cosas de forma básica e ineficiente. Ten en cuenta que en general, cuando vas a procesar e modificar un fichero, no lo estas visualizando si no que lo estas leyendo, lees los bytes buscas donde modificar e insertas lo cual equivale a sobre-escribir el fichero entero con los consecuentes aumentos de memoria.
Lo más fácil, seria coger el fichero, leerlo, determinar de cuantas lineas se compone, buscar la linea especifica en la que queremos insertar contenido, separar el contenido en dos (la primera parte antes de la linea y la segunda parte justo después), guardar la segunda mitad en memoria, añadir el nuevo contenido al final y añadir la segunda mitad que guardamos justo después.
Algo así:
<?php
$archivo = 'test.php';
$linea = 7;
$contenido = "Hola\n¿Que Tal?\nEstoy insertando contenido!";
$nuevaLinea = "\n"; // Deberiamos determinar las lineas nuevas o usar PHP_EOL;
// Abrimos el fichero en modo lectura, leemos todo su contenido y cerramos.
$file = fopen($archivo, 'r');
$content = fread($file, filesize($archivo));
fclose($file);
// Separamos todo en un array siendo cada elemento de este, una linea.
$contentSplit = explode($nuevaLinea, $content);
// Separamos el contenido en dos arrays justo donde deberiamos insertar el
// nuevo contenido. Luego añadimos al final de la primera mitad el contenido
// nuevo.
$firstHalf = array_slice($contentSplit, 0, $linea);
$secondHalf = array_slice($contentSplit, $linea);
$firstHalf[] = $contenido;
// Combinamos ambas mitades de nuevo.
$finalContent = array_merge($firstHalf, $secondHalf);
// Unimos todo el contenido reproduciendo los saltos de linea
$finalContent = implode($nuevaLinea, $finalContent);
// Sobreescribimos el fichero.
$file = fopen($archivo, 'w+');
fwrite($file, $finalContent);
fclose($file);
De nuevo, esto no es optimo, no es eficiente e incluso se puede reestructurar de una forma mucho mejor (véase esta respuesta de StackOverflow (https://stackoverflow.com/a/3278032)), pero es para que veas los problemas a los que te enfrentas.
Saludos
Esta solución la había pensado, pero la cantidad de memoria que exige lo hace ineficiente, como ya lo comentas. Igual agradezco tu solucion, seria seguir buscando.