PHP 8 en Windows 10 con servidor Nginx

Ronaldo B.27 de julio de 20225 min de lectura

En este artículo

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.

Sigue aprendiendo con Hcode

Regístrate en la plataforma de cursos y sigue las próximas guías del blog.