Cuando tienes un equipo de trabajo, o tu equipo de trabajo tiene un sistema operativo diferente al del equipo de pruebas, puede que te encuentres con problemas en la programación debido a que los SO interpretan algunas cosas de formas diferentes, como por ejemplo las rutas de carpetas a la hora de incluir archivos. Con este pequeño manual podrás detectar el tipo de sistema operativo con php.
Siguiendo con el ejemplo, vamos a poner el caso de que estés trabajando con windows, tengas un entorno de pruebas local por ejemplo con Wampserver, y el servidor para pruebas global de todos los integrantes del equipo funcione bajo linux. Las rutas de carpetas con los includes dejarían de funcionar tan pronto enviemos nuestros archivos al svn y los sincronicemos con el entorno general, pero hay solución para esto.
Desde php es posible detectar el sistema operativo
Tenemos una pequeña constante, que nos dará esta información, y por tanto podremos ejecutar diferentes acciones dependiendo de cómo tengamos que gestionar estas diferencias, pongamos por ejemplo. La constante en concreto es PHP_OS, y la usaremos como otra cualquiera, por ejemplo
echo PHP_OS
Que nos devolverá un valor de la siguiente lista:
- CYGWIN_NT-5.1
- Darwin
- FreeBSD
- HP-UX
- IRIX64
- Linux
- NetBSD
- OpenBSD
- SunOS
- Unix
- WIN32
- WINNT
- Windows
- OS/2 Warp
- eComStation
- RISC OS
- Windows XP 64-bit
Puede que no esté completa, pero son la mayoría de opciones que nos pueden aparecer a la hora de utilizar esta constante.
Cómo usar PHP_OS para detectar un sistema operativo
Si por ejemplo queremos definir el separador de carpetas para diferenciar entre nuestro equipo que está en windows, y el del servidor de pruebas que está en linux, podemos hacerlo de la siguiente forma:
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { echo 'El sistema es windows y usa contrabarra \'; } else { echo 'No estamos en Windows, y sé que el servidor es linux y usa barra /'; }
Lo que estamos haciendo en la primera línea, es extraer las 3 primeras letras de la constante PHP_OS (pasándolas a mayúsculas), y si son WIN, entonces el sistema es windows, en caso contrario ejecutamos otro código.
Aquí podemos poner una constante personalizada por ejemplo con una definición u otra dependiendo del sistema operativo, y utilizarla en nuestro código para que se ejecute correctamente en cualquiera de los dos casos.
¿Qué SO usas para programar? ¿Y para tus servidores?