Foros del Web » Programando para Internet » PHP »

fputs() sobreescribe datos

Estas en el tema de fputs() sobreescribe datos en el foro de PHP en Foros del Web. Hola, tengo varios archivos y necesito agregarle información al principio de cada uno. Por ejemplo: tengo el archivo "prueba.txt" el contenido del mismo es: "Hola, ...
  #1 (permalink)  
Antiguo 14/06/2007, 17:32
Avatar de marcolandia  
Fecha de Ingreso: febrero-2007
Ubicación: En mi hermosa nación Arge
Mensajes: 107
Antigüedad: 17 años, 9 meses
Puntos: 2
Pregunta fputs() sobreescribe datos

Hola, tengo varios archivos y necesito agregarle información al principio de cada uno. Por ejemplo: tengo el archivo "prueba.txt" el contenido del mismo es: "Hola, soy un geek. Chau". Yo le quiero agregar "abcdefghijk" al principio... Entonces uso este code:
Código PHP:
$ac=fopen("prueba","r+");//abrimos el archivo que acabamos de crear
    
fputs($ac,'abcdefghijk',10);//le escribimos esto
    
fclose($ac); //lo cerramos 
Pero el contenido del archivo es sobreescrito y queda así:
"abcdefghijkun geek. Chau" y yo quiero que quede "abcdefghijkHola, soy un geek. Chau"
¿Hay alguna función en el amado PHP que no sobreescriba el contenido del archivo?
Muchísimas gracias de antemano
  #2 (permalink)  
Antiguo 14/06/2007, 19:07
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: fputs() sobreescribe datos

Pues siempre podés usar fread antes de escribir para obtener el contenido actual, y luego hacer

$actual = fread....

fputs($ac, 'abcdefghijk'.$actual);

No será muy lindo, pero funciona


saludos
  #3 (permalink)  
Antiguo 14/06/2007, 20:42
Avatar de marcolandia  
Fecha de Ingreso: febrero-2007
Ubicación: En mi hermosa nación Arge
Mensajes: 107
Antigüedad: 17 años, 9 meses
Puntos: 2
Re: fputs() sobreescribe datos

Cita:
Iniciado por alvlin Ver Mensaje
Pues siempre podés usar fread antes de escribir para obtener el contenido actual, y luego hacer

$actual = fread....

fputs($ac, 'abcdefghijk'.$actual);

No será muy lindo, pero funciona


saludos
La verdad que no se había ocurrido es buena idea...
Pero estoy seguro de que tiene que haber una mejor forma de hacerlo, porque lo tengo que hacer con miles de archivos (es para hacer una "cache" -tipo Google- de las webs indexadas en mi buscador), algunas webs tienen muchos bits por lo que se ocuparía memoria inecesariamente... tiene que haber una forma que consuma menos recursos, sin tener que leer el contenido al divino botón... Pero igualmente muchísimas gracias y mientras encuentro una mejor forma voy a usar tu idea. Muchas gracias
bye
  #4 (permalink)  
Antiguo 14/06/2007, 21:21
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: fputs() sobreescribe datos

Probá así:
Código PHP:
$ac=fopen("prueba","a+");//abrimos el archivo que acabamos de crear
    
fputs($ac,'abcdefghijk',10);//le escribimos esto
    
fclose($ac); //lo cerramos 
Del manual:

'r' Apertura para sólo lectura; ubica el apuntador de archivo al comienzo del mismo.
'r+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo del mismo.
'w' Apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud de cero. Si el archivo no existe, intenta crearlo.
'w+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud cero. Si el archivo no existe, intenta crearlo.
'a' Apertura para sólo escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'a+' Apertura para lectura y escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'x' Creación y apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna. Esta opción es soportada en PHP 4.3.2 y versiones posteriores, y sólo funciona con archivos locales.
'x+' Creación y apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna. Esta opción es soportada en PHP 4.3.2 y versiones posteriores, y sólo funciona con archivos locales.
  #5 (permalink)  
Antiguo 15/06/2007, 05:29
Avatar de marcolandia  
Fecha de Ingreso: febrero-2007
Ubicación: En mi hermosa nación Arge
Mensajes: 107
Antigüedad: 17 años, 9 meses
Puntos: 2
Re: fputs() sobreescribe datos

Cita:
Iniciado por Panino5001 Ver Mensaje
Probá así:
Código PHP:
$ac=fopen("prueba","a+");//abrimos el archivo que acabamos de crear
    
fputs($ac,'abcdefghijk',10);//le escribimos esto
    
fclose($ac); //lo cerramos 
Del manual:

'r' Apertura para sólo lectura; ubica el apuntador de archivo al comienzo del mismo.
'r+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo del mismo.
'w' Apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud de cero. Si el archivo no existe, intenta crearlo.
'w+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud cero. Si el archivo no existe, intenta crearlo.
'a' Apertura para sólo escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'a+' Apertura para lectura y escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'x' Creación y apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna. Esta opción es soportada en PHP 4.3.2 y versiones posteriores, y sólo funciona con archivos locales.
'x+' Creación y apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna. Esta opción es soportada en PHP 4.3.2 y versiones posteriores, y sólo funciona con archivos locales.
Haber... Haber geniecito xD (es broma) con el modo "+a" escribe al final, yo necesito que escriba toda al principio del archivo...
Muchas gracias por la info... No conocía el modo "x"
gracias
  #6 (permalink)  
Antiguo 15/06/2007, 05:36
Avatar de Yranac  
Fecha de Ingreso: junio-2007
Mensajes: 125
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: fputs() sobreescribe datos

No puedes escribir al principio y que el resto se desplace "mágicamente" tendrás que abrirlo, coger lo que hay, juntarlo con lo que quieres añadir al principio y luego meterlo todo.
  #7 (permalink)  
Antiguo 15/06/2007, 05:45
Avatar de marcolandia  
Fecha de Ingreso: febrero-2007
Ubicación: En mi hermosa nación Arge
Mensajes: 107
Antigüedad: 17 años, 9 meses
Puntos: 2
Re: fputs() sobreescribe datos

Cita:
Iniciado por Yranac Ver Mensaje
No puedes escribir al principio y que el resto se desplace "mágicamente" tendrás que abrirlo, coger lo que hay, juntarlo con lo que quieres añadir al principio y luego meterlo todo.
Ahora que me pongo a pensarlo... Tenés razón...
  #8 (permalink)  
Antiguo 15/06/2007, 05:54
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 568
Antigüedad: 19 años
Puntos: 25
Re: fputs() sobreescribe datos

x+ lean lo que dice el manual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:11.