Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: The_Saint en 21 Enero 2014, 11:56 am



Título: Duda ejercicio 506 PHP
Publicado por: The_Saint en 21 Enero 2014, 11:56 am
Buenas a todos!

Estoy empezando con PHP, y estoy haciendo los ejercicios del portal :
http://foro.elhacker.net/ejercicios/ejercicios_php-t36010.0.html (http://foro.elhacker.net/ejercicios/ejercicios_php-t36010.0.html)
El caso es que en el ejercicio 506 que ya he resuelto, en la funcion fwrite tengo que añadir al final un 26 para que me funcione.

Código:
<html>
<title>506. Hacer un contador de visitas con un archivo txt</title>
<?php
//Ahora leemos el fichero
$fp =fopen("contador.txt","r");
while(!feof($fp))
{
$linea=fgets($fp);
$visitas=$linea;
}
$visitas = $visitas +1;
fclose($fp);

$fp=fopen("contador.txt","w+");
fwrite($fp,$visitas,26);
fclose($fp);


?>

<body>
<h2>506. Hacer un contador de visitas con un archivo txt</h2>
Es usted la visita numero:<h1> <?php echo $visitas; ?> </h1>
</body>
</html>

La sintaxis de la funcion es :
int fwrite ( resource $handle , string $string [, int $length ] )

Entiendo que int $lenght es opcional, por lo que no entiendo porque si no lo pongo no funciona.

Si alguien pudiera aclarme su uso gracias!!! de antemano! :rolleyes:


Título: Re: Duda ejercicio 506 PHP
Publicado por: karmany en 25 Enero 2014, 11:56 am
Hola!

Haces primero un bucle hasta el final del archivo:
Código
  1. while(!feof($fp)){...}
y en ese bucle vas obteniendo el contenido pero dependiendo del número de líneas. Si hay varias líneas te dará un valor no válido porque solo obtendrá la última línea (lo hago de cabeza, no puedo ahora probarlo).
YO hubiese puesto directamente esto (intval para que devuelva un valor entero):
Código
  1. $visitas = intval( fgets( $fp ));

En tu código podrías ahorrarte también una variable:
Código
  1. $linea=fgets($fp);
  2. $visitas=$linea;
por
Código
  1. $visitas=fgets($fp);

Lo de aumentar las visitas queda menos "VB" así:
Código
  1. $visitas++;

Finalmente abres el archivo en modo lectura-escritura (w+), yo creo que sobra con escritura (w). A ver si con estos cambios ya te funciona bien..

Un saludo