# Como corrigir Failed opening required no WordPress

O Failed opening required é um erro fatal de PHP que aparece quando o código manda incluir um arquivo (com require) que não existe no caminho informado, está com permissão negada ou foi apagado. O WordPress para na hora e a página não abre, geralmente após uma migração, uma atualização interrompida ou um plugin removido pela metade.

## O que é o erro Failed opening required?

O Failed opening required no WordPress é o erro fatal que o PHP emite quando uma instrução require ou require_once aponta para um arquivo que ele não consegue abrir: o caminho está errado, o arquivo foi apagado, a permissão impede a leitura ou um caminho absoluto de outro servidor sobrou após uma migração. Como o require é obrigatório (diferente do include), o PHP encerra o script imediatamente quando o arquivo falta, derrubando a página ou o site inteiro.

## Como identificar

- Mensagem "Warning: require(/caminho/arquivo.php): Failed to open stream: No such file or directory" seguida de "Fatal error: Failed opening required '/caminho/arquivo.php'".
- O caminho citado no erro aponta para um diretório de outro servidor (ex.: /home/usuário_antigo/...), sinal de migração mal resolvida.
- O erro surge após mover o site de hospedagem, atualizar um plugin que foi interrompida, ou excluir uma pasta de plugin/tema pela metade.
- A variação "Failed to open stream: Permission denied" aparece quando o arquivo existe, mas a permissão impede a leitura pelo PHP.

**Antes de começar:** Faça backup antes de editar ou reinstalar qualquer coisa. Nunca use 777 para tentar resolver o Permission denied: isso abre o arquivo para gravação por qualquer um e é um risco de segurança. As permissões corretas são 644 para arquivos e 755 para pastas.

## Como prevenir

- Use sempre ABSPATH, plugin_dir_path() e get_template_directory() em vez de caminhos absolutos fixos
- Após migrar de host, navegue pelo wp-admin e pelas páginas principais conferindo se nada quebrou
- Não interrompa atualizações de plugin pela metade e mantenha as permissões padrão (644/755)

Erros relacionados

- [Como corrigir Parse error / syntax error no PHP](https://full.services/wp-fixer/corrigir-parse-error-syntax-php-wordpress/)
- [Como corrigir Call to undefined function](https://full.services/wp-fixer/corrigir-call-to-undefined-function-wordpress/)
- [Como corrigir Uncaught Error: Class not found](https://full.services/wp-fixer/corrigir-class-not-found-wordpress/)

## Causa

- Arquivo incluído por require foi apagado, renomeado ou não foi copiado na migração para o novo servidor.
- Caminho absoluto fixo no código apontando para a estrutura de pastas do servidor antigo (ex.: /home/usuário/public_html), inválido no novo host.
- Atualização ou exclusão de plugin interrompida que deixou referências a arquivos que já não existem.
- Permissões erradas no arquivo ou na pasta, impedindo o PHP de ler o arquivo (Permission denied).
- ABSPATH ou o caminho do tema/plugin mal definido após mudar o domínio ou o diretório de instalação.

## Como resolver

1. Leia o caminho do arquivo no erro: a mensagem cita o caminho exato que o PHP tentou abrir. Veja se esse arquivo existe via FTP e se o caminho corresponde ao servidor atual, não ao antigo.
2. Identifique o plugin ou tema dono do arquivo: o caminho normalmente fica dentro de wp-content/plugins ou wp-content/themes. Isso diz qual extensão está chamando o arquivo que falta.
3. Reinstale o plugin ou tema afetado: se o arquivo faltante é de um plugin, desative-o via FTP renomeando a pasta, apague e reinstale a versão limpa. A reinstalação repõe os arquivos ausentes.
4. Corrija caminhos absolutos da migração: se o caminho aponta para o servidor antigo, troque caminhos fixos por constantes do WordPress como ABSPATH, plugin_dir_path() ou get_template_directory().
5. Ajuste as permissões do arquivo: se o erro for Permission denied, aplique as permissões padrão para o PHP conseguir ler:

```
chmod 644 para arquivos
chmod 755 para pastas
```


## Código

```php
// ERRADO: caminho absoluto fixo que quebra apos migrar de servidor
require_once '/home/usuario_antigo/public_html/wp-content/plugins/meu-plugin/lib.php';

// CERTO: caminho relativo a propria pasta do plugin, valido em qualquer host
require_once plugin_dir_path( __FILE__ ) . 'lib.php';

// Para arquivos do tema, use a funcao equivalente:
require_once get_template_directory() . '/inc/funcoes.php';
```

## Perguntas frequentes

### O que significa No such file or directory no erro?

Significa que o arquivo apontado pelo require não está no caminho informado: foi apagado, renomeado ou não copiado na migração. Confira via FTP se o arquivo existe e se o caminho citado corresponde ao servidor atual.

### O erro cita o caminho do servidor antigo. Como resolvo?

É um caminho absoluto que sobrou da migração. Substitua-o no código por uma função do WordPress como plugin_dir_path(__FILE__) ou get_template_directory(), que devolvem o caminho real do servidor atual em vez de um caminho fixo.

### Qual a diferença de Failed opening required para include?

O require é obrigatório: se o arquivo falta, o PHP gera erro fatal e para o script. O include só emite um aviso e continua. Por isso o Failed opening required derruba a página, enquanto um include ausente costuma só registrar um warning.

### Apareceu Permission denied em vez de No such file. O que muda?

O arquivo existe, mas a permissão impede o PHP de lê-lo. Aplique 644 ao arquivo e 755 à pasta via FTP. Nunca use 777: isso expõe o arquivo a gravação por qualquer processo e é uma falha de segurança.

### Reinstalar o plugin apaga minhas configurações?

Reinstalar apenas os arquivos do plugin não apaga as configurações, que ficam no banco de dados. Mesmo assim, faça backup antes. Desative o plugin via FTP, reinstale a versão limpa e reative para repor os arquivos que faltavam.

### Posso corrigir sem mexer em FTP?

Raramente, porque o erro fatal costuma travar o wp-admin. Quando o site cai, o caminho é acessar via FTP ou pelo gerenciador de arquivos da hospedagem para reinstalar o plugin, repor o arquivo ou ajustar o caminho no código.

**Fonte:** [PHP Manual — require](https://www.php.net/manual/en/function.require.php)
