Problema con fopen

Iniciado por juanfelice7, 11 Diciembre 2014, 09:51 AM

0 Miembros y 1 Visitante están viendo este tema.

juanfelice7

Hola a todos!
Quiero contarles que mis conocimientos de PHP son escasos, pero me las ingenié para llegar a esto.
Lo que estoy haciendo es escribir en un TXT, pero lo que quiero hacer (y me está dando problemas) es re-escribir en el archivo, pero sin borrar su contenido.
Para eso usé "r+" porque necesitaba escribir a partir del comienzo del archivo, pero lo que hace es (de todas maneras) reemplazar los caracteres siguientes.
¿Cómo puedo escribir al principio de un archivo manteniendo el resto del contenido?

Les dejo todo mi código, que es muy pequeño, pero que me está dando dolores de cabeza.
¡Y desde ya muchísimas gracias!
Juan

Código (php) [Seleccionar]

<html>
<head>
<title>Cartelera</title>
<meta name="robots" content="noindex">
<meta name="googlebot" content="noindex">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>Cartelera</h1>
<?php
   $ar
=fopen("./wp-content/themes/reco/datos.txt","r+") or
    die(
"ERROR.");
  
fputs($ar,"\n");
  
fputs($ar,"<h6>");
  
fputs($ar,$_REQUEST['titulo']);
  
fputs($ar,"</h6>");
  
fputs($ar,"\n");
  
fputs($ar,"<p>");
  
fputs($ar,$_REQUEST['contenido']);
  
fputs($ar,"</p>");
  
fputs($ar,"<hr width='100%'>");
  
fputs($ar,"<br>");
  
utf8_encode($ar);
  
fclose($ar);
  echo 
"Los datos se cargaron correctamente.";
  
?>

</body>
</html>


Mod: Etiquetas GeSHi obligatorias. Posts sobre PHP van al subforo de PHP.

#!drvy

Ese comportamiento es normal porque empiezas a escribir desde el principio del archivo hacia abajo. Lo que tienes que hacer es leer el archivo (obtener en contenido anterior) y escribir ambas cosas (lo nuevo y lo viejo).

Código (php) [Seleccionar]
$archivo = '/wp-content/themes/reco/datos.txt';
$ar=fopen($archivo,"r+") or die("ERROR.");

$_data = fread($ar,filesize($archivo));

fputs()...

fputs($ar,$_data);
fclose($ar);

echo "Los datos se cargaron correctamente.";


El utf8_encode($ar) es incorrecto ahí. No se que intenciones tenias con el pero esa función utiliza strings, no objetos.

Saludos

juanfelice7

Me sirvió muchísimo tu ayuda!! De todas formas algo sigue fallando.

Cuando publico un nuevo anuncio me parece el texto anterior tanto arriba como abajo.
Por ej.

Publico "1" y se escribe "1"
Publico "2" y se escribe "1 2 1"
Publico "3" y se escribe "1 2 1 3 1 2 1"

Tendría que bloquear que lo pegue también arriba, sólo abajo. ¿Es así? ¿cómo lo lograría?
Gracias de nuevo!