En este artículo vamos a mostrar cómo configurar PHP 8 en Windows 10 usando NGINX y consejos opcionales para facilitar el arranque, la parada y el reinicio de los ejecutables.
Descargas
Para este tutorial utilizamos las siguientes versiones:
PHP 8.0.0 VS16 x64 Non Thread Safe (2020-Nov-24 22:43:38)
https://windows.php.net/downloads/releases/php-8.0.0-nts-Win32-vs16-x64.zip
(Si desea verificar nuevas versiones o descargar para x86 acceda a: https://windows.php.net/download/)
NGINX 1.18.0
https://nginx.org/download/nginx-1.18.0.zip
(Si desea verificar nuevas versiones acceda a: https://nginx.org/en/download.html)
RunHiddenConsole
Este software será utilizado si desea configurar el arranque automático de PHP FastCGI y Nginx.
https://redmine.lighttpd.net/attachments/download/660/RunHiddenConsole.zip
PHP 8 NTS
Después de descargar el archivo php-8.0.0-nts-Win32-vs16-x64.zip, extráigalo en una carpeta. Recomendamos usar una ubicación fácil como C:\PHP, por ejemplo. En las configuraciones que mostraremos usaremos como base esta ruta para la ubicación de los binarios de PHP 8, si decide guardar en otra ubicación, recuerde hacer los ajustes necesarios.
Localice el archivo php.ini-development y cambie el nombre a php.ini ya que los binarios de PHP buscarán este archivo donde deben estar las configuraciones.
Las líneas que tienen punto y coma (;) significan que están comentadas y no serán leídas como una configuración. Cada vez que necesitemos habilitar o cambiar el valor de alguna directiva de configuración, asegúrese de que la línea no comience con el carácter de punto y coma.
Localice la directiva error_reporting y habilite todos los errores excepto las notificaciones y estrictos.
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
La siguiente directiva es doc_root, donde definiremos el directorio raíz. Esta es una configuración necesaria para ejecutar PHP 8 con FastCGI en Nginx. Para este ejemplo, estamos apuntando a un directorio llamado www en la unidad C. Si no tiene, necesita crear uno o configurar otro directorio.
doc_root = "C:\www"
Ahora necesitamos informar al PHP dónde está la carpeta con las extensiones, o archivos DLL. Para eso, remueva el comentario de la directiva extension_dir con el valor "ext".
extension_dir = "ext"
Justo abajo verá otra directiva que necesitaremos cambiar, llamada sys_temp_dir. Deberá informar la ruta del directorio temporal de Windows.
sys_temp_dir = "C:\Windows\Temp"
A partir de la línea 920 tendremos las extensiones disponibles para habilitar según su necesidad. Por ejemplo, si desea usar la base de datos MySQL deberá habilitar la extensión mysqli y/o pdo_mysql.
En este tutorial habilitamos las siguientes extensiones:
extension=curl
extension=fileinfo
extension=mbstring
extension=exif
extension=mysqli
extension=openssl
extension=pdo_mysql
Una de las novedades más esperadas de la versión 8 de PHP es el JIT (Just In Time). Y para habilitar esta opción es necesario configurar las siguientes directivas:
pcre.jit=1
Para ejecutar PHP 8 con FastCGI simplemente ejecute el siguiente comando:
C:\PHP\NTS\php-cgi.exe -b 127.0.0.1:9000
Este comando no devolverá nada si todo está correcto, pero bloqueará la terminal mientras PHP esté en ejecución.
Ahora podemos configurar Nginx que deberá mirar a este servidor local en el puerto 9000 con PHP 8.
Nginx 1.18
Extraiga los archivos del archivo comprimido nginx-1.18.0.zip en el directorio C:\NGINX.
Vamos a editar algunas configuraciones en el archivo nginx.conf que está en el directorio conf de la carpeta C:\NGINX.
En este archivo, los comentarios se definen por el carácter hashtag (#). Entonces, para habilitar una directiva, es necesario quitar estos comentarios.
En la línea 43 tenemos el inicio del bloque de configuración de location / de la siguiente manera:
location / {
root html;
index index.html index.html;
}
Vamos a cambiar el directorio root para apuntar al mismo directorio que configuramos en php.ini y agregar el archivo index.php como una de las posibilidades de archivo por defecto.
location / {
root "C:\www";
index index.php index.html index.html;
}
Ahora, desde la línea 65 hasta la línea 71, tenemos un ejemplo de configuración de PHP. Podemos usarlo como base quitando los comentarios y haciendo algunas pequeñas modificaciones.
De inicio, el archivo estará así:
#location ~\.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fast_cgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
Después de eliminar los comentarios y hacer las modificaciones, el bloque de configuración quedará así:
location ~\.php$ {
root "C:\www";
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Vea que cambiamos el root para el directorio C:\www y en la línea de configuración fastcgi_param cambiamos /scripts por $document_root.
Ahora para iniciar el servidor Nginx, basta con llamar al ejecutable nginx.exe que está en el directorio C:\NGINX con el siguiente comando:
C:\NGINX\nginx.exe
Siempre y cuando no haya ningún servicio ejecutándose en el puerto 80, este comando hará que el servidor nginx se inicie y mire hacia el PHP 8 con FastCGI que está corriendo en el puerto 9000.
En este momento podrá probar creando un archivo php en la carpeta C:\www como el siguiente ejemplo:
<?php
phpinfo();
Y luego en el navegador abra la dirección: http://localhost
Deberá tener el resultado a continuación:
Resultado en el archivo php creado para probar la ejecución de PHP 8 con Nginx
Sin embargo, si cierras las terminales o reinicias la computadora, necesitarás iniciar php y nginx nuevamente. Si deseas configurar de forma automática, puedes crear un archivo bat y configurarlo como una tarea programada en Windows 10.
Creando Archivos .BAT
Archivo nginx-start.bat para iniciar los servicios:
@ECHO OFF
PUSHD "C:\NGINX"
ECHO Iniciando PHP 8 con FastCGI...
RunHiddenConsole.exe "C:\PHP\php-cgi.exe" -b 127.0.0.1:9000
ECHO Iniciando Nginx...
RunHiddenConsole.exe "C:\NGINX\nginx.exe"
POPD
EXIT /b
Archivo nginx-stop.bat para parar los servicios:
@ECHO OFF
TASKKILL /f /IM nginx.exe
TASKKILL /f /IM php-cgi.exe
EXIT /b
Archivo nginx-restart.bat para reiniciar los servicios:
@ECHO OFF
CALL nginx-stop.bat
CALL nginx-start.bat
EXIT /b
Ahora podrá cerrar las terminales y solo hacer clic en los archivos .bat para ejecutar la acción deseada.
Pero vamos a programar el arranque automático mediante el Programador de Tareas de Windows 10.
Busque en el menú de inicio por: Programador de Tareas
En la pantalla inicial del programa, en el panel Acciones, haga clic en Crear Tarea...
Pantalla inicial del Programador de Tareas de Windows 10
Deberá abrir la pantalla a continuación:
Pantalla Crear Tarea
En esta pantalla podrá definir un nombre y describir esta tarea para facilitar su identificación posterior.
Haga clic en la pestaña Acciones.
Pestaña Acciones de la pantalla Crear Tarea
Haga clic en el botón Nuevo... para agregar una nueva acción.
Pantalla Nueva Acción
En la pantalla Nueva Acción, haga clic en Buscar para localizar el archivo nginx-start.bat
Busque y seleccione el archivo nginx-start.bat
Haga clic en Abrir y luego en OK en las pantallas que están abiertas para guardar la acción y la tarea programada.
Listo, ahora cada vez que inicie el computador y el puerto 80 esté libre, el servicio de Nginx con PHP 8 FastCGI se iniciará automáticamente.