O temporizador de alta resolução (hrtime()) no macOS agora
usa a API recomendada
clock_gettime_nsec_np(CLOCK_UPTIME_RAW) em vez de
mach_absolute_time().
A opção -z ou --zend-extension foi removida por não estar funcionando. Use -d zend_extension=[caminho] em vez disso.
O comportamento de busca para colunas maiores foi alterado. Em vez de buscar blocos de 256 bytes, o PDO_ODBC tentará buscar um tamanho de bloco maior; atualmente, esse tamanho é o tamanho da página menos a sobrecarga de string. Os drivers que retornam SQL_NO_TOTAL em SQLGetData também são tratados de forma mais eficiente. Isso deve melhorar a compatibilidade e o desempenho.
Tentar definir um título de processo muito longo com cli_set_process_title() agora falhará em vez de truncar silenciosamente o título fornecido.
Adicionada uma nova opção --ini=diff para imprimir as configurações do arquivo INI alterado em relação ao padrão integrado.
O FPM com httpd ProxyPass decodifica opcionalmente o caminho completo do script. Adicionada a configuração INI fastcgi.script_path_encoded para evitar este novo comportamento.
O limite de log de acesso do FPM agora respeita o valor de log_limit.
grapheme_extract() atribui corretamente o valor de
$next ao ignorar bytes iniciais inválidos.
Anteriormente, havia casos em que apontava para o início do
limite do grafema em vez do fim.
transliterator_get_error_code(),
transliterator_get_error_message(),
TransLiterator::getErrorCode()
e TransLiterator::getErrorMessage()
removeram false da união de tipos de retorno. Retornar false
na verdade nunca foi possível.
As seguintes funções agora suportam um argumento $locale:
grapheme_strpos(),
grapheme_stripos(),
grapheme_strrpos(),
grapheme_strripos(),
grapheme_substr(),
grapheme_strstr() e
grapheme_stristr().
ldap_get_option() agora aceita uma conexão null,
como ldap_set_option(),
para permitir a recuperação de opções globais.
libxml_set_external_entity_loader() agora tem um tipo de retorno formal de true.
openssl_public_encrypt() e
openssl_private_decrypt() têm um novo parâmetro
$digest_algo que permite especificar o algoritmo de hash
para o preenchimento OAEP.
openssl_sign() e openssl_verify()
possuem um novo parâmetro $padding para permitir o uso de um
preenchimento RSA PSS mais seguro.
openssl_cms_encrypt() $cipher_algo
O parâmetro pode ser uma string com o nome da cifra.
Isso permite usar mais algoritmos, incluindo algoritmos de cifra AES e GCM para
dados envelopados de autenticação.
pcntl_exec() agora tem um tipo de retorno formal de false.
pcntl_waitid() recebe um argumento adicional resource_usage para coletar várias métricas específicas da plataforma sobre o processo filho.
Pdo\Pgsql::copyFromArray() agora suporta entradas iterable.
Pdo\Pgsql::setAttribute() e
Pdo\Pgsql::prepare() suportam configurar
PDO::ATTR_PREFETCH para 0, que entra no modo lento de busca.
Neste modo, as instruções não podem ser executadas em paralelo.
pg_copy_from() agora suporta entradas iterable.
pg_connect() verifica se o argumento connection_string contém algum byte nulo.
pg_close_stmt() verifica se o argumento connection_string contém algum byte nulo.
posix_ttyname() define last_error como EBADF ao encontrar um descritor de arquivo inválido.
posix_isatty() gera uma mensagem E_WARNING
ao encontrar um descritor de arquivo inválido.
posix_fpathconf() verifica descritores de arquivo inválidos e
define last_error como EBADF e gera uma mensagem E_WARNING.
ReflectionClass::__toString() para enumerações foi alterada para melhor indicar que a classe é uma enumeração e que os casos de enumeração não são constantes de classe normais.
A saída de ReflectionProperty::__toString() para propriedades com ganchos foi alterada para indicar quais ganchos a propriedade possui, se esses ganchos são finais e se a propriedade é virtual. Isso também afeta a saída de ReflectionClass::__toString() quando uma classe contém propriedades com ganchos.
socket_create()/socket_bind() podem
criar soquetes da família AF_PACKET.
socket_getsockname() obtém o índice da interface e sua
representação em string com o soquete AF_PACKET.
O argumento $use_include_path para as funções
gzfile(), gzopen() e
readgzfile() foi alterado de
int para bool.
As funções gzfile(), gzopen() e readgzfile() agora respeitam o contexto de fluxo padrão.
curl_setopt() com o valor da opção
CURLOPT_FOLLOWLOCATION
não é mais tratada como booleano mas como inteiro, para lidar com
CURLFOLLOW_OBEYCODE e
CURLFOLLOW_FIRSTONLY.
Biblioteca atualizada da versão 5.45 para a 5.46.
O tipo de retorno de finfo_close() foi alterado para true, em vez de bool.
O mecanismo interno de erros de Intl foi modernizado para que indique com mais precisão qual local de chamada causou qual erro. Além disso, algumas exceções de ext/date agora são encapsuladas em uma IntlException.
Uma extensão lexbor sempre habilitada foi adicionada. Ela contém a biblioteca lexbor que foi separada de ext/dom para ser reutilizada entre outras extensões. A nova extensão não é exposta diretamente ao espaço do usuário.
A extensão Opcache agora está sempre integrada ao binário do PHP e é sempre carregada. As diretivas INI opcache.enable e opcache.enable_cli ainda são respeitadas.
Atualizada a biblioteca pcre2lib da versão 10.44 para a 10.46.
Alterada a versão mínima suportada de 3.7.7 para 3.7.17.
Os tipos de retorno de readline_add_history(), readline_clear_history() e readline_callback_handler_install() foram alterados para true, em vez de bool.
ReflectionConstant não é mais final.
Adicionada a opção 'fatal_error_backtraces' para controlar se os erros fatais devem incluir um rastreamento de pilha.
Adicionada configuração INI 'max_memory_limit' exclusiva da inicialização para controlar o limite máximo de memória que pode ser configurado na inicialização ou em tempo de execução. Exceder esse valor gera um aviso, a menos que seja definido como -1, e define o limite de memória para o valor atual de 'max_memory_limit'.
Adicionada a opção 'opcache.file_cache_read_only' para suportar um diretório somente leitura
opcache.file_cache,
para uso com sistemas de arquivos somente leitura (por exemplo, contêineres Docker somente leitura).
Melhor utilizado com opcache.validate_timestamps=0,
opcache.enable_file_override=1
e opcache.file_cache_consistency_checks=0.
Nota: Um cache gerado com uma versão diferente do PHP, um caminho de arquivo diferente ou configurações diferentes (incluindo quais extensões estão carregadas) pode ser ignorado.
O valor padrão de opcache.jit_hot_loop é agora 61 (um número primo) para evitar que seja um múltiplo do número de iterações do loop. Recomenda-se que este parâmetro seja definido como um número primo.
Alterar opcache.memory_consumption quando o OPcache SHM já estiver configurado agora reportará corretamente uma falha em vez de não fazer nada silenciosamente e mostrar valores enganosos no PHPInfo.
Adicionada a opção 'openssl.libctx' para selecionar o tipo de contexto da biblioteca OpenSSL. É possível usar uma libctx personalizada para cada thread ou uma única libctx global (padrão).
Removidos os OPcodes para comparações de identidade com valores booleanos, especialmente
para o padrão match(true).
Adicionada a especialização de OPcode para comparações === [] e
!== [].
A criação de objetos de exceção agora é muito mais rápida.
As partes do código que utilizavam SSE2 foram adaptadas para usar SIMD com ARM NEON também.
Introduzida a máquina virtual TAILCALL, habilitada por padrão ao compilar com Clang>=19 em x86_64 ou aarch64. A máquina virtual TAILCALL é tão rápida quanto a máquina virtual HYBRID usada ao compilar com GCC. Isso faz com que os binários PHP compilados com Clang>=19 sejam tão rápidos quanto os binários compilados com GCC. O desempenho da máquina virtual CALL, usada com outros compiladores, também melhorou consideravelmente.
Agora evita a criação de cópias extras de strings ao converter strings para uso no compilador.
As partes do código que utilizavam SSE2 foram adaptadas para usar SIMD com ARM NEON também.
Melhoria no desempenho da obtenção de variáveis TLS em código compilado JIT em builds que não utilizam Glibc.
Melhoria do desempenho dos seguintes métodos:
Melhoria no desempenho dos acessadores de dimensão e dos métodos de SplFixedArray.
Melhoria no desempenho de funções de array com chamadas de retorno (array_find(), array_filter(), array_map(), usort(), ...).
Desempenho aprimorado de urlencode() e rawurlencode().
Melhoria no desempenho de unpack() com repetições sem nome evitando a criação de strings temporárias e sua reanálise.
Melhoria no desempenho de pack().
Pequenas melhorias no desempenho de array_chunk().