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);
}
?>
<?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])) {
$camp = explode('<camps>', $fi[$i++]);
echo $camp[0];
}
NOTA: Si vas a trabajar tanto usando archivos a modo de bases de datos deberías mirarte las expresiones regulares.
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
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?
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
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
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!!
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.