Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



lunes, 2 de mayo de 2011

PHP Refranero: como lo hice.

Os adjunto el código y explicaciones de como hice este programa:

1) Dentro del alojamiento web, copie un archivo plano (tipo .txt), que contiene un refrán por cada linea. Este archivo se llama refranes.txt

2) Creo un archivo llamado: inicio.php y libreria_elegir_refran.php:


El archivo inicio.php contiene  el siguiente código:

<?php

include("libreria_elegir_refran.php");

crear_inicio();
elige_refran();
crear_final();

?>
Como veis he creado una libreria llamada  "libreria_elegir_refran.php" donde están definidas varias funciones:
  1. Las funciones "crear_inicio()" y "crear_final()" generan el código de la página html.
  2. Y la función "elige_refran()", es la que va a elegir aleatoriamentoriamente el refrán de un archivo que va a contener todos los refranes a mostrar.
Veáse el siguiente esquema:

Te enseño el código de la subrutina elige_refran() (que esta dentro del fichero libreria_elegir_refran.php) he puesto comentarios para que veais que hace:



//función de elegir refran
function elige_refran()
{
// abre el archivo refranes_por_presentar para leerlo o crearlo
$presentar=fopen("refranes_por_presentar.txt","r") or
     fopen("refranes_por_presentar.txt","w");


El archivo "refranes_por_presentar.txt", es el que va variando cada vez que se muestra un refrán, reduciendose cada vez que se presenta un refrán.


//contar lineas de refranes que quedan por presentar...

     $ln= 0;
        while ($line= fgets($presentar)) {
                ++$ln;
        //Carga los refranes en matriz refranes
        $refranes[$ln]=$line;
        }
    if ($ln==0) {
         // recien creado
        // copiar el archivo de reflanes como   refranes_por_presentar.txt
        $original=fopen("refranes.txt","r");


En el caso del que no contenga refranes el archivo "refranes_por_presentar.txt", leemos el archivo "refranes.txt" (que es el que contiene todos los refranes), y se los añadimos  a "refranes_por_presentar.txt".



        $ln=0;
            while ($line= fgets ($original)) {
                    ++$ln;
                      fputs($presentar,$line);
        //Carga los refranes en matriz refranes
              $refranes[$ln]=$line;
            }
        fclose($original);  
    }


Como veis, hemos creado una matriz refranes[] que es la que contiene los refranes a presentar.

Ahora empezamos el trabajo real: elegir un refran de modo aleatorio del archivo "refranes_por_presentar.txt":


// elijo un valor aleatorio de la matriz refranes

//alimentamos el generador de aleatorios
mt_srand (time());
//generamos un número aleatorio
$numero_aleatorio = mt_rand(1,$ln);

$refran="";

$refran=$refranes[$numero_aleatorio];

// escribo en el "refranero.html"
 $ar=fopen("refranero.html","a") or
     die("Problemas en la creacion final");

 printf("%s",$refran);

 fclose($ar);


Con la orden: printf("%",$refran) ya hemos escrito en el HTML, el refrán elegido aleatoriamente. ($refran=$refranes[$numero_aleatorio])

Ahora rehacemos el archivo "refranes_por_presentar.txt": lo creamos de nuevo añadiendo todos los refranes de la matriz refranes[] menos el que hemos presentado refranes[$numero_aleatorio]


// reescribo el archivo de "refranes_por_presentar.txt"
// menos el array que he presentado (se reduce en 1 su logintud)

$presentar= fopen("refranes_por_presentar.txt","w");
 
for($i=1;$i==($numero_aleatorio-1);++$i){
puts($presentar,$refranes[$i]);
}

// salto el valor que se ha presentado

for($i=($numero_aleatorio+1);$i==$ln;++$i){
fputs($presentar,$refranes[$i]);
}

fclose($presentar);

}

Y cerramos el archivo con la orden fclose.

Bueno, si teneis alguna duda, dejar un comentario.
Os dejo el enlace de descarga del los archivos, para que podais verlos completos.

Saludos