# WHM / CloudLinux — Ativação global de extensões PHP (OPcache, etc.)

Como ativar extensões PHP (OPcache, APCu, …) em **todas** as contas/estruturas do servidor
via WHM + CloudLinux PHP Selector, garantindo que contas novas e já existentes fiquem cobertas.

> Contexto: as contas deste servidor rodam sob **alt-php** (CloudLinux PHP Selector), não sob o
> ea-php de sistema. A tunagem feita no WHM *MultiPHP INI Editor* (ea-php72 de sistema) **não se
> aplica** a contas alt-php. Ver também `correcao-cache-control-borda-l1.md` (seção 7) e
> `correcao-htaccess-whm-performance-l0.md`.

## 1. Conceito (evita o erro comum)

- Os **"módulos padrão"** definidos no Selector valem **só para contas NOVAS**.
- Contas já criadas mantêm a escolha que tinham → definir o default **não** reaplica nelas.
- Para cobrir **todas** as estruturas é preciso: (1) default no WHM + (2) propagar para contas
  existentes com `selectorctl` + (3) reconstruir CageFS.
- **Habilitar a extensão ≠ tunar o cache.** As diretivas (`opcache.*`) ficam em
  `/opt/alt/php72/etc/php.ini` (alt-php) e no php.ini do ea-php (sistema), separados.

## 2. Definir o default (novas contas) — WHM UI

1. WHM → **Server Configuration → CloudLinux Manager → aba Selector**.
2. Em **"Choose default modules for"**, selecione **alt-php72** (e cada versão em uso no server).
3. Marque **opcache** (e **apcu**, opcional — ativa o `apcu-autoloader` do `composer.json`) e
   **Save**.
4. (Opcional) *Hide PHP extensions for end-user* para impedir que usuários desliguem o que foi
   definido.

## 3. Forçar em TODAS as contas existentes — `selectorctl`

`selectorctl` substitui o antigo `cl-selector`. `--for-all-users` exige `--version`:

```bash
# opcache + apcu em alt-php72 para TODOS os usuarios
selectorctl --enable-user-extensions=opcache,apcu --version=7.2 --for-all-users

# idem para TODAS as versoes alt-php em uso (loop oficial CloudLinux):
for i in $(selectorctl -S | grep 'e' | awk '{print $1}' | grep -v native); do
  selectorctl --enable-user-extensions=opcache,apcu --version=$i --for-all-users
done
```

> Para **resetar** as escolhas de todos aos defaults (em vez de só adicionar):
> `selectorctl --cl-selector-reset-modules` — cuidado, sobrepõe a escolha manual do usuário.

Outros comandos úteis:

```bash
selectorctl -S                                            # lista versoes alt-php
selectorctl --list-extensions --version=7.2              # + habilitado / - desabilitado / ~ compilado
selectorctl --set-current=7.2                            # versao padrao global (novas contas)
selectorctl --enable-extensions=opcache,apcu --version=7.2   # default (defaults.cfg), nao por conta
selectorctl --user-summary --user=USUARIO --show-native-version
```

## 4. Propagar no CageFS

As extensões ficam no `alt_php.ini` de cada usuário; reconstrua o CageFS para refletir:

```bash
/usr/sbin/cagefsctl --force-update-all
```

## 5. Tunar as DIRETIVAS do OPcache (separado da extensão)

Habilitar a extensão não tuna o cache. Editar `/opt/alt/php72/etc/php.ini` (alt-php):

```ini
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.revalidate_freq=0

; (opcional) APCu — so melhora o autoload via apcu-autoloader do composer (fallback gracioso)
apcu.enabled=1
apcu.enable_cli=1
apcu.shm_size=32M
```

- Domínios em PHP "native"/ea-php72 (sistema): tunar no **WHM → MultiPHP INI Editor**
  (system / ea-php72) — confirmar `opcache.enable=1` lá também.
- ⚠️ Com `validate_timestamps=0`, **todo deploy exige reset do OPcache**. O `deploy.sh` já roda
  `php artisan opcache:clear` (chama `opcache_reset()` no FPM). Sem isso, código novo não carrega.

## 6. Validar

> **CLI desliga opcache/apcu por padrão** (`opcache.enable_cli=Off`, `apcu.enable_cli=Off`).
> `opcache_get_status()` / `apcu_cache_info()` no CLI dão falso-negativo. A verificação
> definitiva é em contexto **web** (HTTP/phpinfo) ou forçando as flags de CLI só no teste.

```bash
# global (versao)
selectorctl --list-extensions --version=7.2 | grep -i opcache   # esperado: + opcache
# por conta especifica (contexto da conta, dentro do CageFS)
su - USUARIO -s /bin/bash -c 'php -m | grep -iE "opcache|apcu"'
# diretivas efetivas (web). Confira apcu.enabled (nome correto da diretiva):
su - USUARIO -s /bin/bash -c 'php -i | grep -iE "opcache.enable|apcu.enabled"'
#   esperado: opcache.enable => On ; apcu.enabled => On (se habilitado)
# forcar contexto web no teste CLI:
php -d opcache.enable_cli=1 -r 'var_dump(opcache_get_status()["opcache_enabled"]);'  # bool(true)
php -d apcu.enable_cli=1 -r 'var_dump(apcu_cache_info());'                            # array(...)
# via HTTP (se houver header de cache) / phpinfo() no canario
curl -sI https://infra-update.devs.maxima.inf.br/ | grep -iE 'x-cache|set-cookie'
```

> Nota: `apcu_cache_info()` falha mesmo com `-d apcu.enable_cli=1` se `apcu.enabled=Off`
> (a chave mestra). Para ativar apcu de fato, ajuste `apcu.enabled=1` no ini (ver seção 5).

## 7. Redis — IGNORADO neste ambiente

`redis` aparece marcado no Selector, mas **não funciona no PHP 7.2.34** deste servidor. Logo
L2.2/L2.3 (`CACHE_DRIVER=redis` / `SESSION_DRIVER=redis`) ficam **deferidos/ignorados** até
reavalição. Não habilitar redis para fins de cache de aplicação aqui.

## 8. Checklist de cobertura total

- [ ] Default de módulos definido no CloudLinux Manager → Selector (alt-php72 + demais versões).
- [ ] `selectorctl --enable-user-extensions=opcache,apcu --version=7.2 --for-all-users`.
- [ ] `cagefsctl --force-update-all`.
- [ ] Diretivas OPcache em `/opt/alt/php72/etc/php.ini` + ea-php (MultiPHP INI Editor).
- [ ] Validação por conta (`php -m | grep opcache`) e no canário.
- [ ] `deploy.sh` com `opcache:clear` mantido (reset pós-deploy com `validate_timestamps=0`).

## Referências

- CloudLinux KB — PHP Selector useful commands (change extensions for all users).
- cPanel — How to set the default PHP extensions for CloudLinux Alt-PHP from WHM.
- `wiki/infra-update/correcao-cache-control-borda-l1.md` (seção 7 — nota PHP Selector/OPcache).
- `wiki/infra-update/correcao-htaccess-whm-performance-l0.md` (OPcache no sistema ea-php).
