contar lineas

Battosai

Buenas!! A ver si me puede alguien ayudar.. otra vez xD! Me gustaria que este archivo pudiera contar cada linea que escribe el fwrite i lo escriba al principio. He intentado esto de aqui abajo (asi veis el codigo i me entendeis mejor porque me expreso fatal xD):
<?
$log = "log.txt";
$gestor = fopen($log, "a+");
$i = 0;
$escriu = fwrite($gestor,$i++."<camps>".$POST['topic']."<camps>".$POST['miss']."<camps>"."<fi>"."\n");
rewind($gestor);
$contenido = fread( $gestor, filesize($log));
$contenido = str_replace("xD","",$contenido);
fclose($gestor);
$fi = explode("<fi>", $contenido);
$i=0;
while(isset($fi[$i])){

$camp = explode("<camps>", $fi[$i]);
echo "$camp[0]<br>"; // aqui deberia aparecer 1, 2 , 3 ,...i el numero de lineas que hubiera escrito. El caso es que aparece 0.
$i=($i+1);

}




?>

xBoSS

y esto es COBOL dices? o era FORTRAN?

Battosai

php

guner

<?php

error_reporting(E_ALL);

$POST['topic'] = "TOPIC";
$
POST['miss'] = "PERO MIRA COMO BEBEN LOS PECES EN EL RIO...";

Es que lo estoy ejecutando desde consola : $

$log = "log.txt";

$gestor = fopen($log, "a+");
$contenido = fread($gestor, filesize($log) + 1);
preg_match('#([0-9]+)<camps>.<camps>.<camps><fi>\n*$#', $contenido, $results);
$n = $results[1];
fwrite($gestor, ++$n . "<camps>${POST['topic']}<camps>${POST['miss']}<camps><fi>\n");
fclose($gestor);

$fi = explode('<fi>', $contenido);

$i = 0;
while(@isset($fi[$i])) {
&nbsp;&nbsp;&nbsp;&nbsp;$camp = explode('<camps>', $fi[$i++]);
&nbsp;&nbsp;&nbsp;&nbsp;echo $camp[0];
}

NOTA: Si vas a trabajar tanto usando archivos a modo de bases de datos deberías mirarte las expresiones regulares.

Battosai

no me funciona :S.
Realmente lo que debo hacer es asignarle a cada topic un link diferente (estoy haciendo un foro sin usar mysql) es decir :

Lo del link lo puedo hacer si el archivo que almacena los mensajes
contiene una clave única, es decir que los mensajes vayan numerados. En ese
caso haría un link tipo:

href="vermensaje.php?idmensaje=<?php echo $registro[$i][0]; ?>"

de manera que para cada valor de la $i en el bucle de mostrar los topics se
va creando un link especifico para cada mensaje, el resultado de cada link
seria:

href="vermensaje.php?idmensaje=1"
href="vermensaje.php?idmensaje=2"
href="vermensaje.php?idmensaje=3"
etc...

y así el archivo vermensaje.php mira en la variable $_GET[idmensaje] cual es
el codigo del mensaje que ha de mostrar. Abre el archivo de mensajes y
muestra aquel cuya clave coincide con el idmensaje. El caso es que nose como hacer todo esto, ya que para empezar, nose ni contar los mensajes xD. Guner si has entendido el proposito me podrias proponer algo por favor? es importante, gracias

guner

Hombre, básicamente lo que yo he arreglado es que tú siempre escribias en log.txt esto:

0<camps>...<camps>...<camps><fi>
0<camps>...<camps>...<camps><fi>
0<camps>...<camps>...<camps><fi>
0<camps>...<camps>...<camps><fi>

Mi código escribe

1<camps>...<camps>...<camps><fi>
2<camps>...<camps>...<camps><fi>
3<camps>...<camps>...<camps><fi>
4<camps>...<camps>...<camps><fi>

Por eso tu código siempre daba la salida 000000 en el while; el mío sí imprime 123456789.

PD: Si funciona

echo $camp[0]; -> echo '<a href="' .$camp[0]. '">' . $camp[1] . '</a>

¿Has pensado que cuando haya 1000000 posts ese archivo va a ocupar muuuuuuuuchos MB?

LOc0

#1

A ver, si te fijas por ejemplo en esta web, verás que TODO está numerado. Los foros, los threads y los posts. ¿Por qué no los numeras tú igual?

Salu2 ;)

PD: Yo tendría 3 ficheros .txt:

foros.txt
threads.txt
posts.txt

foros.txt

id_foro|nombre_foro|descripcion|moderadores|num_threads|num_posts

threads.txt

id_thread|título_thread|id_foro|autor|num_respuestas

posts.txt

id_post|título_post|id_thread|id_foro|autor|fecha

Por ejemplo, cada vez que alguien escriba un thread nuevo:

Actualizarías la línea de foros.txt (incrementando en 1 el contador de thread y el de posts)

Añadirías una línea a threads.txt

Añadirías una línea a posts.txt

Salu2 ;)

Battosai

guner, si lo he pensado, lo que pasa es que este foro es un trabajo para el instituto, que tiene la "dificultad" de que es un foro echo sin MySQL, solo necesitaria enviar un par de mensajes para demostrar que funciona y ya esta. Por cierto, ahora que recuerdo, como podria borrar usuarios o borrar mensajes, si los e escrito previamente en un .txt? No hay ninguna funcion del tipo ferase x ejemplo como fwrite escribe, no se si me entiendes xD. Ayer probe lo de tu codigo y no me iva.. a ver hoy! Lo que no entiendo del codigo que me escribiste es que tendria que poner yo en mi caso en las variables $_POST[topic] i [miss] donde tu escribes los peces en el rio i topic. Gracias

Battosai

ya me salio lo de numerar, gracias guner!! el problema es que ahora al mostrar los topics me sale una linea que dice:
Notice: Undefined index: 1 in /data/members/free/tripod/es/s/k/e/skerrisim/htdocs/missatge.php on line 20
No sé arreglarla :S
Por otra parte, al final del archivo en vez de hacer un echo $camp[0]; hago un echo "<a href=vermensaje.php?id=$camp[0]>$camp[1]</a><br>"; para que sea un link que al darle encima se dirija a vermensaje.php?id=X. El problema es que aparece Http://laweb.com/vermensaje.php?id= , sin poner ningun numero i no muestra nada en pantalla. En vermensaje.php he puesto :

<?php
$id = $_GET['id'];
echo $id;
?>

Para que muestre el numero, aunque lo que deberia mostrar tambien es el mensaje ($camp[2]) i el topic ($camp[1]), como lo debo hacer?? Muchisimas gracias!!

guner

El notice lo da sólo en la última iteración del while - es obvio. Con el @ debería estar solucionado.
Si lo prefieres puedes usar while (array_key_exists($i, $fi)) { ....

Lo de $_POST[] está comentado en la línea de abajo, es porque esta usando php desde la línea de comandos, sin servidor. Esas líneas quítalas eran para probar.

Lo último no te lo pienso arreglar xp, pienso que mirando los demás strings de mi código puedes ver como se arregla.

Usuarios habituales

  • guner
  • Battosai
  • LOc0
  • xBoSS