Índice de contenidos
Instalación en Windows
Instalación en Ubuntu
Servidores seguros
Páginas dinámicas
Sintaxis básica
Operaciones
Arrays
Formatos de presentación
Operadores
Bucles
Extraer y ord. información
Funciones
Ficheros externos
Imágenes dinámicas
Gestión de directorios
Cookies y sesiones
Clases y objetos
Ficheros en formato PDF
Bases de datos MySQL
PHP y XML
PDO - Bases SQLite / MySQL
MySQL a traves de misqli
Algo de JavaScript y AJAXEl valor Unix Epoch
El conocido como tiempo UNIX –o también Unix Epoch– es un sistema referencia de tiempo cuya unidad son los segundos y que tiene su valor cero a las 00:00:00 horas (GMT) del día uno de enero de 1970.
time()La función time() devuelve el número de segundos transcurridos desde el comienzo de la Unix Epoch hasta el momento actual. ¿Que cuantos son? Pues mira, desde el comienzo del tiempo UNIX hasta este mismo instante han transcurrido 1 329 973 787 segundos
microtime()Usando la función microtime() se obtiene una cadena que, además del número de segundos transcurridos desde el comienzo de la Unix Epoch, incluye – al comienzo de ella y separada por un espacio– la parte decimal de ese tiempo expresada en microsegundos.
El valor de la cadena devuelta por microtime() en este instante es 0.89861900 1329973787 . Como verás, aparece la fracción decimal del tiempo Unix Epoch delante de su valor entero.
(double)microtime()Dado que microtime() devuelve una cadena, es posible convertirla en número de coma flotante anteponiendo (double) que, como recordarás, es la función que permite forzar una cadena a número coma flotante. Una vez cambiado el tipo de variable el valor devuelto por microtime se convierte en: 0.898634 que como puedes observar es un número con seis decimales (si las últimas cifras son ceros no se visualizarán).
Si se multiplica el valor anterior por 1.000.000 obtenemos un número entero de seis cifras que cambia de valor cada millonésima de segundo. Observa el resultado de esta operación: 898642 ¡Fíjate que ha cambiado! La diferencia no es otra cosa que el tiempo transcurrido entre los instantes en que se ejecutaron ambas instrucciones.
Números aleatorios
PHP dispone de dos funciones capaces de generar números aleatorios. Se trata de la función rand() y de la función mejorada mt_rand().
| Generación de un número aleatorio | |||
| Generador rand() | Generador mt_rand() | ||
| Sintaxis | Nº aleatorio | Sintaxis | Nº aleatorio |
| echo rand() | 421030611 | echo mt_rand() | 243294495 |
El número aleatorio generado está comprendido entre CERO y un valor máximo que puede determinarse para cada una de las dos opciones mediante las funciones getrandmax() y mt_getrandmax() Estos son sus valores.
| Valores máximos de los generadores de números aleatorios | |||
| Generador rand() | Generador mt_rand() | ||
| Sintaxis | Valor máximo | Sintaxis | Valor máximo |
| echo getrandmax() | 2147483647 | echo mt_getrandmax() | 2147483647 |
Según las librerías que esté usando PHP, puede ocurrir que los valores máximos con ambos generadores sean iguales.
Una semilla que mejora la aleatoriedad
Se pueden ejecutar las funciones srand() o mt_srand() incluyendo en ellas una expresión como la especificada en rojo
srand((double)microtime()*1000000)antes de invocar a las funciones rand() o mt_rand(). De esta forma estaremos introduciendo una semilla cuyo valor, tal como comentamos en el epígrafe anterior, se modifica cada millonésima de segungo y que mejora sustancialmente la aleatoriedad de los números obtenidos.
Aquí tenemos un ejemplo:
| Generación de un número aleatorio con semilla | |
| Generador rand() | |
| Sintaxis | Nº aleatorio |
| srand((double)microtime()*1000000); echo rand() |
1366414718 |
| Generador mt_rand() | |
| Sintaxis | Nº aleatorio |
| mt_srand((double)microtime()*1000000); echo mt_rand() |
1058511568 |
Manteniendo la sintaxis anterior –no te olvides de incluir las semillitas– se pueden generar números aleatorios comprendidos dentro del intervalo que preestablezcamos. Bastaría con añadir los valores de los extremos de ese intervalo como parámetros de la función. La sintaxis sería esta:
rand(extremo inferior , extremo superior)| Generación de un número aleatorio delimitando intervalos | |
| Generador rand() | |
| Sintaxis | Nº aleatorio |
| srand((double)microtime()*1000000); echo rand(1,300) |
111 |
| Generador mt_rand() | |
| Sintaxis | Nº aleatorio |
| mt_srand((double)microtime()*1000000); echo mt_rand(1,300) |
251 |