elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Agregar datos por linea a un archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Agregar datos por linea a un archivo  (Leído 4,443 veces)
shamaka

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Agregar datos por linea a un archivo
« en: 25 Junio 2018, 04:14 am »

Hola! Tengo este fragmento de código que hace parte del trabajo.

Código
  1. $txt = fopen("archivo.php","a+");
  2. fwrite($txt, "valor1" .chr(10));

y queda algo como:

Código
  1. valor1
  2. valor2
  3. ...

Lo que quiero hacer es que haga eso mismo, pero despues de unas cuantas lineas. Por ejemplo, en ese archivo esta:

Código
  1. <?php
  2. $var = 1;
  3. $vard = 2;
  4.  
  5. //Aqui quiero empezar a insertar los valores
  6. echo "
  7. [b]valor1
  8. valor2[/b]
  9. ";
  10. ?>

Como ven, lo que quiero lograr es que se vallan agregando las lineas, despues de:

Código
  1. <?php
  2. $var = 1;
  3. $vard = 2;

Y antes de:

Código
  1. ";
  2. ?>

Espero que me puedan ayudar! Saludos


« Última modificación: 26 Junio 2018, 01:48 am por #!drvy » En línea

Con temor a Dios y sin miedo al hombre
shamaka

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: Agregar datos por linea a un archivo
« Respuesta #1 en: 25 Junio 2018, 04:30 am »

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.


En línea

Con temor a Dios y sin miedo al hombre
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Agregar datos por linea a un archivo
« Respuesta #2 en: 26 Junio 2018, 01:46 am »

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í:

Código
  1. <?php
  2.  
  3. $archivo   = 'test.php';
  4. $linea     = 7;
  5. $contenido = "Hola\n¿Que Tal?\nEstoy insertando contenido!";
  6. $nuevaLinea = "\n"; // Deberiamos determinar las lineas nuevas o usar PHP_EOL;
  7.  
  8. // Abrimos el fichero en modo lectura, leemos todo su contenido y cerramos.
  9. $file = fopen($archivo, 'r');
  10. $content = fread($file, filesize($archivo));
  11. fclose($file);
  12.  
  13.  
  14. // Separamos todo en un array siendo cada elemento de este, una linea.
  15. $contentSplit = explode($nuevaLinea, $content);
  16.  
  17. // Separamos el contenido en dos arrays justo donde deberiamos insertar el
  18. // nuevo contenido. Luego añadimos al final de la primera mitad el contenido
  19. // nuevo.
  20. $firstHalf  = array_slice($contentSplit, 0, $linea);
  21. $secondHalf = array_slice($contentSplit, $linea);
  22. $firstHalf[] = $contenido;
  23.  
  24. // Combinamos ambas mitades de nuevo.
  25. $finalContent = array_merge($firstHalf, $secondHalf);
  26.  
  27. // Unimos todo el contenido reproduciendo los saltos de linea
  28. $finalContent = implode($nuevaLinea, $finalContent);
  29.  
  30. // Sobreescribimos el fichero.
  31. $file = fopen($archivo, 'w+');
  32. fwrite($file, $finalContent);
  33. 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), pero es para que veas los problemas a los que te enfrentas.

Saludos
En línea

shamaka

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: Agregar datos por linea a un archivo
« Respuesta #3 en: 26 Junio 2018, 15:25 pm »

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.
En línea

Con temor a Dios y sin miedo al hombre
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines