Cómo compilar la extensión Redis para PHP 8.3 en Windows (php_redis.dll)
Cómo compilar la extensión Redis para PHP 8.3 en Windows (php_redis.dll)
Redis es casi obligatorio en cualquier proyecto PHP moderno: caché, sesiones, colas… En Linux solemos tirar de paquetes o de PECL, pero en Windows muchas veces toca compilar la extensión Redis a mano para obtener un php_redis.dll compatible con nuestra versión exacta de PHP.
Requisitos previos
Antes de empezar, asegúrate de tener:
- Windows 10/11 de 64 bits.
- Visual Studio / Build Tools con el toolset compatible con tu versión de PHP (MSVC).
- Git instalado y en el
PATH. - PHP SDK para Windows (
phpsdk-vsXX-x86/x64) y el entorno de compilación configurado (Developer Command Prompt).
Trabajaremos con el código fuente oficial de PHP 8.3.3 y la extensión phpredis 6.0.2.
1. Clonar el código fuente de PHP 8.3.3
Primero, clona el repo oficial de PHP indicando la rama de la versión concreta que quieres compilar:
git clone --depth 1 --branch php-8.3.3 https://github.com/php/php-src.git
cd php-src
Usamos --depth 1 para evitar descargar todo el histórico y acelerar el proceso.
2. Clonar la extensión phpredis dentro de ext/
La extensión Redis se compila como cualquier otra extensión interna. Para eso la clonamos dentro del directorio ext del propio PHP:
cd ext
git clone --depth 1 --branch 6.0.2 --recurse-submodules https://github.com/phpredis/phpredis.git
cd ..
Esto creará la carpeta ext/phpredis con el código de la extensión Redis.
3. Descargar dependencias del SDK y generar configure
El PHP SDK dispone de una pequeña utilidad para actualizar dependencias:
phpsdk_deps --update --branch 8.3
Después generamos los scripts de build con:
buildconf
Si todo va bien, esto creará el script configure que usaremos para configurar la compilación.
4. Compilar la versión Thread Safe (TS)
La versión Thread Safe es la que utilizan los builds de PHP típicos para Apache o algunos handlers que comparten proceso.
Lanzamos la configuración habilitando Redis como extensión compartida y soporte de sesiones:
configure --enable-redis=shared --enable-redis-session --enable-redis-igbinary
nmake
Puntos clave:
--enable-redis=shared: generaphp_redis.dllcomo extensión compartida.--enable-redis-session: permite usar Redis como gestor de sesiones.--enable-redis-igbinary: activa soporte para igbinary como serializer (si está disponible).
Tras nmake, el resultado típico (dependiendo de tu config) estará en algo como:
x64\Release_TS\php_redis.dll
Copia este php_redis.dll al directorio ext de tu instalación PHP TS (por ejemplo: C:\php\ext).
5. Compilar la versión Non Thread Safe (NTS)
La versión Non Thread Safe suele utilizarse con FastCGI / PHP-FPM para Windows u otros escenarios donde cada proceso es independiente.
Aquí simplemente desactivamos ZTS:
configure --enable-redis=shared --enable-redis-session --enable-redis-igbinary --disable-zts
nmake
Al terminar, obtendrás algo como:
x64\Release\php_redis.dll(NTS)
Copia este php_redis.dll a la carpeta ext de tu instalación PHP NTS.
6. Habilitar la extensión Redis en php.ini
Tanto para TS como para NTS, habilita la extensión añadiendo en el php.ini de la instalación correspondiente:
extension=php_redis.dll
Si quieres usar Redis para sesiones:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
Asegúrate de tener un servidor Redis accesible (local o remoto).
7. Verificar que php_redis.dll funciona
Primero, comprueba que PHP detecta la extensión:
php -m | findstr /I redis
Debería aparecer redis en la lista.
Luego, un script mínimo de prueba:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('php:test', 'ok');
echo $redis->get('php:test'), PHP_EOL;
Si ves ok, la extensión Redis está correctamente compilada y funcionando en PHP 8.3.
8. Compresión (LZF, Zstd, LZ4) y por qué puede fallar
En algunos escenarios quieres compilar Redis con soporte de compresión:
configure --enable-redis=shared --enable-redis-session --enable-redis-igbinary --enable-redis-lzf --with-liblzf=ext\phpredia\liblzf --enable-redis-zstd --enable-redis-lz4
Si este comando no funciona, revisa:
- Ruta de liblzf
Comprueba que la ruta es correcta. En tu ejemplo apareceext\phpredia\liblzf(posible typo dephpredis). Necesitas las cabeceras y librerías de LZF compiladas para MSVC y accesibles. - Dependencias de Zstd y LZ4
Igual que con LZF, tienes que tener las libs instaladas y enlazables (incluyendo.liby.h) y pasarlas con las rutas adecuadas alconfigure. - Coherencia 32/64 bits
Asegúrate de que todas las libs (PHP, Redis, LZF, Zstd, LZ4) están compiladas para la misma arquitectura (x64 normalmente).
Si solo quieres que funcione Redis en producción y no necesitas compresión avanzada, lo más sencillo y estable suele ser compilar sin estas opciones extra, tal como se muestra en los comandos TS/NTS anteriores.
9. PHP 8.3 y compatibilidad de php_redis.dll
Para evitar errores tipo “The procedure entry point … could not be located” debes:
- Compilar
php_redis.dllexactamente contra la misma rama de PHP (por ejemplophp-8.3.3). - Usar el mismo toolset de Visual Studio que se usó para el build oficial de PHP que estás utilizando en Windows.
- Asegurarte de que TS/NTS y x86/x64 coinciden entre PHP y tu
php_redis.dll.
Si cumples eso, tendrás un php_redis.dll 100 % compatible con tu entorno.
10. FAQ rápida (SEO friendly)
¿Puedo usar este php_redis.dll con otras versiones de PHP 8.3?
Lo ideal es compilar siempre contra la misma versión exacta (8.3.3, 8.3.4, etc.). Cambios menores a veces funcionan, pero no es garantizado.
¿Hay binarios precompilados de Redis para PHP 8.3 en Windows?
En ocasiones sí, pero no siempre para todas las combinaciones de versión / TS / NTS. Compilarlo tú mismo te garantiza compatibilidad y control.
¿Funciona con WAMP/XAMPP?
Sí, siempre que coincidan arquitectura y tipo de build (TS o NTS) y copies el php_redis.dll al ext correcto y lo habilites en el php.ini adecuado.
Tests
php -m | findstr /I redismuestra el módulo cargado.- Script de conexión simple a Redis (
set+get) devuelve el valor esperado. - En entornos web (Apache, Nginx + FastCGI, IIS),
phpinfo()lista la secciónredissin errores al inicio.
Verificación
- Repositorios
php-src(8.3.3) yphpredis(6.0.2) clonados en las rutas indicadas. buildconfyconfigureejecutan sin errores críticos.nmakegeneraphp_redis.dllTS y/o NTS.php.iniincluyeextension=php_redis.dll.- Pruebas de conexión a Redis completadas con éxito.
Notas
- No mezcles builds de
Debugcon binariosReleaseen producción. - TS para entornos multi-hilo (Apache mod_php), NTS para FastCGI/FPM.
- Documenta en tu proyecto la exacta combinación
PHP + phpredis + toolsetpara poder reproducir el build en el futuro.
Alternativas
1. Usar DLLs precompiladas / PECL
Ventaja: cero compilación, instalación rápida.
Inconveniente: puede no existir el binario exacto para tu versión, arquitectura o TS/NTS.
2. Mover la carga de PHP a Linux (WSL, contenedores, servidores Linux)
Ventaja: paquetes oficiales, builds muy probados, menos dolor con extensiones.
Inconveniente: más complejidad de infraestructura si tu stack actual es 100 % Windows.



