A continuación mostramos cómo programar algunas útiles funciones en PHP. En especial, cuando desarrollamos una aplicación de cierta complejidad.
Veremos cómo: determinar si estamos en ejecución CLI, obtener el directorio del script, ejecutar comandos de sistema en segundo plano, entre otros.
Cómo comprobar que el script se ejecuta desde la línea de Comandos
PHP nos permite construir rutinas de mantenimiento, más allá del funcionamiento propio de la aplicación. Estas rutinas de mantenimiento (tareas programadas) pueden ser incorporadas dentro del propio código de la aplicación, bajo esas circunstancias se hace necesario saber cuando se está ejecutanto el código desde la línea de comandos:
Código para comprobar que el script en PHP se ejecuta desde la línea de comandos (CLI):
function is_cli() {
//
// chequear si está presente la constante STDIN:
if( defined('STDIN') )
{
return true;
}
//
if( empty($_SERVER['REMOTE_ADDR']) and !isset($_SERVER['HTTP_USER_AGENT']) and count($_SERVER['argv']) > 0) {
return true;
}
return false;
}
Obtener el directorio del script en ejecución
Para obtener el directorio de ejecución de un script PHP, situación que especialmente útil en el Bootstrap de la aplicación, se emplea el código:
// usando la constante predefinida __FILE__:
$curr_dir = dirname(__FILE__);
Incluso podemos obtener los directorios superiores de la jerarquía usando el código:
// baja un nivel:
$dir_config = dirname(dirname(__FILE__));
//
// baja dos niveles:
$dir_config = dirname(dirname(dirname(__FILE__)));
Chequear si la aplicación se ejecuta desde localhost
Comprobar si el script PHP se ejecuta en localhost:
if (in_array($_SERVER["SERVER_ADDR"], array("127.0.0.1","::1")))
{
//Show Application
}
Ejecutar un comando de sistema en segundo plano
Desde el propio PHP podemos llamar a comandos del sistema operativo, incluso también se puede hacer la ejecución de un comando en segundo plano:
// donde la variable $cmd es el string que
// corresponde es un comando válido de sistema:
//
private function _execInBackground($cmd) {
//
// Considerando las disferencias para
// servidores Windows o basados en Unix:
if (substr(php_uname(), 0, 7) == "Windows") {
pclose(popen("start /B " . $cmd, "r"));
} else {
exec($cmd . " > /dev/null &");
}
}