PHP - Pequeño problema con ficheros

 
Vista:
Imágen de perfil de Álvaro
Val: 65
Ha disminuido su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Pequeño problema con ficheros

Publicado por Álvaro (22 intervenciones) el 13/10/2019 14:40:52
Buenas tardes, estoy haciendo un pequeño ejercicio con ficheros y POO donde muestro "comentarios" hechos por los usuarios. Los muestro sin ningún problema, sin ser que me genera un bucle infinito que no entiendo porqué se genera. Aquí dejo el PHP donde se encuentra el trabajo con el fichero:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
require_once "Linea.php";
include_once "Formulario.html";
 
$comentario = null;
 
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['comentario'])) {
        $comentario = $_POST['comentario'];
    } else {
        echo "<span style='color:red'>No se pueden publicar comentarios vacíos.</span>";
    }
}
 
function publicarComentarios($commentary)
{
    $post = new Linea($commentary);
 
    if (!file_exists("comentarios.txt")) {
        $fichero = fopen("comentarios.txt", "w");
    } else {
        $fichero = fopen("comentarios.txt", "a");
    }
 
    fputs($fichero, $commentary . "\r\n");
 
    fclose($fichero);
 
    $fichero = fopen("comentarios.txt", "r");
    rewind($fichero);
 
    while (!feof($fichero)) {
        $post->imprimir();
    }
 
    fclose($fichero);
}
 
publicarComentarios($comentario);

Y la clase Linea aquí:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Linea
{
 
 
    private $linea;
 
    public function __construct($newLine)
    {
        $this->linea = $newLine;
    }
 
    public function imprimir()
    {
        echo "<p style='font-weight:bold'>" . date("d-m-y h:i:s") . " " . $this->linea . "</p>";
    }
}

La clase Linea no hace mucho, es algo muy simple, y sería más rápido no usarla lo sé, pero no estoy acostumbrado a la Orientación a Objetos y quiero practicarlo. Agradecería cualquier consejo/ayuda

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Pequeño problema con ficheros

Publicado por Joel (1269 intervenciones) el 14/10/2019 08:35:55
Hola Álvaro, el problema lo tienes en este bucle:
1
2
3
while (!feof($fichero)) {
    $post->imprimir();
}

Haces un bucle hasta llegar al final del archivo, pero nunca lees el contenido del mismo, por lo que el bucle no se termina nunca.
Un ejemplo para que funcione:
1
2
3
4
while (!feof($fichero)) {
    $contenido=fread($fichero, 8192);
    $post->imprimir();
}

En cada iteración del bucle, leerá 8192 bytes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Álvaro
Val: 65
Ha disminuido su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Pequeño problema con ficheros

Publicado por Álvaro (12 intervenciones) el 14/10/2019 11:17:26
Muchas gracias por su respuesta. ¿El parámetro de 8192 bytes, cómo sé que sería ese exactamente?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar