Skip to content

Instantly share code, notes, and snippets.

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

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

Select an option

Save DerexScript/e429b33d822efb29f0620e8d4631efc6 to your computer and use it in GitHub Desktop.
CWP with php 7.4.33

Build do PHP-FPM 7.4.33 no CWP

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

Estado anterior

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

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

O arquivo 7.4_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 7.4.33 é a última versão oficial da série 7.4. Essa série chegou ao fim do suporte oficial em 28/11/2022. 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/7.4.ini

Criado:

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

Modificados:

apcu.sh
imagick.sh
ioncube.sh
mailparse.sh
mcrypt.sh
memcache.sh
memcached.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 7.4.ini, mas os próprios arquivos não foram alterados:

php74.sh
ldap.sh
firebird.sh

O imap7.sh foi preservado porque o PHP 7.4 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.

O script yaz.sh não está associado a uma opção do 7.4.ini e não foi alterado.

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 7.4.ini

  • O pre-script antigo php74.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 7.4 e foram preservadas:

pspell
imap
imap-ssl
kerberos
xmlrpc

O PHP 7.4 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 64 opções válidas. Dessas, 50 geram opções do configure, expandidas em 53 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, compilação paralela quando segura, teste real de carregamento do módulo, 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         4.0.5.2
Memcached        3.4.0
MongoDB          1.20.1
Redis            6.3.0
SQLSRV           5.10.1
PDO_SQLSRV       5.10.1
SSH2             1.4.1
Uploadprogress   2.0.2
Xdebug           3.1.6

As linhas posteriores de algumas extensões abandonaram o PHP 7.4:

  • Memcache 8.x exige PHP 8; a linha 4.x é a linha indicada pelo mantenedor para PHP 7.0 a 7.4.
  • MongoDB 1.20.1 é a última linha compatível com PHP 7.4; a linha 1.21 exige PHP 8.1.
  • SQLSRV/PDO_SQLSRV 5.10.1 é a última linha com suporte ao PHP 7.4; a linha 5.11 removeu esse suporte.
  • SSH2 1.5 exige PHP 8; a versão 1.4.1 aceita PHP 7.
  • Xdebug 3.1.6 aceita PHP 7.2 a 8.1; a linha 3.2 passou a exigir PHP 8.

O Memcache e o MongoDB são compilados em modo serial para evitar corridas em fontes antigos ou bibliotecas incorporadas.

O Memcached 3.4.0 usa a libmemcached 1.0.18 já instalada em /usr, com suporte a sessões, SASL e JSON. Os serializadores opcionais igbinary e msgpack ficam desabilitados porque não são opções oferecidas pelo seletor 7.4.

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

ionCube:        ioncube_loader_lin_7.4.so
SourceGuardian: ixed.7.4.lin

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 64 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 selecionados serão ativados, incluindo XML-RPC, IMAP, Pspell, mbstring, OPcache, APCu, Imagick, Memcache, Memcached, 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_php74_20260815_173423.backup

Configuração:

/root/cwp_bkp/usr_local_cwpsrv_htdocs_resources_conf_el8_php-fpm_selector/7.4.ini.pre_php74_20260815_173423.backup

Scripts:

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

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

Validações realizadas antes do build

  • O 7.4.ini foi carregado com parse_ini_file(): 64 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 7.4 passaram em sh -n.
  • Não restou referência indevida a caminhos ou loaders de outras versões do PHP nos arquivos modificados.
  • As 13 URLs das versões PECL fixadas responderam corretamente e os arquivos compactados passaram no teste de integridade.
  • Os metadados PECL das 13 versões aceitam o PHP 7.4.33.
  • Memcache 4.0.5.2, MongoDB 1.20.1, Redis 6.3.0, SSH2 1.4.1 e Xdebug 3.1.6 tiveram seus limites de PHP conferidos diretamente nos metadados PECL.
  • SQLSRV/PDO_SQLSRV 5.10.1 foi conferido na matriz oficial da Microsoft como a última linha com suporte ao PHP 7.4.
  • A libmemcached 1.0.18, seus headers e as funções SASL necessárias estão disponíveis no sistema.
  • Os arquivos oficiais de ionCube e SourceGuardian contêm loaders para PHP 7.4 e os arquivos compactados passaram no teste de integridade.
  • O fonte oficial do PHP 7.4.33 teve o SHA-256 validado: 5a2337996f07c8a097e03d46263b5c98d2c8e355227756351421003bea8f463e.
  • O fonte 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 XML-RPC, IMAP com SSL e Kerberos, Pspell, pcntl, posix, shmop, sockets, LDAP com SASL, 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 7.4.33 NTS
PHP API:             20190902
Zend Module API:     20190902
Zend Extension API:  320190902

O 7.4_last_build.ini foi criado pelo painel com as 64 opções selecionadas. O arquivo possui 65 seções ao incluir o bloco [version]. Nesse bloco, major="7.4" 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 7.4.33.

Extensões e recursos

O PHP inicia sem warnings e as 46 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         4.0.5.2
Memcached        3.4.0
MongoDB          1.20.1
Redis            6.3.0
SQLSRV           5.10.1
PDO_SQLSRV       5.10.1
Uploadprogress   2.0.2
ionCube          15.5.0
SourceGuardian   17.0.0

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

mcrypt    1.0.9
pcntl     7.4.33
posix     7.4.33
shmop     7.4.33
sockets   7.4.33
ssh2      1.4.1
xdebug    3.1.6

Também foram confirmados:

  • PDO com Firebird, MySQL, PostgreSQL, SQLite e SQL Server;
  • GD com FreeType, JPEG, PNG, XPM e WebP;
  • XML-RPC funcional;
  • 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;
  • Memcache e Memcached carregados simultaneamente;
  • Memcached com suporte a sessões, SASL e serializador JSON;
  • 19 arquivos .so, além de php, php-fpm, ionCube e SourceGuardian, sem dependências dinâmicas ausentes no ldd.

PHP-FPM

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

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

Ainda não existem pools de usuários em /opt/alt/php-fpm74/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 7.4 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 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 php74-* dos scripts externos em /usr/local/src.

Procedimento no painel

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

Depois do build, conferir:

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

Copy link
Copy Markdown
Author

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

[config-path]
default=1
required=1
option="--prefix=/opt/alt/php-fpm74/usr --with-config-file-path=/opt/alt/php-fpm74/usr/php"
info-file=config-path.txt

[config-scan]
default=1
required=1
option="--with-config-file-scan-dir=/opt/alt/php-fpm74/usr/php/php.d"
info-file=config-scan.txt

[zlib]
default=1
option="--with-zlib=/usr"
info-file=zlib.txt

[mbstring]
default=1
option="--enable-mbstring=shared"
info-file=mbstring.txt

[zip]
default=1
option="--with-zip"
info-file=zip.txt

[bcmath]
default=1
option="--enable-bcmath"
info-file=bcmath.txt

[pcntl]
default=1
option="--enable-pcntl=shared"
info-file=pcntl.txt

[ftp]
default=1
option="--enable-ftp"
info-file=ftp.txt

[exif]
default=1
required=1
option="--enable-exif"
info-file=exif.txt

[calendar]
default=1
option="--enable-calendar"
info-file=calendar.txt

[sysvmsg]
default=1
required=1
option="--enable-sysvmsg"
info-file=sysvmsg.txt

[sysvsem]
default=1
required=1
option="--enable-sysvsem"
info-file=sysvsem.txt

[sysvshm]
default=1
required=1
option="--enable-sysvshm"
info-file=sysvshm.txt

[tidy]
default=1
option="--with-tidy"
info-file=tidy.txt

[curl]
default=1
required=1
option="--with-curl"
info-file=curl.txt

[mcrypt]
default=0
script="mcrypt.sh"
info-file=mcrypt.txt

[iconv]
default=1
option="--with-iconv"
info-file=iconv.txt

[gmp]
default=1
option="--with-gmp"
info-file=gmp.txt

[pspell]
default=1
option="--with-pspell"
info-file=pspell.txt

[gd]
default=1
option="--enable-gd"
info-file=gd.txt

[gd-jpeg]
default=1
option="--with-jpeg"
info-file=gd.txt

[gd-freetype]
default=1
option="--with-freetype"
info-file=gd.txt

[gd-jis-conv]
default=1
option="--enable-gd-jis-conv"
info-file=gd.txt

[gd-webp]
default=1
option="--with-webp"
info-file=gdwebp.txt

[xpm-dir]
default=1
option="--with-xpm"
info-file=no.txt

[openssl]
default=1
option="--with-openssl"
info-file=openssl.txt

[pdo-mysql]
default=1
option="--with-pdo-mysql=mysqlnd"
info-file=pdo-mysql.txt

[gettext]
default=1
option="--with-gettext=/usr"
info-file=gettext.txt

[bz2]
default=1
option="--with-bz2=/usr"
info-file=bz2.txt

[mysqli]
default=1
option="--with-mysqli"
info-file=mysqli.txt

[soap]
default=1
option="--enable-soap"
info-file=soap.txt

[phar]
default=1
option="--enable-phar"
info-file=phar.txt

[xsl]
default=1
option="--with-xsl"
info-file=xsl.txt

[xmlrpc]
default=1
option="--with-xmlrpc"
info-file=xmlrpc.txt

[kerberos]
default=1
option="--with-kerberos"
info-file=kerberos.txt

[posix]
default=1
option="--enable-posix=shared"
info-file=posix.txt

[sockets]
default=1
option="--enable-sockets=shared"
info-file=sockets.txt

[pcre]
default=1
option="--without-external-pcre"
info-file=pcre.txt

[libdir]
default=1
required=1
option="--with-libdir=lib64"
info-file=libdir.txt

[mysql-sock]
default=1
required=1
option="--with-mysql-sock=/var/lib/mysql/mysql.sock"
info-file=mysql-sock.txt

[shmop]
default=0
option="--enable-shmop=shared"
info-file=shmop.txt

[intl]
default=1
option="--enable-intl"
info-file=intl.txt

[imap]
default=1
option="--with-imap --with-imap-ssl"
info-file=imap.txt
pre-script="imap7.sh"

[imagick]
default=1
script="imagick.sh"
info-file=imagick.txt

[memcached]
default=0
script="memcached.sh"
info-file=memcached.txt

[memcache]
default=0
script="memcache.sh"
info-file=memcache7.txt

[redis]
default=0
script="redis.sh"
info-file=redis.txt

[pgsql]
default=0
option="--with-pgsql"
info-file=pgsql.txt

[pdo-pgsql]
default=0
option="--with-pdo-pgsql"
info-file=pdo-pgsql.txt

[mongodb]
default=0
script="mongodb.sh"
info-file=mongodb.txt

[uploadprogress]
default=0
script="uploadprogress.sh"
info-file=uploadprogress.txt

[ldap]
default=0
option="--with-ldap=/usr --with-ldap-sasl"
info-file=ldap.txt

[ioncube]
default=1
script="ioncube.sh"
info-file=ioncube.txt

[sourceguardian]
default=0
script="sourceguardian.sh"
info-file=sourceguardian.txt

[pdo_firebird]
default=0
option="--with-pdo-firebird=/usr"
info-file=PDO_FIREBIRD.txt

[mailparse]
default=0
script="mailparse.sh"
info-file=mailparse.txt

[ssh2]
default=0
script="ssh2.sh"
info-file=ssh2.txt

[fpm]
default=1
required=1
option="--enable-fpm"
info-file=fpm.txt

[zend-opcache]
default=1
option="--enable-opcache"
script="opcache.sh"
info-file=opcache.txt

[apcu]
default=1
script="apcu.sh"
info-file=apcu.txt

[sqlsrv]
default=0
script="sqlsrv.sh"
info-file=sqlsrv.txt

[xdebug]
default=0
script="xdebug.sh"
info-file=xdebug.txt

[sodium]
default=1
option="--with-sodium"
info-file=sodium.txt

[argon2]
default=1
option="--with-password-argon2"
info-file=argon2.txt

@DerexScript

Copy link
Copy Markdown
Author

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

#!/bin/sh
set -eu

BUILD_ROOT=/usr/local/src

if [ "$#" -lt 5 ]; then
    echo "Uso: $0 pacote versao modulo diretiva enabled|disabled [opcoes]"
    exit 1
fi

PACKAGE=$1
VERSION=$2
MODULE=$3
DIRECTIVE=$4
LOAD_MODE=$5
shift 5

case "$DIRECTIVE" in
    extension|zend_extension) ;;
    *)
        echo "Diretiva inválida: $DIRECTIVE"
        exit 1
        ;;
esac

case "$LOAD_MODE" in
    enabled|disabled) ;;
    *)
        echo "Modo inválido: $LOAD_MODE"
        exit 1
        ;;
esac

PHP_PREFIX=/opt/alt/php-fpm74/usr
PHP="$PHP_PREFIX/bin/php"
PHPIZE="$PHP_PREFIX/bin/phpize"
PHP_CONFIG="$PHP_PREFIX/bin/php-config"
INI_DIR="$PHP_PREFIX/php/php.d"

if [ ! -x "$PHP" ] || [ ! -x "$PHPIZE" ] || [ ! -x "$PHP_CONFIG" ]; then
    echo "ERRO: PHP/phpize/php-config do PHP 7.4 não encontrado"
    exit 1
fi

JOBS=$(getconf _NPROCESSORS_ONLN 2>/dev/null || printf '1')
case "$JOBS" in
    ''|*[!0-9]*) JOBS=1 ;;
esac

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig
LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64:/usr/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
export PKG_CONFIG_PATH LD_LIBRARY_PATH

cd "$BUILD_ROOT"
WORK_DIR=$(mktemp -d "$BUILD_ROOT/php74-${PACKAGE}.XXXXXX")

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

trap cleanup EXIT HUP INT TERM

ARCHIVE="$WORK_DIR/${PACKAGE}-${VERSION}.tgz"
URL="https://pecl.php.net/get/${PACKAGE}-${VERSION}.tgz"

echo "Baixando $URL"
curl --fail --location --retry 3 --connect-timeout 20 \
    "$URL" --output "$ARCHIVE"

tar -xzf "$ARCHIVE" -C "$WORK_DIR"

SOURCE_DIR=$(find "$WORK_DIR" -mindepth 1 -maxdepth 1 \
    -type d -name "${PACKAGE}-*" -print -quit)

if [ -z "$SOURCE_DIR" ] || [ ! -d "$SOURCE_DIR" ]; then
    echo "ERRO: código-fonte de $PACKAGE não encontrado"
    exit 1
fi

cd "$SOURCE_DIR"

case "$PACKAGE" in
    memcache|mongodb)
        JOBS=1
        echo "$PACKAGE será compilado em modo serial"
        ;;
esac

"$PHPIZE"
./configure --with-php-config="$PHP_CONFIG" "$@"
make -j"$JOBS"
make install

EXT_DIR=$("$PHP_CONFIG" --extension-dir)
MODULE_FILE="$EXT_DIR/${MODULE}.so"

if [ ! -f "$MODULE_FILE" ]; then
    echo "ERRO: $MODULE_FILE não foi instalado"
    exit 1
fi

if ldd "$MODULE_FILE" 2>/dev/null | grep -q 'not found'; then
    echo "ERRO: dependência dinâmica ausente em $MODULE_FILE"
    ldd "$MODULE_FILE" | grep 'not found' || true
    exit 1
fi

if [ "$DIRECTIVE" = "zend_extension" ]; then
    if ! "$PHP" -n -d "zend_extension=$MODULE_FILE" \
        -r "exit(extension_loaded('$MODULE') ? 0 : 1);"
    then
        echo "ERRO: $MODULE não pôde ser carregado"
        exit 1
    fi
elif [ "$MODULE" = "mailparse" ]; then
    MBSTRING_SO="$EXT_DIR/mbstring.so"
    if [ ! -f "$MBSTRING_SO" ] || \
        ! "$PHP" -n -d "extension=$MBSTRING_SO" \
            -d "extension=$MODULE_FILE" \
            -r "exit(extension_loaded('$MODULE') ? 0 : 1);"
    then
        echo "ERRO: $MODULE não pôde ser carregado com mbstring"
        exit 1
    fi
elif ! "$PHP" -n -d "extension=$MODULE_FILE" \
    -r "exit(extension_loaded('$MODULE') ? 0 : 1);"
then
    echo "ERRO: $MODULE não pôde ser carregado"
    exit 1
fi

install -d -m 0755 "$INI_DIR"

if [ "$LOAD_MODE" = "enabled" ]; then
    printf '%s=%s.so\n' "$DIRECTIVE" "$MODULE" \
        > "$INI_DIR/${MODULE}.ini"
else
    printf ';%s=%s.so\n' "$DIRECTIVE" "$MODULE" \
        > "$INI_DIR/${MODULE}.ini"
fi

echo "$MODULE instalado com estado: $LOAD_MODE"

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/apcu.sh

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

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/imagick.sh

#!/bin/sh
SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd)
exec sh "$SCRIPT_DIR/build_pecl_module.sh" imagick 3.8.1 imagick extension enabled --with-imagick=/usr

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/ioncube.sh

#!/bin/sh
set -eu

BUILD_ROOT=/usr/local/src
PHP_PREFIX=/opt/alt/php-fpm74/usr
PHP="$PHP_PREFIX/bin/php"
INI_DIR="$PHP_PREFIX/php/php.d"
DEST_DIR=/usr/local/ioncube
LOADER_NAME=ioncube_loader_lin_7.4.so

cd "$BUILD_ROOT"
WORK_DIR=$(mktemp -d "$BUILD_ROOT/php74-ioncube.XXXXXX")

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

trap cleanup EXIT HUP INT TERM

ARCHIVE="$WORK_DIR/ioncube.tar.gz"

curl --fail --location --retry 3 --connect-timeout 20 \
    https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz \
    --output "$ARCHIVE"

tar -xzf "$ARCHIVE" -C "$WORK_DIR"
SOURCE_LOADER="$WORK_DIR/ioncube/$LOADER_NAME"

if [ ! -f "$SOURCE_LOADER" ]; then
    echo "ERRO: loader ionCube para PHP 7.4 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("ionCube Loader") ? 0 : 1);'
then
    echo "ERRO: loader ionCube para PHP 7.4 não pôde ser carregado"
    exit 1
fi

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

echo "ionCube PHP 7.4 instalado e ativado"

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/mailparse.sh

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

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/mcrypt.sh

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

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/memcache.sh

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

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/memcached.sh

#!/bin/sh
SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd)
exec sh "$SCRIPT_DIR/build_pecl_module.sh" \
    memcached 3.4.0 memcached extension enabled \
    --enable-memcached \
    --with-libmemcached-dir=/usr \
    --enable-memcached-session \
    --enable-memcached-sasl \
    --enable-memcached-json \
    --disable-memcached-igbinary \
    --disable-memcached-msgpack

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/mongodb.sh

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

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/opcache.sh

#!/bin/sh
set -eu

PHP_PREFIX=/opt/alt/php-fpm74/usr
PHP="$PHP_PREFIX/bin/php"
PHP_CONFIG="$PHP_PREFIX/bin/php-config"
INI_DIR="$PHP_PREFIX/php/php.d"

if [ ! -x "$PHP" ] || [ ! -x "$PHP_CONFIG" ]; then
    echo "ERRO: PHP/php-config do PHP 7.4 não encontrado"
    exit 1
fi

EXT_DIR=$("$PHP_CONFIG" --extension-dir)
OPCACHE_SO="$EXT_DIR/opcache.so"

if [ ! -f "$OPCACHE_SO" ]; then
    echo "ERRO: $OPCACHE_SO não encontrado"
    exit 1
fi

if ! "$PHP" -n -d "zend_extension=$OPCACHE_SO" \
    -r 'exit(extension_loaded("Zend OPcache") ? 0 : 1);'
then
    echo "ERRO: OPcache do PHP 7.4 não pôde ser carregado"
    exit 1
fi

for MODULE in mbstring pcntl posix shmop sockets; do
    if [ ! -f "$EXT_DIR/$MODULE.so" ]; then
        echo "ERRO: $EXT_DIR/$MODULE.so não encontrado"
        exit 1
    fi

    if ! "$PHP" -n -d "extension=$EXT_DIR/$MODULE.so" \
        -r "exit(extension_loaded('$MODULE') ? 0 : 1);"
    then
        echo "ERRO: $MODULE do PHP 7.4 não pôde ser carregado"
        exit 1
    fi
done

install -d -m 0755 "$INI_DIR"

printf '%s\n' '; Sodium compilado no core do PHP 7.4' \
    > "$INI_DIR/sodium.ini"

printf '%s\n' 'extension=mbstring.so' \
    > "$INI_DIR/00-mbstring.ini"

{
    printf 'zend_extension=%s\n' "$OPCACHE_SO"
    printf '%s\n' 'opcache.enable=1'
    printf '%s\n' 'opcache.memory_consumption=128'
    printf '%s\n' 'opcache.interned_strings_buffer=8'
    printf '%s\n' 'opcache.max_accelerated_files=5000'
    printf '%s\n' 'opcache.revalidate_freq=60'
    printf '%s\n' 'opcache.enable_cli=1'
} > "$INI_DIR/opcache.ini"

for MODULE in pcntl posix shmop sockets; do
    printf ';extension=%s.so\n' "$MODULE" \
        > "$INI_DIR/$MODULE.ini"
done

echo "OPcache e mbstring ativados; pcntl, posix, shmop e sockets desativados"

@DerexScript

Copy link
Copy Markdown
Author

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

Copy link
Copy Markdown
Author

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

#!/bin/sh
set -eu

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

cd "$BUILD_ROOT"
WORK_DIR=$(mktemp -d "$BUILD_ROOT/php74-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 7.4 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 7.4 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 7.4 instalado e ativado"

@DerexScript

Copy link
Copy Markdown
Author

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

#!/bin/sh
set -eu

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

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

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

@DerexScript

Copy link
Copy Markdown
Author

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

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

@DerexScript

Copy link
Copy Markdown
Author

/usr/local/cwpsrv/htdocs/resources/conf/el8/php-fpm_selector/external_modules/7.4/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/7.4/xdebug.sh

#!/bin/sh
SCRIPT_DIR=$(CDPATH= cd "$(dirname "$0")" && pwd)
exec sh "$SCRIPT_DIR/build_pecl_module.sh" xdebug 3.1.6 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