Foros del Web » Programando para Internet » PHP »

Contador en PHP

Estas en el tema de Contador en PHP en el foro de PHP en Foros del Web. He realizado un contador de visitas para mi página Web con el siguiente código, y solamente me cuenta una vez, no continua contando. NO veo ...
  #1 (permalink)  
Antiguo 07/05/2009, 11:28
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Contador en PHP

He realizado un contador de visitas para mi página Web con el siguiente código, y solamente me cuenta una vez, no continua contando. NO veo donde puede estar el error, por favor si alguien puede ayudarme se lo agradecería. El código que he utilizado es el siguiente:

<?
// Archivo en donde se acumulará el numero de visitas
$archivo = "numero.dat";
// Abrimos el archivo para solamente leerlo (r de read)
$abre = fopen($archivo, "r");
// Leemos el contenido del archivo
$total = fread($abre, filesize($archivo));
// Cerramos la conexión al archivo
fclose($abre);
// Abrimos nuevamente el archivo
$abre = fopen($archivo, "w");
// Sumamos 1 nueva visita
$total = $total + 1;
// Y reemplazamos por la nueva cantidad de visitas
$grabar = fwrite($abre, $total);
// Cerramos la conexión al archivo
fclose($abre);
// Imprimimos el total de visitas dándole un formato
echo "<font face='verdana' size='2'>Visitas:".$total."</font>";
?>

Gracias.
  #2 (permalink)  
Antiguo 07/05/2009, 13:05
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Contador en PHP

Que pasa si el archivo no se puede abrir o no existe?

Código php:
Ver original
  1. // Leer y asegurar de que tendra un valor numerico entero
  2. // Si el archivo no existe, $total sera cero
  3. $total = intval(file_get_contents($archivo));
  4.  
  5. // Incrementas el total
  6. $total ++;
  7.  
  8. // Cuando vas a grabar el nuevo resultado:
  9. $abre = fopen($archivo, "w");
  10. if(!$abre)
  11.     die('No se pudo crear el archivo del contador.');
  12.  
  13. // Aqui continuas el proceso para actualizarlo.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 08/05/2009, 05:42
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Gracias Triby por responderme. He probado lo que me comentas y he cambiado el código del contador por el siguiente:
<?
// Archivo en donde se acumulará el numero de visitas
$archivo = "numero.dat";
// Abrimos el archivo para solamente leerlo (r de read)
$abre = fopen($archivo, "r");
// Leemos el contenido del archivo
$total = fread($abre, filesize($archivo));
// Si el archivo no existe, $total sera cero
$total = intval(file_get_contents($archivo));
// Incrementas el total
$total ++;
// Cuando vas a grabar el nuevo resultado:
$abre = fopen($archivo, "w");
if(!$abre)
die('No se pudo crear el archivo del contador.');
// Y reemplazamos por la nueva cantidad de visitas
$grabar = fwrite($abre, $total);
// Cerramos la conexión al archivo
fclose($abre);
// Imprimimos el total de visitas dándole un formato
echo "<font face='verdana' size='2'>Visitas:".$total."</font>";
?>

Lo he probado y no funciona, porque el mensaje que me sale en pantalla es 'No se pudo crear el archivo del contador' y no llega ni a cargarse la página Web. No sé c´ómop solucionar el problema y tampoco por qué no se puede crear dicho archivo. Gracias.

Se me olvidaba comentaros que el fichero del contador numero.txt ya estaba creado en mi sitio web. Saludos.

Última edición por GatorV; 08/05/2009 a las 09:27
  #4 (permalink)  
Antiguo 08/05/2009, 05:53
Usuario no validado
 
Fecha de Ingreso: octubre-2008
Ubicación: BRUSELAS
Mensajes: 211
Antigüedad: 15 años, 5 meses
Puntos: 3
Respuesta: Contador en PHP

$abre = fopen($archivo, "w");

prueba con

$abre = fopen($archivo, "a");
o quizas con
$abre = fopen($archivo, "a+");

si el archivo ya existe( lo has creado tu, pon 0 dentro del archivo)

suerte
  #5 (permalink)  
Antiguo 08/05/2009, 13:14
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Contador en PHP

La linea $total = intval(file_get_contents($archivo)); reemplaza todo el proceso de lectura que hacias originalmente, fopen() - fread() y fclose()... me imagino que el error puede ser:

1- Abres el archivo con fopen()
2- Tratas de leer el contenido con fread()
3- Tratas de leer nuevamente el contenido con file_get_contents()
4- NO CIERRAS EL ARCHIVO, te falta un fclose()
5- Tratas de abrir nuevamente el archivo con fopen(), pero sigue abierto y por eso te da el error.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 08/05/2009, 18:21
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Contador en PHP

prueba este asi como esta ->
(Ojo: el archivo numero.dat debe existir y puedes ponerle un 0 dentro.)

<?
$archivo = "numero.dat";
$abre = file("$archivo");
$total = $abre[0];
$abre = fopen($archivo, "w");
$total = $total + 1;
$grabar = fwrite($abre, $total);
fclose($abre);
echo "<font face='verdana' size='2'>Visitas:".$total."</font>";
?>

Resultado: cada vez que lo corras se incrementara en uno el contenido
de numero.dat
Saludos
Franco
  #7 (permalink)  
Antiguo 11/05/2009, 02:45
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contador en PHP

Gracias a todos por vuestro apoyo. He probado el contador de Franco y me cuenta solamente la primera vez, luego deja de contar. Cuenta solamente cuando detecta un cambio en el fichero, pero posteriormente deja de contar. No sé si es que no es capaz de abrir el fichero para introducir por él mismo los cambios que se le han dicho que efectue. El caso es que no funciona, al igual que el mio, falla en el mismo sitio. Saludos.
  #8 (permalink)  
Antiguo 11/05/2009, 03:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 2
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Contador en PHP

prueba a dar al archivo todos los permisos con
Código PHP:
chmod("ruta al archivo",0777); 
  #9 (permalink)  
Antiguo 12/05/2009, 05:50
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contador en PHP

Gracias pasblin, he probado lo que me comentas, pero tampoco funciona. Aunque le he asignado los permisos que me indicas, al fichero en cuestión, sigue sin contar, solamente cuenta la primera vez que ha detectado cambio en el fichero.

También he probado lo que me comenta Triby en su respuesta y he modifcado el contador de la siguiente manera, en la que ya cierro el fichero antes de intentar abrirlo de nuevo, pero sigue fallando y no consigo que funcione:
<?
// Archivo en donde se acumulará el numero de visitas
$archivo = "numero.dat";
// Si el archivo no existe, $total sera cero
$total = intval(file_get_contents($archivo));
// Incrementas el total
$total ++;
// Cerramos la conexión al archivo
fclose($abre);
// Cuando vas a grabar el nuevo resultado:
$abre = fopen($archivo, "w");
if(!$abre)
die('No se pudo crear el archivo del contador.');
// Y reemplazamos por la nueva cantidad de visitas
$grabar = fwrite($abre, $total);
// Cerramos la conexión al archivo
fclose($abre);
// Imprimimos el total de visitas dándole un formato
echo "<font face='verdana' size='2'>Visitas:".$total."</font>";
?>

Gracias a todos por vuestra ayuda.
  #10 (permalink)  
Antiguo 14/05/2009, 02:31
 
Fecha de Ingreso: marzo-2009
Mensajes: 37
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Contador en PHP

¡Compañeros! he dado con el problema del contador. El que os he adjuntado inicialmente funciona correctamente, el problema estaba en que el fichero numero.dat o numero.txt que se crea, cuando lo tenemos en el servidor, debemos editar sus propiedades y permitir todas las funcionas de lectura, escritura y ejecución. Os agradezco a todos vuestra ayuda, por ese motivo quiero compartir con vosotros el haber dado con la solución del problema, por si a algún compañero puede venirle bien este contador, ya que yo también me estoy iniciando en la programación en PHP y la verdad que es un mundo apasionante y complicado a la vez, para aquellos que no tenemos experiencia. 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 03:30.