Skip to content

Instantly share code, notes, and snippets.

@DerexScript
Created August 15, 2026 20:09
Show Gist options
  • Select an option

  • Save DerexScript/9516573d2d6f08fefab43b25fefdb6a3 to your computer and use it in GitHub Desktop.

Select an option

Save DerexScript/9516573d2d6f08fefab43b25fefdb6a3 to your computer and use it in GitHub Desktop.
CWP with php 8.3.33

Build do PHP-FPM 8.3.33 no CWP

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

Arquivos persistentes alterados

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

Criado:

  • /usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.3/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

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

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

php83.sh
gdavif.sh
ldap.sh
firebird.sh

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

Os scripts antigos mbstring.sh e sodium.sh também não foram alterados; eles deixaram de ser chamados porque essas extensões agora são compiladas diretamente do fonte oficial do PHP.

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

O bloco [zlib] continha:

include=zlib-dir

O 8.3.ini 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 impede que o argumento antigo seja enviado ao configure do PHP 8.3.33. O zlib continua selecionável e será compilado normalmente com:

--with-zlib=/usr

Ajustes no 8.3.ini

  • mbstring, pcntl, posix, shmop e sockets passam a ser compilados como módulos compartilhados.
  • O mbstring deixa de baixar um binário externo e é compilado do próprio fonte do PHP 8.3.33.
  • 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.
  • O pre-script antigo do AVIF foi removido; a biblioteca disponível no sistema é usada por --with-avif.
  • Os pre-scripts antigos de LDAP e Firebird foram removidos porque as bibliotecas e headers do sistema já estão disponíveis.

O PHP 8.3 ainda possui módulos que foram removidos do core no PHP 8.4. Por isso estas opções foram preservadas e validadas:

pspell
imap
imap-ssl
kerberos

Depois do ajuste, o painel apresenta 63 opções válidas.

Extensões externas

O novo build_pecl_module.sh usa diretórios temporários exclusivos, downloads HTTPS com falha explícita, versões fixadas, compilação paralela, 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          2.3.3
Redis            6.3.0
SQLSRV           5.13.3
PDO_SQLSRV       5.13.3
SSH2             1.5.0
Uploadprogress   2.0.2
Xdebug           3.5.3

O Memcache 8.2 recebe a correção dos includes php_smart_string*.h e é compilado em modo serial para evitar a corrida de compilação observada nos builds posteriores.

Os loaders são baixados diretamente dos fornecedores e validados antes da ativação:

ionCube:        ioncube_loader_lin_8.3.so
SourceGuardian: ixed.8.3.lin

O opcache.sh é específico para o PHP 8.3. Ele valida e ativa OPcache e mbstring, e mantém os módulos sensíveis comentados nos respectivos arquivos .ini.

Estado esperado após o build

Todos os módulos visíveis no painel podem ser selecionados.

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 selecionados serão ativados, incluindo IMAP, Pspell, mbstring, OPcache, APCu, Imagick, Memcache, Redis, MongoDB, Uploadprogress, ionCube, SourceGuardian, Mailparse, SQLSRV e PDO_SQLSRV.

Backups

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

pre_php83_20260815_011125.backup

Configuração:

/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/8.3.ini.pre_php83_20260815_011125.backup

Scripts:

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

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

Validações realizadas

  • O 8.3.ini foi carregado com parse_ini_file(): 63 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.3 passaram em sh -n.
  • Não restou referência indevida a caminhos ou loaders do PHP 8.4.
  • Todas as URLs das versões PECL fixadas responderam com HTTP 200.
  • Os metadados PECL de todas as versões fixadas aceitam o PHP 8.3.33.
  • Os arquivos oficiais de ionCube e SourceGuardian contêm loaders para PHP 8.3 e os arquivos compactados passaram no teste de integridade.
  • O fonte oficial do PHP 8.3.33 foi submetido a um configure real com os mesmos 53 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, mbstring, pcntl, posix, shmop, sockets, OPcache, AVIF, LDAP, PostgreSQL, PDO Firebird, Sodium e Argon2.
  • Os diretórios temporários das validações foram removidos depois dos testes.

Procedimento no painel

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

Depois do build, conferir:

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

DerexScript commented Aug 15, 2026

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.3/redis.sh

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

@DerexScript

DerexScript commented Aug 15, 2026

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.3/sourceguardian.sh

#!/bin/sh
set -eu

BUILD_ROOT=/usr/local/src
PHP_PREFIX=/opt/alt/php-fpm83/usr
PHP="$PHP_PREFIX/bin/php"
INI_DIR="$PHP_PREFIX/php/php.d"
DEST_DIR=/usr/local/sourceguardian
LOADER_NAME=ixed.8.3.lin

cd "$BUILD_ROOT"
WORK_DIR=$(mktemp -d "$BUILD_ROOT/php83-sourceguardian.XXXXXX")

cleanup()
{
    cd "$BUILD_ROOT" 2>/dev/null || return
    rm -rf -- "$WORK_DIR"
}

trap cleanup EXIT HUP INT TERM

ARCHIVE="$WORK_DIR/sourceguardian.zip"
EXTRACT_DIR="$WORK_DIR/extracted"

install -d -m 0755 "$EXTRACT_DIR"

curl --fail --location --retry 3 --connect-timeout 20 \
    https://www.sourceguardian.com/loaders/download/loaders.linux-x86_64.zip \
    --output "$ARCHIVE"

unzip -j -o "$ARCHIVE" "$LOADER_NAME" -d "$EXTRACT_DIR"
SOURCE_LOADER="$EXTRACT_DIR/$LOADER_NAME"

if [ ! -f "$SOURCE_LOADER" ]; then
    echo "ERRO: loader SourceGuardian para PHP 8.3 não encontrado"
    exit 1
fi

install -d -m 0755 "$DEST_DIR" "$INI_DIR"
install -m 0644 "$SOURCE_LOADER" "$DEST_DIR/$LOADER_NAME"

if ! "$PHP" -n -d "zend_extension=$DEST_DIR/$LOADER_NAME" \
    -r 'exit(extension_loaded("SourceGuardian") ? 0 : 1);'
then
    echo "ERRO: loader SourceGuardian para PHP 8.3 não pôde ser carregado"
    exit 1
fi

printf 'zend_extension=%s/%s\n' "$DEST_DIR" "$LOADER_NAME" \
    > "$INI_DIR/sourceguardian.ini"

echo "SourceGuardian PHP 8.3 instalado e ativado"

@DerexScript

DerexScript commented Aug 15, 2026

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.3/sqlsrv.sh

#!/bin/sh
set -eu

SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd)

sh "$SCRIPT_DIR/build_pecl_module.sh" \
    sqlsrv 5.13.3 sqlsrv extension enabled --enable-sqlsrv

exec sh "$SCRIPT_DIR/build_pecl_module.sh" \
    pdo_sqlsrv 5.13.3 pdo_sqlsrv extension enabled --enable-pdo_sqlsrv

@DerexScript

DerexScript commented Aug 15, 2026

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.3/ssh2.sh

#!/bin/sh
SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd)
exec sh "$SCRIPT_DIR/build_pecl_module.sh" ssh2 1.5.0 ssh2 extension disabled --with-ssh2=/usr/local

@DerexScript

DerexScript commented Aug 15, 2026

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.3/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

DerexScript commented Aug 15, 2026

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/8.3/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

DerexScript commented Aug 15, 2026

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