function fopen

Saludos, tengo un problema. ¿Como hacer para que con la funcion fopen pueda escribir en el archivo antes de una determinada etiqueta?
Ya que con
$archivo=fopen("feeds.xml","a+")
echo fgets($archivo, 550, "<br>");
if ($archivo)
{
fputs ($archivo, "<item>");
fputs ($archivo, "<title>".$nombre[0]."</title>");
fputs ($archivo, "<link>http://localhost/SevillaGuapa/".$imagen['url']."</link>");
fputs ($archivo, "<description>subida por: ".$_SESSION['usuario']."</description>");
fputs ($archivo, "</item><br/>");
}
fclose ($archivo);
}
solo consigo escribir al final, y ya tengo cerrada la etiqueta </channel></rss>, con lo que no funca el archivo.
Gracias
Lo mejor de caerse al tropezar, es volverse a levantar.
Eso es por el parametro que le das al archivo : a+

Ahora me pillas con pensamiento python en la cabeza ; pero creo recordar que son similares;Me explico hay varias maneras de manejas archivos a groso modo : escribir , leer y adherir. Osea (w ,r ,a), te paso el link de php que hablo sobre el tema y asi quizás lo entiendas mejor http://php.net/manual/es/function.fopen.php
Holas:

Ya que es un archivo XML, utiliza la clase DOM de PHP para manejar archivos de este tipo. Con esto te ahorrarías tiempo en crear una forma de manejarlos :D. Por otro lado podrías buscar en google xml php.

Saludos.
Ya quisiera yo, dominar como tu dominas php.
No se sabes que soy novato y bastante torpe. Es por esto que dirijo aqui mis dudas, porque se supone que se aclara paso a paso.
Me imagino que esto: (XML_TEXT_NODE (integer) El nodo es un segmento de texto) quiere decir, que si en mi archivo escribo esa constante, me escribirá el segmento que valga la variable integer. Pero no lo sé y no sé como hacerlo.
Tiempo al tiempo.
Lo mejor de caerse al tropezar, es volverse a levantar.
Pero la cuestion es; como escribir dentro de una parte escrita.
Si cambio a por r me escribe desde el principio y no puedo tener repe "<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
<channel>
<title>Mi Sevilla Guapa</title>
<link>http://localhost/SevillaGuapa/principal.php</link>
<description>Web Fotografica de Sevilla</description>
" cada vez que haaya una subida.
Mira este es el archivo feeds.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
<channel>
<title>Mi Sevilla Guapa</title>
<link>http://localhost/SevillaGuapa/principal.php</link>
<description>Web Fotografica de Sevilla</description>

</channel>
</rss>
Pues con el archivo de subida rss.php:
if(!is_uploaded_file($_FILES["imagen"]["tmp_name"]))
{
echo "<b style='color:red'>Error al subir archivo</b>";
}
else {
$tipos = array("image/gif","image/jpeg","image/jpg","image/png");
$maximo = 5000000; //4.7 Mb
if (in_array($_FILES["imagen"]["type"],$tipos) && $_FILES["imagen"]["size"] <= $maximo)
{ 
include("conect.php");
$nombre = ($_FILES["imagen"]["name"]);
$nombre = str_replace(" ","_",$nombre);
$nombre = explode("/.",$nombre);
$peticion = mysql_query("INSERT INTO imagenes(nombre,url,nick) VALUES('".$nombre[0]."','subidas/".$nombre[0]."','".$_SESSION["usuario"]."')") or die(mysql_error());
move_uploaded_file(($_FILES["imagen"]["tmp_name"]),"subidas/".$nombre[0]);	
$verificar = mysql_query("SELECT * FROM imagenes ORDER BY imagen_id DESC LIMIT 0,1");
$numeros = mysql_num_rows($verificar);
if($numeros <= 0)
{
echo "<b style='color: red;'>No se han encontrado imagenes</b><br/>";
}
else {
echo "<br/><h2>Esta es tu imagen subida ".$_SESSION['usuario']."</h2>";
if($imagen = mysql_fetch_array($verificar))
{ 
if(($_FILES['imagen']['size'])>10000)
{
echo "<img width='500' heigh='auto' float='center' src=".$imagen['url'].">";
}
else {
echo "<img float='center' src=".$imagen['url'].">";
}
echo "<br/>".$imagen['nombre'];
echo "<br/><a href='tus_img.php'><h2>Ver tus imagenes.</h2></a>|<a href='mostrar_todas_Img.php'><h2>Ver todas las imagenes</h2></a>";
}
}
//desde aqui es para el rss
$archivo = fopen("feeds.xml" , "a+");
if ($archivo)
{
fputs ($archivo, "<item>");
fputs ($archivo, "<title>".$nombre[0]."</title>");
fputs ($archivo, "<link>http://localhost/SevillaGuapa/".$imagen['url']."</link>");
fputs ($archivo, "<description>subida por: ".$_SESSION['usuario']."</description>");
fputs ($archivo, "</item>");
}
fclose ($archivo);

}
else {
echo "<b style='color: red;'>Revisa la extension o el tamaño del archivo</b></style>";
}
}
Lo que pretendo es que esa subida ingrese en el archivo feeds.xml, antes de la etiqueta </channel></rss> de ese archivo. ¿No se si me explico?
Lo mejor de caerse al tropezar, es volverse a levantar.
Ok, aquí hay una forma simple de hacerlo:

prueba.xml
<?xml version="1.0" ?>
<root>
  <item>
    <value>Valor1</value>
  </item>
  <item>
    <value>Valor2</value>
  </item>
</root>

leer.php
<?php
  $archivo = file_get_contents( 'prueba.xml' ); // $archivo es una cadena de texto con el contenido del archivo.
  $xml = new SimpleXMLElement( $archivo );
  echo $xml->item[0]->value;
?>

En tu caso, la lectura sería así:

<?php
  $archivo = file_get_contents( 'feeds.xml' ); // $archivo es una cadena de texto con el contenido del archivo.
  $xml = new SimpleXMLElement( $archivo );
  echo $xml->item[0]->title . '<br />';
  echo $xml->item[0]->link . '<br />';
?>

Eso sería lo más fácil :P. Aquí hay más ejemplos sobre cómo usar SimpleXMLElement.

Saludos.
Creo que estas hablando de POO php, y eso para mi es igual que si me hablaces en chino.
Por que ¿donde debe ir esto?:
<?php
  $archivo = file_get_contents( 'prueba.xml' ); // $archivo es una cadena de texto con el contenido del archivo.
  $xml = new SimpleXMLElement( $archivo );
  echo $xml->item[0]->title . '<br />';
  echo $xml->item[0]->link . '<br />';
?> 
Ya que he copiao los archivos y solo me dice :Warning: file_get_contents(prueba.xml) [function.file-get-contents]: failed to open stream: No such file or directory in C:\wamp\www\SevillaGuapa\leer.php on line 2

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\wamp\www\SevillaGuapa\leer.php:3 Stack trace: #0 C:\wamp\www\SevillaGuapa\leer.php(3): SimpleXMLElement->__construct('') #1 {main} thrown in C:\wamp\www\SevillaGuapa\leer.php on line 3

y en el archivo .xml no se escribe nada.
Y esto de copiar y pegar sin entender el code no me gusta, ya que no aprendo nada.
Lo mejor de caerse al tropezar, es volverse a levantar.
A ver... POO no es muy relevante, pues basta con entender que se esta creando un objeto ($xml = new Simple...) y luego se llama a las propiedades ($xml->item[0]) que en este caso serán los nodos del archivo xml.

En cuanto a los archivos, ambos errores son lo mismo si me dices que en el archivo xml no se escribe nada. Por lo demás debes entender que lo que yo publiqué es SÓLO para leer el archivo, no para guardarlo. Para guardarlo haría esto:

$out = "<item>
  <title>$nombre[0]</title>
  <link>http://localhost/SevillaGuapa/$imagen[url]</link>
  <description>subida por: $_SESSION[usuario]</description>
  </item>"; // <br /> esta demás.

$archivo = 'feeds.xml';
if( file_put_contents( $archivo, $out ) !== FALSE ) {
  echo "El archivo se guardó.";
}
No se porque se complican tanto con algo simple y sencillo.

primero asegurate de darle permisos a los archivo correspondientes y despues intenta esto:

<?php
//recuerda tus demas variables
//tambien poner la ruta de tu archivo en donde dice TUARCHIVO
$contenido = file_get_contents("TUARCHIVO.XML");
$obtener = strstr($contenido,"</rss>");
$quitar = str_replace("</channel>","",$obtener);
$contenido = str_replace("</rss>","",$quitar);
$nuevocontenido= "
  <title>$nombre[0]</title>
  <link>http://localhost/SevillaGuapa/$imagen[url]</link>
  <description>subida por: $_SESSION[usuario]</description>";
$contenido = $contenido + $nuevocontenido;
$fp = fopen("TUARCHIVO.XML","w+");
$fput = fwrite($fp,$contenido);
$fc = fclose($fp);

?>

Saludos!
No se porque se complican tanto con algo simple y sencillo.

Porque según entendí de esto:

Como hacer para que con la funcion fopen pueda escribir en el archivo antes de una determinada etiqueta

Lo que quiere es insertar contenido en un punto específico, cosa que no se podría hacer (sin complicarse aún más) con las funciones de escritura/lectura de archivos :P.
Digo complicarse por el exceso de respuestas en algo tan simple, no aclaro que sea caso particular el tuyo sino en general, porque le hablas de OOP Y DOM cuando apenas esta en fopen >.< , es por eso que mi funcion inserta en un punto especifico sin usar funciones mas avanzadas, y tienes razon en que con fopen tecnicamente no es posible pero tampoco exagerar usando una libreria de php, en la que no siempre viene por defecto con php y/o se tiene que activar en un php.ini o configurar etc.
Ademas deberia conocer lo que es el arbol de nodos en dom , como lo interpreta un navegador y muchas cosas profundas del tema.


Saludos.
Bueno despues de probar vuestros codes os digo el resultado.
SurKaiser, el tuyo me borra el contenido del archivo y me escribe "0"
skaparate, el tuyo me borra el contenido, tambien, y me escribe la ultima subida. Lo que estaría medio bien si quisiera que en mi RSS sólo hubiera 1 feeds. Que no es el caso.
De modo que viendo lo problematico del tema, voy a hacer una consulta mysql de... por ejemp. las 10 ultimas subidas y que se escriban en el archivo segun se vallan subiendo. Tal que asi:
<?
$verificar = mysql_query("SELECT * FROM imagenes  ORDER BY imagen_id ASC LIMIT 10");
$archivo = fopen("feeds.xml" , "r+");
if ($archivo)
{
fputs ($archivo, '<?xml version="1.0" encoding="ISO-8859-1"?>');
fputs ($archivo, '<rss version="2.0">');
fputs ($archivo, "<channel>");
fputs ($archivo, "<title>Mi Sevilla Guapa</title>");
fputs ($archivo, "<link>http://localhost/SevillaGuapa/principal.php</link>");
fputs ($archivo, "<description>Web Fotografica de Sevilla</description>");
while($imagen = mysql_fetch_array($verificar)) {
fputs ($archivo, "<item>");
fputs ($archivo, "<title>".$imagen[0]."</title>");
fputs ($archivo, "<link>http://localhost/SevillaGuapa/".$imagen['url']."</link>");
fputs ($archivo, "<description>subida por: ".$imagen['nick']."</description>");
fputs ($archivo, "</item>");
}
fputs ($archivo, "</channel>");
fputs ($archivo, "</rss>");
fclose ($archivo);
}
?>
¿Que supongo que está bien?
Lo he retocao
Lo mejor de caerse al tropezar, es volverse a levantar.
Gracias Srs. aunque era laborioso el tema, me ha servido de mucho y he aprendido cosas.
Lo doy por sanjado.
Lo mejor de caerse al tropezar, es volverse a levantar.
Digo complicarse por el exceso de respuestas en algo tan simple, no aclaro que sea caso particular el tuyo sino en general, porque le hablas de OOP Y DOM cuando apenas esta en fopen >.< , es por eso que mi funcion inserta en un punto especifico sin usar funciones mas avanzadas, y tienes razon en que con fopen tecnicamente no es posible pero tampoco exagerar usando una libreria de php, en la que no siempre viene por defecto con php y/o se tiene que activar en un php.ini o configurar etc.
Ademas deberia conocer lo que es el arbol de nodos en dom , como lo interpreta un navegador y muchas cosas profundas del tema.

Es verdad, pero como aprender HTML no es muy complicado :)... En cuanto a SimpleXML, sería raro que un servidor moderno no la active por defecto. Entendería que no se habilitara SSL, pero SimpleXML es muy fácil de instalar (puede ser que el administrador del servidor sea algo "flojo" XD).

skaparate, el tuyo me borra el contenido, tambien, y me escribe la ultima subida. Lo que estaría medio bien si quisiera que en mi RSS sólo hubiera 1 feeds. Que no es el caso.

Me rindo XD. Como te digo en el otro post: al parecer nunca logro ayudarte XD. Lo único que se me ocurre es que no tengas permisos de escritura en la carpeta donde intentas crear el archivo... pero ya da lo mismo pues lo solucionaste tú :D.

Saludos.
Bien , pues mi codigo esta bien, y supongo por el nivel que tiene skaparate tambien ... solo que algo que siempre se da con gjulian es no se tal vez le entendamos mal o algo ya que nunca resulta nuestros codigos y despues dice que lo resolvio >.< ..... por un lado sospechosamente me pongo a pensar que roba nuestros codigos haha (broma) .... bueno a el lo he ayudado desde que entro , yo tenia otro nickname aqui en cctw y siempre me ha pasado igual xD.

@skaparate:
Hmmm claro tienes razon es facil de instalar pero en este caso si quiere comprender lo del xml tardara mas que si usa otras funciones basicas de php es cuestion de que quiera hacer... en el caso de SSL , pienso que estas equivocado ya que se le puede aplicar DOM a un SSL ya que un SSL es un simple encriptamiento de la web ... y se puede usar DOM facilmente y en caso de que no se pueda porque el documento esta compreso basta pasarle un RC4 y usar el DOM.

Saludos
Pa eso estais ayudandonos SurKaiser, pa que os robemos los codigos, sino como íbamos a aprehender. Mira el archivo de subidas y escritura a.xml
<?php  
session_start();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>

<? 
require_once("config.php");
do_html("Sevilla guapa");
?>

<meta name="robots.txt" content="nofollow"/>
<meta name="lang" content="es"/>
<link rel="stylesheet" type="text/css" href="estyl.css" media="all" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>

<?

cabezera("Sevilla Guapa","<img alt='banse' src='imagenes/inicio/banse.png' height='90' title='Bandera de Sevilla' />",
"<img alt='circuito' src='imagenes/inicio/circuito.jpg' height='90' />");
menu();

if(!is_uploaded_file($_FILES["imagen"]["tmp_name"]))
{
echo "<b style='color:red'>Error al subir archivo</b>";
}
else {
$tipos = array("image/gif","image/jpeg","image/jpg","image/png");
$maximo = 5000000; //4.7 Mb
if (in_array($_FILES["imagen"]["type"],$tipos) && $_FILES["imagen"]["size"] <= $maximo)
{ 
include("conect.php");
$nombre = ($_FILES["imagen"]["name"]);
$nombre = str_replace(" ","_",$nombre);
$nombre = explode("/.",$nombre);
$peticion = mysql_query("INSERT INTO imagenes(nombre,url,nick) VALUES('".$nombre[0]."','subidas/".$nombre[0]."','".$_SESSION["usuario"]."')") or die(mysql_error());
move_uploaded_file(($_FILES["imagen"]["tmp_name"]),"subidas/".$nombre[0]);	
$verificar = mysql_query("SELECT * FROM imagenes ORDER BY imagen_id DESC LIMIT 0,1");
$numeros = mysql_num_rows($verificar);
if($numeros <= 0)
{
echo "<b style='color: red;'>No se han encontrado imagenes</b><br/>";
}
else {
echo "<br/><h2>Esta es tu imagen subida ".$_SESSION['usuario']."</h2>";
if($imagen = mysql_fetch_array($verificar))
mysql_free_result($verificar); //Aqui libramos memoria del querry
{ 
if(($_FILES['imagen']['size'])>10000)
{
echo "<img width='500' heigh='auto' float='center' src=".$imagen['url'].">";
}
else {
echo "<img float='center' src=".$imagen['url'].">";
}
echo "<br/>".$imagen['nombre'];
echo "<br/><a href='tus_img.php'><h2>Ver tus imagenes.</h2></a>|<a href='mostrar_todas_Img.php'><h2>Ver todas las imagenes</h2></a>";
}
}
}
else {
echo "<b style='color: red;'>Revisa la extension o el tamaño del archivo</b></style>";
}
}
//desde aqui es para el rss
$verificar = mysql_query("SELECT * FROM imagenes  ORDER BY imagen_id DESC LIMIT 10");
$archivo = fopen("feeds.xml" , "w+");
if($archivo){
fputs ($archivo, '<?xml version="1.0" encoding="ISO-8859-1"?>');
fputs ($archivo, '<rss version="2.0">');
fputs ($archivo, "<channel>");
fputs ($archivo, "<title>Mi Sevilla Guapa</title>");
fputs ($archivo, "<link>http://localhost/SevillaGuapa/principal.php</link>");
fputs ($archivo, "<description>Web Fotografica de Sevilla</description>");

while($imagen = mysql_fetch_array($verificar)) {
fputs ($archivo, "<item>");
fputs ($archivo, "<title>".$imagen['nombre']."</title>");
fputs ($archivo, "<link>http://localhost/SevillaGuapa/".$imagen['url']."</link>");
fputs ($archivo, "<description>subida por: ".$imagen['nick']."</description>");
fputs ($archivo, "</item>");
}
fputs ($archivo, "</channel>");
fputs ($archivo, "</rss>");
fclose ($archivo);
}
piePuzdle("<a href='".$_SERVER['HTTP_REFERER']."'>Volver</a>","<a href='logout.php'>Logout</a>","");
?>
Gracias un poquito a ti, otro poquito a otros (no os voy a nombrar a todos), se me aclaran las ideas y voy entendiendo el significado de los codes. Os recuerdo que soy autodidacta de la red. [:D][:D]
Lo mejor de caerse al tropezar, es volverse a levantar.
Bueno el punto es aprender y lograrlo lo demas esta demas.

Que bien que lo hayas logrado y pues que decir sigue asi y llegaras lejos xD.
A mi edad, me doy por satisfecho con estos pequeños logros y con llegar andando al catre todos los dias.
Pero gracias por tus buenos deseos, que son reciprocos.
Lo mejor de caerse al tropezar, es volverse a levantar.
¿Que edad tienes? ... juzgando que dices tener poca edad y viendo que entraste a cctw un poco despues que yo .... pienso que podrias tener 16? .... en fin me queda la duda y decirte que no hay que comentar solo por las apariencias asi que te dire mi edad si tu me dices la tuya xD
Hmmm claro tienes razon es facil de instalar pero en este caso si quiere comprender lo del xml tardara mas que si usa otras funciones basicas de php es cuestion de que quiera hacer... en el caso de SSL , pienso que estas equivocado ya que se le puede aplicar DOM a un SSL ya que un SSL es un simple encriptamiento de la web ... y se puede usar DOM facilmente y en caso de que no se pueda porque el documento esta compreso basta pasarle un RC4 y usar el DOM.

Aprender requiere tiempo, pero es entretenido... en realidad da igual, es cuestión de gustos y como tú dices, dependerá de Él :D.

Respecto a SSL, sólo me refería a la instalación y configuración de esta extensión en el servidor, no a su uso con los lenguajes de programación/script; estaba hablando bajo el contexto del administrador del servidor, no como usuario :).

En cuanto al problema principal, que bueno que lo solucionaste gjulian :D. Ya que eres autodidacta, en algún momento deberías aprender OOP, que no es tan difícil como lo dicen y XML que es simplemente HTML con otra sintaxis.

Saludos.
Os cuento, tengo 57 añazos, soy padre de una hermosa hija que hoy cumple 23 y mi esposa tiene 2 mas que yo. Mi profesion me ocupa diariamente de 14 a 16 horas (aunque ahora estoy en paro), y no tengo relacion con la informatica; me dió por crear una web porque me regalaron un portatil y me aburría el no saber crear nada con el (eso fué poco antes de ingresar aquí) , y es la curiosidad por aprender cosas nuevas las que estan haciendo que entre en temas tan complicaos (para mi), como son los lenguajes de programacion. No tengo estudios superiores. Mis amistades no son del mundo de la informatica. Y yo no puedo ni quiero pararme a estudiar ahora, la vida es dura.
Es por esto ultimo que digo que soy autodidacta.
Bueno ya me conoceis algo mas.
Y siento envidia sana de vosotros, que si os imagino jovenes y relacionados laboralmente o por estudios, con este mundillo.
En fin si alguna vez he parecido desagradecido, pido disculpas humildemente. Y si os puedo ayudar en algo que esté en mi mano, no dudeis en pedirmelo. (El que no llora no mama)
Saludos
Lo mejor de caerse al tropezar, es volverse a levantar.
Felicitaciones entonces por querer aprender :D. Todo buen científico o ingeniero es un autodidacta, como el gran Leonardo Da' Vinci.

Sigue adelante, saludos.