Foros del Web » Programando para Internet » PHP »

¿Por qué se suman 2 si es 1?

Estas en el tema de ¿Por qué se suman 2 si es 1? en el foro de PHP en Foros del Web. Hola primero el código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <?php #Controlando las solicitudes de página $path = 'data/visitas_index.php' ; $mode = 'c+' ; $gestor ...
  #1 (permalink)  
Antiguo 13/07/2012, 16:23
Avatar de kendall00  
Fecha de Ingreso: septiembre-2011
Ubicación: $Ubicacion => ['Costa Rica'];
Mensajes: 85
Antigüedad: 13 años, 3 meses
Puntos: 5
Pregunta ¿Por qué se suman 2 si es 1?

Hola primero el código:

Código PHP:
Ver original
  1. <?php
  2. #Controlando las solicitudes de página
  3. $path = 'data/visitas_index.php';
  4. $mode = 'c+';
  5. $gestor = fopen($path,$mode);
  6. //Leer el contenido
  7. $contenido = fread($gestor,filesize($path));
  8. //Declarar la variable segun el contenido
  9. $visitas = $contenido;
  10. //Cierro el documento
  11. fclose($gestor);
  12. //Añadir está visita
  13. //Declaro el modo y lo abro (Se formatea el archivo 'Trunca')
  14. $mode_nuevo = 'w';
  15. $gestor_nuevo = fopen ($path, $mode_nuevo);
  16. //Delaro la variable a escribir incluyendo está visita
  17. $write_this = $visitas + 1;
  18. //Escribo la nueva cifra
  19. fwrite ($gestor_nuevo,$write_this);
  20. //Cierro el documento
  21. fclose ($gestor_nuevo);
  22. ?>

En teoria cada vez que se solicita la página se carga el archivo visitas_index.php, se declara la variable $visitas conforme a los datos del archivo $path, todo bien hasta ahí, ahora registro está "visita" (Aunque sé que no lo es, es solo un ejemplo); según: $write_this = $visitas + 1; la variable $write_this debe contener el número de visitas totales registradas en el documento $path más está (el +1), al final lo cierro y muestro el valor de la variable al usuario.

El problema:...
El código debe hacer un +1 en el documento, reemplazando el valor existente por el nuevo (valor de $write_this) pero no sé por que hace un +2, es decir si tengo valor 10 en el documento $path después de todo el proceso queda en 12, cuando debería estar en 11. No sé que hice mal. Por favor si alguien puede decirme que hice mal, se lo agradecería montones.

Aclaración
No hago las validaciones file_exists ni is_writable ya que sé que existe y es editable.
El archvo $path está en el servidor local y no en otro servidor, no utilizo SSL (HTTPS) ni FTP.
  #2 (permalink)  
Antiguo 13/07/2012, 17:04
Avatar de kendall00  
Fecha de Ingreso: septiembre-2011
Ubicación: $Ubicacion => ['Costa Rica'];
Mensajes: 85
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: ¿Por qué se suman 2 si es 1?

Alguien... bueno mientras detecto el error creo que el resultado siempre es un # par entonces a la hora de dar el resultado voy a ser:
Código PHP:
Ver original
  1. echo 'Visitas: ' . $visitas/2
Asi disimulo el error.
  #3 (permalink)  
Antiguo 13/07/2012, 18:10
 
Fecha de Ingreso: diciembre-2004
Mensajes: 21
Antigüedad: 20 años
Puntos: 3
Respuesta: ¿Por qué se suman 2 si es 1?

Excepto este error al hacer la prueba por primera vez:
---------------------------------------
Warning: fread() [function.fread]: Length parameter must be greater than 0 in ..\forosdelweb\index.php on line 7
---------------------------------------
que es cuando visitas_index.php no registro ninguna visita el resto funciona bien. Incrementando en 1 cada vez que se carga la pagina.
  #4 (permalink)  
Antiguo 13/07/2012, 18:19
Avatar de kendall00  
Fecha de Ingreso: septiembre-2011
Ubicación: $Ubicacion => ['Costa Rica'];
Mensajes: 85
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: ¿Por qué se suman 2 si es 1?

¿Perdon? No entendi!!!!
  #5 (permalink)  
Antiguo 13/07/2012, 18:25
Avatar de kendall00  
Fecha de Ingreso: septiembre-2011
Ubicación: $Ubicacion => ['Costa Rica'];
Mensajes: 85
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: ¿Por qué se suman 2 si es 1?

Podrias explicarte por favor!
  #6 (permalink)  
Antiguo 13/07/2012, 18:33
 
Fecha de Ingreso: diciembre-2004
Mensajes: 21
Antigüedad: 20 años
Puntos: 3
Respuesta: ¿Por qué se suman 2 si es 1?

Hola kendall00:
Al hacer la prueba con el codigo que diste, vi que funciona bien, incrementa el valor de las visitas en uno.
El herror que hice referencia, es respecto de 'fread()' que no acepta valores menores que uno. Esto se da cuando 'visitas_index.php' no registro ninguna visita.
Despues el codigo trabaja bien. El contador suma de 1.
  #7 (permalink)  
Antiguo 13/07/2012, 18:39
Avatar de kendall00  
Fecha de Ingreso: septiembre-2011
Ubicación: $Ubicacion => ['Costa Rica'];
Mensajes: 85
Antigüedad: 13 años, 3 meses
Puntos: 5
Respuesta: ¿Por qué se suman 2 si es 1?

Claro ya te entendi, a la hora de cargar el documento $path si está en blanco da el error que tu mencionaste, pero yo empiezo desde 0, es decir no está en blanco, y me suma de 2 en 2... por que?
  #8 (permalink)  
Antiguo 13/07/2012, 18:47
 
Fecha de Ingreso: diciembre-2004
Mensajes: 21
Antigüedad: 20 años
Puntos: 3
Respuesta: ¿Por qué se suman 2 si es 1?

El la prueba que hice con tu codigo, incrementa de 1.
Abri las dos paginas, el 'index.php' con el codigo que diste y 'visitas_index.php'.
Luego
Actualizas o cargas de nuevo el 'index.php'.
Luego actualizas o cargas el 'visitas_index.php'. y tiene que estar incremenado en 1.
Al menos asi me funciono.

Etiquetas: kendall00
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 23:34.