PHP Misc
Exploramos las funciones misceláneas de PHP para inspeccionar el entorno, generar IDs únicos y controlar el tiempo de ejecución.
Las funciones misceláneas de PHP son un conjunto de funciones integradas que no pertenecen a ninguna categoría específica como cadenas o arrays. En su mayoría permiten que tu script examine su propio entorno: qué versión de PHP está en ejecución, en qué sistema operativo se encuentra, qué usuario es dueño del proceso, cuánto tiempo tiene permitido ejecutarse, y así sucesivamente. Se recurre a ellas cuando necesitas inspeccionar el entorno de ejecución, depurar una configuración, generar un token único o controlar el tiempo de ejecución.
Esta página agrupa las más útiles de estas funciones según el uso que se les daría, con ejemplos ejecutables para cada grupo.
Inspeccionar la instalación de PHP
Cuando algo se comporta de manera diferente entre dos servidores, la primera pregunta suele ser "¿qué versión y configuración tengo aquí?" Estas funciones responden esa pregunta.
phpinfo()— imprime un informe HTML completo sobre la compilación de PHP, las extensiones cargadas y la configuración dephp.ini. Ejecútala una vez en un servidor nuevo y luego elimina el archivo (expone mucho sobre tu entorno).phpversion()— devuelve solo la cadena de versión, p. ej."8.2.10".php_uname()— devuelve información sobre el sistema operativo en el que corre PHP.get_defined_constants()— devuelve un array de cada constante definida (las integradas más las tuyas propias).
<?php
echo phpversion(), "\n"; // 8.2.10
echo php_uname('s'), "\n"; // e.g. "Linux" ('s' = OS name only)
// Did the developer remember to define this config constant?
defined('APP_ENV') or define('APP_ENV', 'production');
$constants = get_defined_constants(true); // grouped by category
echo APP_ENV, "\n"; // production
?>
phpinfo()solo tiene sentido cuando la salida va a un navegador, por lo que no se muestra en el ejemplo ejecutable anterior.
Comparar versiones
Nunca compares cadenas de versión con < o == — "8.10" es menor que "8.9" como cadena simple. Usa version_compare(), que entiende la semántica de versiones.
<?php
// Is the running PHP new enough for a feature?
if (version_compare(PHP_VERSION, '8.0.0', '>=')) {
echo "Named arguments are available.\n";
}
// Two-argument form returns -1, 0, or 1
echo version_compare('1.9.0', '1.10.0'), "\n"; // -1 (1.9 is older)
?>Generar IDs únicos
uniqid() construye un identificador a partir del tiempo en microsegundos actual. Es útil para nombres de archivos temporales y claves de caché, pero no es criptográficamente seguro — para tokens, contraseñas o cualquier uso sensible a la seguridad, usa random_bytes() o bin2hex(random_bytes(16)) en su lugar.
<?php
echo uniqid(), "\n"; // e.g. 651f3a9c4b2d8
echo uniqid('user_', true), "\n"; // prefix + more entropy: user_651f3a9c4b2d81.23456789
?>Controlar el tiempo y los límites de ejecución
Los scripts de larga ejecución (importaciones, generadores de informes) a veces necesitan hacer una pausa o ejecutarse más tiempo que el límite predeterminado.
sleep($seconds)— pausa el script durante segundos completos.usleep($microseconds)— pausa durante microsegundos (1 segundo = 1 000 000 µs).set_time_limit($seconds)— reinicia el tiempo máximo de ejecución;0significa sin límite (ignorado cuandomax_execution_timeno puede cambiarse, p. ej. en modo seguro).ignore_user_abort(true)— continúa la ejecución aunque el cliente se desconecte, útil para terminar una tarea en segundo plano.
<?php
$start = time();
sleep(1); // pause 1 second
usleep(500000); // pause another half second
echo "Paused for about ", time() - $start, "s\n"; // Paused for about 1s
set_time_limit(30); // allow up to 30 seconds for the rest of the script
?>Leer información del proceso y del entorno
Estas funciones informan sobre el proceso del sistema operativo dentro del cual corre PHP actualmente.
getmypid()— el ID del proceso del script en ejecución.get_current_user()— el propietario del archivo del script en ejecución.getmyuid()/getmygid()— el ID de usuario y el ID de grupo del propietario del script (en sistemas que los soportan).
<?php
echo "PID: ", getmypid(), "\n"; // e.g. PID: 4821
echo "User: ", get_current_user(), "\n";
?>Trabajar con código fuente
Unas pocas funciones tratan el código fuente de PHP como texto — principalmente para páginas de documentación y visores de código.
highlight_file($filename)— genera la fuente de un archivo con resaltado de sintaxis HTML.highlight_string($code)— lo mismo, pero para una cadena de código PHP.php_strip_whitespace($filename)— devuelve la fuente de un archivo con comentarios y espacios en blanco adicionales eliminados.get_browser()— devuelve detalles sobre el navegador del visitante, pero solo cuando el archivo de configuraciónbrowscap.iniestá configurado; de lo contrario devuelvefalse.
<?php
$code = "<?php echo 'Hello'; // a comment ?>";
// highlight_string can also return the markup instead of printing it
$html = highlight_string($code, true);
echo $html, "\n"; // a <code>...</code> block with colorized <span> tags
?>¿Cuándo usaría estas funciones?
| Tarea | Función |
|---|---|
| Proteger una funcionalidad detrás de una versión mínima de PHP | version_compare() |
| Generar un nombre de archivo único desechable | uniqid() |
| Hacer una pausa entre llamadas a la API para respetar un límite de velocidad | sleep() / usleep() |
| Permitir que una importación larga termine sin agotar el tiempo | set_time_limit(), ignore_user_abort() |
| Depurar la configuración de PHP de un servidor | phpinfo(), phpversion(), php_uname() |
Para profundizar en temas relacionados, consulta Funciones PHP, Constantes PHP, Fecha y Hora en PHP y Cadenas PHP.