# Extensões e Definições do PHP

Source: https://support.kapsulehost.com/pt-pt/php-extensions-and-ini

Quais as versões e extensões PHP que a KapsuleHost disponibiliza para sites WordPress, WooCommerce e PHP, quais as definições que pode alterar você mesmo, e porque é que uma alteração pode demorar até cinco minutos a surtir efeito.

Sites estáticos, Node.js e Python não executam PHP. Tudo o que diz respeito ao PHP de um site está centralizado num só local: **Websites**, clique no site, **Definições**, depois **PHP**. Essa página contém o seletor de versão, as definições que pode alterar, um executor de Composer, e o registo de erros do PHP.

![A página de PHP de um site no KPanel, com o seletor de versão e as definições que pode alterar](https://support.kapsulehost.com/help/screenshots/php-extensions-and-ini.2214ab47.webp)

## Escolher uma Versão de PHP

Estão disponíveis quatro versões para seleção: **8.4, 8.3, 8.2 e 8.1**. Os sites novos usam por defeito a versão 8.3.

Escolha a versão mais recente que o seu software realmente suporta. O PHP mais recente é significativamente mais rápido e beneficia de correções de segurança durante mais tempo. A razão para não avançar logo para a versão mais recente é a compatibilidade: um plugin antigo ou um trecho de código personalizado escrito há anos pode falhar completamente numa versão com a qual nunca foi testado.

Para a alterar, selecione a versão e clique em **Aplicar versão**. A alteração tem efeito imediato, sem necessidade de reiniciar nada da sua parte e sem tempo de inatividade.

> **Tip:** Altere primeiro a versão de PHP no ambiente de staging, navegue pelo site e só depois altere a versão em produção. Se tiver mesmo de o fazer em produção, faça-o quando puder estar a acompanhar, sabendo que reverter é apenas um clique. Consulte [Ambientes de Staging](https://support.kapsulehost.com/pt-pt/staging-environments).

Se uma alteração de versão quebrar o site, volte à versão anterior e leia o registo. O erro indicará o ficheiro que não conseguiu ser executado. Consulte [Alterar a Versão de PHP](https://support.kapsulehost.com/pt-pt/changing-php-version) e [Registos de Erros](https://support.kapsulehost.com/pt-pt/error-logs).

## Definições que Pode Alterar

A página de PHP disponibiliza cinco definições sob a forma de menus suspensos. São estas que, na prática, causam realmente problemas, razão pela qual são as que são apresentadas.

| Definição | Predefinição | Valores disponíveis | O que controla |
|---|---|---|---|
| `memory_limit` | 256M | 128M, 256M, 512M, 1024M, 2048M | Quanta memória um pedido pode usar |
| `max_execution_time` | 30 | 30, 60, 120, 300, 600 | Quantos segundos um pedido pode demorar a executar |
| `upload_max_filesize` | 64M | 16M, 32M, 64M, 128M, 256M | O maior ficheiro único que pode ser carregado |
| `post_max_size` | 65M | 17M, 33M, 65M, 129M, 257M | O maior envio total de formulário |
| `max_input_vars` | 3000 | 1000, 3000, 5000, 10000 | Quantos campos um envio pode conter |

Qual escolher:

- **Carregamentos a falhar acima de um determinado tamanho**: aumente `upload_max_filesize`, e também `post_max_size` em conjunto.
- **Um formulário grande ou um construtor de páginas a perder campos ao guardar**: aumente `max_input_vars`. Este problema é invisível e frustrante, porque não surge nenhum erro. Os campos extra são simplesmente descartados silenciosamente.
- **Uma página a falhar a meio sem qualquer erro**: aumente `memory_limit`. Consulte [Limite de Memória do WordPress](https://support.kapsulehost.com/pt-pt/wordpress-memory-limit).
- **Uma importação ou exportação longa a exceder o tempo limite**: aumente `max_execution_time`, e considere executar a tarefa a partir da linha de comandos. Consulte [WP-CLI](https://support.kapsulehost.com/pt-pt/wordpress-wp-cli).

> **Note:** `post_max_size` tem de ser maior do que `upload_max_filesize`, porque o carregamento viaja dentro do post. Se escolher uma combinação em que isso não se verifique, a plataforma corrige `post_max_size` automaticamente para si. É por isso que poderá ver um valor que não escolheu.

## Porque é que uma Alteração Demora Até Cinco Minutos

Esta é, de longe, a confusão mais comum sobre esta página, por isso vale a pena ser preciso.

As suas definições são escritas num ficheiro `.user.ini` na raiz de documentos do seu site. O PHP lê esse ficheiro e depois **guarda-o em cache durante 300 segundos**, ou seja, cinco minutos. Até essa cache expirar, o PHP continua a usar os valores anteriores.

Assim, após guardar uma alteração:

- A página continuará a reportar o limite antigo durante até cinco minutos.
- `phpinfo()` continuará a reportar o limite antigo durante até cinco minutos.
- Uma atualização forçada não ajuda. Limpar a cache do navegador também não.
- Não precisa de reiniciar nada, nem o pode fazer. Basta esperar.

Se já tiverem passado mais de cinco minutos e o valor não tiver mudado, então há realmente algo errado e vale a pena abrir um pedido de suporte.

## Editar `.user.ini` Você Mesmo

Pode editar `.user.ini` diretamente via SFTP ou SSH, se preferir, ou se precisar de uma diretiva que o painel não disponibiliza. O ficheiro encontra-se na raiz de documentos do seu site. Consulte [Acesso SFTP](https://support.kapsulehost.com/pt-pt/sftp-access).

O formato é uma diretiva por linha:

```ini
memory_limit = 512M
max_execution_time = 120
```

Dois limites importantes relativamente ao que `.user.ini` pode fazer:

**Só funciona para diretivas que o PHP permite definir por diretório ou por utilizador.** As cinco acima qualificam-se todas. Diretivas que só podem ser definidas ao nível do sistema, como `disable_functions` ou carregar uma extensão com `extension=`, são ignoradas num ficheiro `.user.ini`. Não geram erro, simplesmente não fazem nada, razão pela qual as pessoas acabam a perder uma tarde inteira com elas.

**O painel só consegue ler chaves simples.** Diretivas que contenham um ponto, como `opcache.enable` ou `date.timezone`, são respeitadas pelo PHP mas não aparecem no formulário do painel. Se definir uma manualmente e mais tarde alterar algo através do painel, verifique o ficheiro posteriormente.

> **Warning:** A KapsuleHost web hosting utiliza nginx, não Apache. Os ficheiros `.htaccess` não são lidos por ninguém. Diretivas de PHP colocadas num ficheiro `.htaccess`, como `php_value memory_limit`, não têm absolutamente qualquer efeito aqui. Use `.user.ini` ou o painel em vez disso. Consulte [WordPress e .htaccess](https://support.kapsulehost.com/pt-pt/wordpress-htaccess).

## Quais as Extensões Disponíveis

A compilação padrão é abrangente e inclui tudo o que o WordPress, o WooCommerce e a maioria das aplicações PHP exigem.

**Bases de dados**: `mysqli`, `pdo_mysql`, `sqlite3`, `pdo_sqlite`
**Imagens**: `gd`, `imagick`, `exif`
**Cache**: `Zend OPcache`, `redis`, `memcached`
**Texto e regionalização**: `mbstring`, `iconv`, `intl`, `gettext`, `ctype`
**XML e dados**: `dom`, `simplexml`, `xml`, `xmlreader`, `xmlwriter`, `xsl`, `json`
**Rede**: `curl`, `soap`, `sockets`, `ftp`, `openssl`
**Matemática e criptografia**: `bcmath`, `sodium`, `hash`, `random`
**Ficheiros e sistema**: `fileinfo`, `zip`, `zlib`, `phar`, `posix`, `pcntl`, `shmop`, `calendar`, `tokenizer`

Uma diferença entre versões que vale a pena conhecer: a extensão `imap` está presente na 8.3 e versões anteriores, mas não na 8.4, porque foi removida do próprio PHP nesse lançamento. Se tiver uma aplicação que ainda precise dela, mantenha-se na 8.3 ou mude essa aplicação para uma biblioteca de correio moderna.

**Não instaladas**: controladores PostgreSQL, MongoDB, Xdebug, `mcrypt`, e carregadores de código comerciais como ionCube e SourceGuardian.

Não pode ativar ou desativar extensões você mesmo a partir do painel. Se a sua aplicação precisar de algo que não consta da lista, abra um pedido de suporte e descreva o que está a executar. A possibilidade de adicionar depende da extensão em causa. Consulte [Abrir um Pedido de Suporte](https://support.kapsulehost.com/pt-pt/opening-a-support-ticket).

## Verificar o Que Está Realmente Carregado

Em vez de adivinhar:

- **No WordPress**: Ferramentas, depois Estado do Site, depois Informação, depois Servidor. Esta secção indica a versão do PHP e os limites relevantes.
- **Via SSH**: `php -v` para a versão e `php -m` para as extensões carregadas. Consulte [Adicionar Chaves SSH](https://support.kapsulehost.com/pt-pt/adding-ssh-keys).

> **Warning:** Não deixe um ficheiro `phpinfo()` na raiz do seu site. Este publica os seus caminhos, as suas extensões e a sua configuração para quem o encontrar, e os scanners automatizados procuram exatamente esse nome de ficheiro. Se criar um para verificar alguma coisa, elimine-o imediatamente a seguir.

## Guias Relacionados

- [Alterar a Versão de PHP](https://support.kapsulehost.com/pt-pt/changing-php-version)
- [Limite de Memória do WordPress](https://support.kapsulehost.com/pt-pt/wordpress-memory-limit)
- [Registos de Erros](https://support.kapsulehost.com/pt-pt/error-logs)
- [Códigos de Erro HTTP](https://support.kapsulehost.com/pt-pt/http-error-codes)
- [Lentidão do Site e Limites de Recursos](https://support.kapsulehost.com/pt-pt/site-slow-resource-limits)
- [WordPress e .htaccess](https://support.kapsulehost.com/pt-pt/wordpress-htaccess)
- [Glossário de Alojamento](https://support.kapsulehost.com/pt-pt/glossary)
