Foros del Web » Programando para Internet » PHP »

comprobar si se escribio bien el archivo con php?

Estas en el tema de comprobar si se escribio bien el archivo con php? en el foro de PHP en Foros del Web. Hola amigos Tengo una duda. actualmente estoy creando mis sitemap.xml automaticamente desde php cada vez que el usuario hace un cambio en la web $file=fopen("sitemap.xml","w+"); ...
  #1 (permalink)  
Antiguo 25/07/2008, 06:27
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 17 años
Puntos: 6
comprobar si se escribio bien el archivo con php?

Hola amigos

Tengo una duda.

actualmente estoy creando mis sitemap.xml automaticamente desde php cada vez que el usuario hace un cambio en la web

$file=fopen("sitemap.xml","w+");
fwrite ($file,$buffer);
fclose($file);

el problema es que, muy pocas veces pero alguna vez el archivo no se a escrito completamente no llegando a terminar completamente el contenido.

como podria verificar si el archivo fue escrito completamente? para en el caso de no ser asi volver a repetir la escritura?


como nota puedo decir que la re-escritura siempre debe terminar con </urlset> por si la idea fuera comprobar la ultima linea.


Gracias a todos

Un saludo
  #2 (permalink)  
Antiguo 25/07/2008, 14:48
Avatar de xbx
xbx
 
Fecha de Ingreso: mayo-2008
Ubicación: /home/xbx
Mensajes: 301
Antigüedad: 11 años, 6 meses
Puntos: 11
Respuesta: comprobar si se escribio bien el archivo con php?

Veo que lo que quieres es mantener actualizado tu sitemap.xml.

Te presento una alternativa.

Puedes hacer que tu script php en vez de escribir en un archivo xml saque los datos con un echo. Llamaras a tu archivo: sitemap.php
Luego cuando uno ejecuta dicho archivo lo que obtiene es el xml del sitemap.

Entonces podemos hacer que cuando alguien solicite sitemap.xml tu servidor devuelva la ejecucion de sitemap.php. Todo esto mediante una simple linea en tu archivo .htaccess que debe encontrarse en la raiz de tu sitio. (solo si tu servidor es apache)

Debes colocar las siguientes lineas en tu .htaccess :

Código:
Options +FollowSymLinks
RewriteEngine on

RewriteRule sitemap.php sitemap.xml [L]
Vale aclarar que esto no es "redirect".

tanto los sitemap y .htaccess deben estar en la raiz para que todo funcione asi como te lo pasé.

Espero te sea de utilidad.
Saludos!
  #3 (permalink)  
Antiguo 25/07/2008, 15:45
 
Fecha de Ingreso: julio-2008
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 6
Respuesta: comprobar si se escribio bien el archivo con php?

Tambien podrias probar flusheando el buffer antes de cerrar el archivo.
Código PHP:
$file=fopen("sitemap.xml","w+");
fwrite ($file,$buffer);
fflush($file);
fclose($file); 
Saludos.
  #4 (permalink)  
Antiguo 26/07/2008, 09:10
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 17 años
Puntos: 6
Respuesta: comprobar si se escribio bien el archivo con php?

Gracias a todos


xbx .. vaya!! como no se me habra ocurrido esto a mi antes, todo el web lo tengo usuando modrewrite y el sitemap.xml lo actualizo desde un archivo php que se ejecuta automaticamente, asi que el no haber caido en esto antes es de tontossssssssss :( jajaja.. muchas gracias por iluminarme, sin duda es lo mas recomendable.

Thaorius
no se q devuelve fflush si el archivo no se escribio correctamente, era la respuesta que esperaba la verdad, pero despues de la idea de xbx no creo que me la plantee..


gracias a los dos..

un saludo.
  #5 (permalink)  
Antiguo 26/07/2008, 12:10
Avatar de xbx
xbx
 
Fecha de Ingreso: mayo-2008
Ubicación: /home/xbx
Mensajes: 301
Antigüedad: 11 años, 6 meses
Puntos: 11
Respuesta: comprobar si se escribio bien el archivo con php?

De nada!

Recuerda poner:
Código PHP:
header("Content-type: text/xml"); 
al inicio de sitemap.php



--edito--
Me corrijo, la rewriterule quedaría asi:

Cita:
RewriteRule sitemap.xml sitemap.php [L]
(al revés, primero .xml y luego .php)
Saludos!!
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 11:06.