Ir al contenido

El medio de los artesanos de la web domingo, 8 de noviembre de 2026

MailStudio
Back-end

PHP 8.6 llega a la RC5, un paso antes de la versión estable del 19 de noviembre

PHP 8.6.0 RC5 se publicó el 5 de noviembre, doce días antes de la versión estable prevista para el 19 de noviembre. Esta release candidate fija cambios de seguridad que endurecen el comportamiento por defecto de las sesiones.

El equipo de PHP publicó el 5 de noviembre de 2026 la quinta release candidate de PHP 8.6.0, RC5. Es la última etapa de pruebas antes de la versión estable, anunciada para el 19 de noviembre. Además de la esperada aplicación parcial de funciones, esta versión endurece notablemente los ajustes de seguridad de las sesiones, un cambio que afectará a cualquier aplicación PHP al actualizar.

Una quinta release candidate antes de la versión estable

RC5 llega después de RC4, publicada el 21 de octubre, que ya corregía dos vulnerabilidades críticas de ejecución remota de código. El calendario de PHP 8.6 se ha extendido durante varios meses de pruebas: RC2 abrió el ciclo el 24 de septiembre tras descartar RC1 por un error de empaquetado, seguida de RC3 a principios de octubre y de RC4 a finales de octubre. El equipo de publicación insiste en que RC5 sigue siendo una versión de pruebas, que no debe desplegarse en producción.

Aplicación parcial de funciones y nuevas funciones utilitarias

La novedad más comentada es la aplicación parcial de funciones, basada en una RFC que había sido rechazada en 2021 antes de volver en una nueva forma aprobada por unanimidad. Permite omitir ciertos argumentos mediante un marcador de posición, sin escribir una clausura intermedia. El lenguaje también incorpora una función clamp() para acotar un valor dentro de un rango, y las propiedades readonly ya pueden declarar un valor por defecto, algo que hasta la 8.5 era un error de compilación.

final class Pricing
{
    public readonly float $vatRate = 0.20;

    public function clampedDiscount(float $requested): float
    {
        return clamp($requested, 0.0, 0.30);
    }
}

$applyVat = fn (float $amount, float $rate) => $amount * (1 + $rate);
$applyDefaultVat = $applyVat(?, 0.20); // aplicación parcial
echo $applyDefaultVat(49.0);

Un nuevo subsistema para entradas y salidas asíncronas

PHP 8.6 introduce Io\Poll, una interfaz de sondeo unificada sobre los mecanismos nativos de cada plataforma (epoll en Linux, kqueue en BSD y macOS, WSAPoll en Windows). Llega acompañada de clases como Io\Poll\Context y Io\Poll\Watcher, y los flujos existentes pueden conectarse a través de StreamPollHandle. Las clausuras también se benefician de una caché para clausuras sin estado, y array_map() usado con un invocable de primera clase se compila ahora en un bucle foreach equivalente, sin asignaciones intermedias.

Valores por defecto de sesión más estrictos

El cambio más estructural para las aplicaciones existentes afecta a tres ajustes INI relacionados con las sesiones, ahora más seguros por defecto.

AjusteAntes de 8.6Desde 8.6Impacto si no se revisa
session.use_strict_mode01Un gestor personalizado que acepte identificadores de sesión externos sin entrada almacenada debe implementar validateId() o create_sid()
session.cookie_httponly01La cookie de sesión deja de ser legible desde JavaScript, salvo que se restablezca a 0
session.cookie_samesitesin definirLaxLas peticiones POST entre sitios dejan de recibir la cookie, salvo cambio a None junto con cookie_secure=1

Tres ajustes de sesión pasan de un comportamiento permisivo a uno restrictivo por defecto, sin que el código de la aplicación tenga que cambiar una sola línea para beneficiarse.

Las aplicaciones que leen la cookie de sesión desde JavaScript en el cliente, o que dependen de peticiones autenticadas entre sitios, dejarán de funcionar de forma silenciosa tras la actualización si estos tres ajustes no se revisan antes de pasar a producción.

Otros cambios merecen una relectura del archivo UPGRADING antes de migrar: numerosas funciones lanzan ahora un ValueError ante un byte NUL en un argumento de tipo cadena, y preg_grep() devuelve false en lugar de un array parcial en caso de error de PCRE. Los equipos que ya vigilan de cerca sus colas, como Laravel ha reforzado por su parte, harán bien en ejecutar su suite de pruebas sobre RC5 desde ya.

Lo que hay que recordar

PHP 8.6 entra en su recta final con RC5, publicada el 5 de noviembre antes de la versión estable del día 19. La aplicación parcial de funciones y la API Io\Poll son las incorporaciones más visibles, pero el cambio que exige una acción concreta es el endurecimiento de los valores por defecto de sesión. Los equipos que gestionan manejadores de sesión personalizados o flujos entre sitios harán bien en probar ya, en lugar de descubrir el problema en producción.

En los proyectos seguidos este año, el cambio de session.cookie_samesite a Lax es precisamente el tipo de cambio que pasa desapercibido en pruebas y que reaparece tres semanas después como un ticket de soporte incomprensible sobre un webhook o un SSO que ha dejado de funcionar. Mejor tratarlo con antelación, en frío, que de urgencia el día del despliegue — Simon Janvier.

Para profundizar: el anuncio oficial de PHP 8.6.0 RC5 en php.net.

Compartir LinkedIn Bluesky Hacker News E-mail

Leer también