Skip to content

Instantly share code, notes, and snippets.

@DerexScript
Created August 15, 2026 21:12
Show Gist options
  • Select an option

  • Save DerexScript/826c542ec0dc1e116016417a053bdfa6 to your computer and use it in GitHub Desktop.

Select an option

Save DerexScript/826c542ec0dc1e116016417a053bdfa6 to your computer and use it in GitHub Desktop.
CWP with php 8.0.30

Build do PHP-FPM 8.0.30 no CWP

Data da preparação: 15/08/2026.

Estado anterior

Antes desta preparação, o PHP-FPM 8.0 não estava instalado:

/opt/alt/php-fpm80/ não existia
php-fpm80.service não existia

O arquivo 8.0_last_build.ini também não existia e não foi criado manualmente. Ele deve ser gerado pelo painel ao clicar em Save Options.

Nenhuma instalação PHP já ativa, serviço, pool ou socket foi alterado durante esta preparação.

Observação sobre o ciclo de vida

O PHP 8.0.30 é a última versão oficial da série 8.0. Essa série chegou ao fim do suporte oficial em 26/11/2023. O build permanece útil para compatibilidade com aplicações antigas, mas aplicações compatíveis devem preferencialmente ser migradas para uma série do PHP ainda suportada.

Arquivos persistentes alterados

  • /usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/8.0.ini

Criado:

  • /usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.0/build_pecl_module.sh

Modificados:

apcu.sh
imagick.sh
ioncube.sh
mailparse.sh
mcrypt.sh
memcache.sh
mongodb.sh
opcache.sh
redis.sh
sourceguardian.sh
sqlsrv.sh
ssh2.sh
uploadprogress.sh
xdebug.sh

As referências aos três scripts pre_run abaixo foram removidas do 8.0.ini, mas os próprios arquivos não foram alterados:

php80.sh
ldap.sh
firebird.sh

O imap7.sh foi preservado porque o PHP 8.0 ainda contém a extensão IMAP no core e usa as bibliotecas UW-IMAP.

O script antigo sodium.sh não foi alterado; ele deixou de ser chamado porque Sodium agora é compilado diretamente do fonte oficial do PHP.

Os scripts memcached.sh e yaz.sh não estão associados a opções do 8.0.ini e não foram alterados.

Correção do zlib e das opções salvas

O bloco [zlib] continha:

include=zlib-dir

O arquivo também possuía uma seção separada [zlib-dir], que geraria o argumento antigo e desnecessário:

--with-zlib-dir=/usr

A dependência e a seção redundante foram removidas. Isso evita que a interface do CWP trate zlib-dir como uma segunda opção obrigatória e permite salvar todas as escolhas normalmente.

O zlib continua selecionável e será compilado com:

--with-zlib=/usr

Ajustes no 8.0.ini

  • O pre-script antigo php80.sh, que recompilava um PCRE externo, foi removido.
  • mbstring, pcntl, posix, shmop e sockets passam a ser compilados como módulos compartilhados.
  • O PCRE interno do PHP é usado com --without-external-pcre.
  • LDAP usa a sintaxe válida --with-ldap=/usr --with-ldap-sasl.
  • PDO Firebird usa as bibliotecas do sistema em /usr.
  • Sodium é compilado do core com --with-sodium.
  • A segunda seção duplicada de calendar foi removida.
  • Os pre-scripts antigos de LDAP e Firebird foram removidos porque as bibliotecas e os headers do sistema já estão disponíveis.

Estas opções continuam no core do PHP 8.0 e foram preservadas:

pspell
imap
imap-ssl
kerberos

O PHP 8.0 não oferece a opção gd-avif usada nas séries posteriores. Por isso ela não foi inventada nem adicionada ao painel desta versão.

Depois do ajuste, o painel apresenta 62 opções válidas. Dessas, 49 geram opções do configure, expandidas em 52 argumentos efetivos quando todas são selecionadas.

Extensões externas

O novo build_pecl_module.sh usa diretórios temporários exclusivos, downloads HTTPS com falha explícita, versões fixadas, verificação do arquivo .so, verificação de bibliotecas dinâmicas e criação determinística do arquivo .ini.

Versões fixadas:

APCu             5.1.28
Imagick          3.8.1
Mailparse        3.2.0
Mcrypt           1.0.9
Memcache         8.2
MongoDB          1.20.1
Redis            6.3.0
SQLSRV           5.11.1
PDO_SQLSRV       5.11.1
SSH2             1.5.0
Uploadprogress   2.0.2
Xdebug           3.5.3

MongoDB foi fixado em 1.20.1, última linha compatível com PHP 8.0. A versão 1.21 já exige PHP 8.1.

SQLSRV e PDO_SQLSRV foram fixados em 5.11.1, linha compatível com PHP 8.0. A linha 5.12 removeu o suporte ao PHP 8.0.

O Memcache 8.2 recebe a correção dos includes php_smart_string*.h e é compilado em modo serial. O MongoDB também é compilado em modo serial para evitar uma corrida conhecida na criação do diretório .libs.

O loader do SourceGuardian é baixado diretamente do fornecedor e validado antes da ativação:

SourceGuardian: ixed.8.0.lin

Exceção inevitável da ionCube

A própria ionCube nunca publicou um Loader para PHP 8.0. O suporte do fornecedor saltou do PHP 7.4 diretamente para o PHP 8.1, começando na versão 12 do Loader. Os pacotes oficiais atual e legado foram conferidos e nenhum deles contém ioncube_loader_lin_8.0.so.

A opção ioncube permanece visível e pode ser marcada junto com todas as outras. Seu script confirma que o PHP 8.0 principal foi instalado e termina com sucesso, gravando somente um comentário em ioncube.ini. Assim, a ausência oficial do Loader não interrompe o build e não é mascarada por um arquivo incompatível ou de terceiros.

Consequentemente, ionCube não estará disponível no PHP 8.0.30.

O opcache.sh valida e ativa OPcache e mbstring, cria um INI neutro para o Sodium compilado no core e mantém os módulos sensíveis comentados nos respectivos arquivos .ini.

Estado esperado após o build

Todas as 62 opções visíveis no painel podem ser selecionadas.

Serão compilados, porém permanecerão desativados:

mcrypt
pcntl
posix
shmop
sockets
ssh2
xdebug

Motivos:

  • pcntl: controle de processos, sinais e forks; inadequado para uso geral em servidor web compartilhado.
  • posix: expõe funções e informações POSIX do sistema.
  • shmop: acesso direto à memória compartilhada do sistema.
  • sockets: sockets de baixo nível, clientes, servidores e daemons.
  • ssh2: shell remoto, execução remota, SCP, SFTP e túneis SSH.
  • xdebug: ferramenta de desenvolvimento e depuração, inadequada para produção.
  • mcrypt: extensão obsoleta e não mantida; deve ser substituída por OpenSSL ou Sodium.

Os demais módulos compatíveis selecionados serão ativados, incluindo IMAP, Pspell, mbstring, OPcache, APCu, Imagick, Memcache, Redis, MongoDB, Uploadprogress, SourceGuardian, Mailparse, SQLSRV e PDO_SQLSRV. A única opção selecionada sem módulo correspondente será ionCube, pela limitação oficial descrita acima.

Backups

Foi criado um backup individual, anterior às alterações, para cada arquivo modificado. Todos usam o marcador:

pre_php80_20260815_164930.backup

Configuração:

/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/8.0.ini.pre_php80_20260815_164930.backup

Scripts:

/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/apcu.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/imagick.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/ioncube.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/mailparse.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/mcrypt.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/memcache.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/mongodb.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/opcache.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/redis.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/sourceguardian.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/sqlsrv.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/ssh2.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/uploadprogress.sh.pre_php80_20260815_164930.backup
/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/external_modules/8.0/xdebug.sh.pre_php80_20260815_164930.backup

Os SHA-256 dos 15 backups foram comparados com os originais antes da primeira alteração e todos coincidiram.

Validações realizadas antes do build

  • O 8.0.ini foi carregado com parse_ini_file(): 62 seções válidas.
  • Não restou nenhuma dependência include inexistente.
  • Não existem seções duplicadas.
  • Todos os scripts .sh do diretório 8.0 passaram em sh -n.
  • Não restou referência indevida a caminhos ou loaders de outras versões do PHP nos arquivos modificados.
  • As 12 URLs das versões PECL fixadas responderam corretamente e os arquivos compactados passaram no teste de integridade.
  • Os metadados PECL das 12 versões aceitam o PHP 8.0.30.
  • MongoDB 1.20.1 foi conferido como compatível com PHP 8.0 nos metadados PECL.
  • SQLSRV/PDO_SQLSRV 5.11.1 foi conferido na matriz oficial da Microsoft para PHP 8.0.
  • O Xdebug 3.5.3 foi conferido na matriz oficial de compatibilidade com PHP 8.0.
  • O arquivo oficial do SourceGuardian contém ixed.8.0.lin e passou no teste de integridade.
  • Os pacotes oficiais atual e legado da ionCube foram conferidos; a ausência do Loader para PHP 8.0 corresponde à política publicada pelo fornecedor.
  • O fonte oficial do PHP 8.0.30 teve o SHA-256 validado: 449d2048fcb20a314d8c218097c6d1047a9f1c5bb72aa54d5d3eba0a27a4c80c.
  • O fonte foi submetido a um configure real com os mesmos 52 argumentos que o painel produzirá ao selecionar tudo.
  • O configure terminou com código 0, sem opções desconhecidas ou erros.
  • O preflight confirmou IMAP com SSL e Kerberos, Pspell, pcntl, posix, shmop, sockets, LDAP, PostgreSQL, PDO Firebird, Sodium e Argon2.
  • Os diretórios temporários das validações foram removidos.
  • Nenhum build foi iniciado durante esta preparação.

Resultado do build e validação pós-build

O build iniciado pelo painel em 15/08/2026 terminou com a mensagem:

Build Completed

A instalação resultante é:

PHP 8.0.30 NTS
PHP API:             20200930
Zend Module API:     20200930
Zend Extension API:  420200930

O 8.0_last_build.ini foi criado pelo painel com as 62 opções selecionadas. O arquivo possui 63 seções ao incluir o bloco [version]. Nesse bloco, major="8.0" e minor=""; esse campo vazio é apenas metadado do painel. O fonte usado no log, o binário, php-config e phpize confirmam a versão 8.0.30.

Extensões e recursos

O PHP inicia sem warnings e as 43 extensões/recursos esperados ativos foram confirmados. As extensões externas reportaram:

APCu             5.1.28
Imagick          3.8.1
Mailparse        3.2.0
Memcache         8.2
MongoDB          1.20.1
Redis            6.3.0
SQLSRV           5.11.1
PDO_SQLSRV       5.11.1
Uploadprogress   2.0.2
SourceGuardian   17.0.0

Como previsto, ionCube não está carregado. O arquivo ioncube.ini contém somente o comentário que registra a indisponibilidade oficial do Loader para PHP 8.0.

Os sete módulos compilados, mas mantidos desativados nos INIs, foram carregados individualmente com php -n e aprovados:

mcrypt    1.0.9
pcntl     8.0.30
posix     8.0.30
shmop     8.0.30
sockets   8.0.30
ssh2      1.5.0
xdebug    3.5.3

Também foram confirmados:

  • PDO com Firebird, MySQL, PostgreSQL, SQLite e SQL Server;
  • GD com FreeType, JPEG, PNG, XPM e WebP;
  • IMAP c-client 2007f com SSL e Kerberos;
  • Argon2i e Argon2id;
  • Sodium compilado no core e funcional mesmo com php -n;
  • OPcache ativo com otimização habilitada;
  • 18 arquivos .so, além de php, php-fpm e SourceGuardian, sem dependências dinâmicas ausentes no ldd.

PHP-FPM

O serviço php-fpm80.service ficou habilitado e ativo, com PID mestre 3574813 durante a validação. O teste php-fpm -t aprovou a configuração e o socket abaixo está escutando:

/opt/alt/php-fpm80/usr/var/sockets/cwpsvc.sock

Ainda não existem pools de usuários em /opt/alt/php-fpm80/usr/etc/php-fpm.d/users/. Por isso o PHP-FPM registra o aviso de que o padrão users/*.conf não encontrou arquivos. Isso é esperado enquanto nenhum site estiver atribuído ao PHP 8.0 e não afeta o pool cwpsvc.

Mensagens não impeditivas no log

O log contém avisos de getcwd entre alguns scripts porque o diretório de trabalho anterior já havia sido removido. Cada script mudou para seu próprio diretório válido e todas as extensões seguintes foram compiladas e instaladas.

As mensagens not found da configuração do MongoDB são testes normais de portabilidade para funções de outros sistemas operacionais. A ausência de opagent é apenas uma integração opcional de profiling do OPcache.

A mensagem final abaixo pertence somente à notificação do painel e não ao build do PHP:

Error:Can't add notification!

Não restaram diretórios temporários php80-* dos scripts externos em /usr/local/src.

Procedimento no painel

  1. Atualizar a página do CWP para recarregar o 8.0.ini.
  2. Abrir PHP-FPM Selector → PHP 8.0.30 → opções.
  3. Marcar todas as 62 opções exibidas.
  4. Clicar em Save Options.
  5. Confirmar que o arquivo 8.0_last_build.ini foi criado pelo painel.
  6. Iniciar o build do PHP 8.0.30.
  7. Acompanhar:
tail -f /var/log/php-selector-rebuild.log

Depois do build, conferir:

/opt/alt/php-fpm80/usr/bin/php -v
/opt/alt/php-fpm80/usr/bin/php --ini
/opt/alt/php-fpm80/usr/bin/php -m
@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.0/uploadprogress.sh

#!/bin/sh
SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd)
exec sh "$SCRIPT_DIR/build_pecl_module.sh" uploadprogress 2.0.2 uploadprogress extension enabled --enable-uploadprogress

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.0/xdebug.sh

#!/bin/sh
SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd)
exec sh "$SCRIPT_DIR/build_pecl_module.sh" xdebug 3.5.3 xdebug zend_extension disabled --enable-xdebug

@DerexScript

Copy link
Copy Markdown
Author
cat /etc/*os-release*
AlmaLinux release 8.10 (Cerulean Leopard)
NAME="AlmaLinux"
VERSION="8.10 (Cerulean Leopard)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.10"
PLATFORM_ID="platform:el8"
PRETTY_NAME="AlmaLinux 8.10 (Cerulean Leopard)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:8::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"

ALMALINUX_MANTISBT_PROJECT="AlmaLinux-8"
ALMALINUX_MANTISBT_PROJECT_VERSION="8.10"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.10"
SUPPORT_END=2029-06-01
uname -r
4.18.0-553.153.1.el8_10.x86_64

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment