O allow_url_fopen do PHP não muda pelo arquivo htaccess. Veja como habilitar no cPanel pelo Select PHP Version e como conferir se deu certo.
O allow_url_fopen é a diretiva que deixa funções como file_get_contents(), fopen() e getimagesize() abrirem um endereço da internet (https://…) como se fosse um arquivo local. Muitos scripts usam isso para ler uma API, baixar um feed RSS ou checar uma imagem remota. Quando ela está desligada, o PHP mostra um aviso e a função devolve false.
Por que a linha no arquivo htaccess não funciona
Muitos tutoriais antigos mandam colocar php_value allow_url_fopen on ou php_flag allow_url_fopen on no .htaccess. Isso nunca funcionou de verdade: pela documentação do PHP, o allow_url_fopen é uma diretiva do tipo INI_SYSTEM, que só pode ser definida no php.ini do servidor. O php_flag e o php_value do .htaccess só alteram diretivas dos tipos INI_PERDIR e INI_ALL.
Na prática, o resultado depende do servidor:
- LiteSpeed (o servidor web da nossa hospedagem): a linha é aceita, mas ignorada em silêncio. O site não quebra e a diretiva continua como estava.
- Apache com PHP-FPM ou CGI: o
php_flagnem é reconhecido e o site passa a dar Erro 500.
Ou seja: se você colocou essa linha e "não aconteceu nada", é por isso. Pode apagá-la.
Antes de começar: confira se já está ligado
O valor padrão do PHP é ligado, então muitas vezes o problema é outro. Crie um arquivo teste-fopen.php na pasta do site com o conteúdo abaixo, abra no navegador e apague o arquivo depois:
<?php
var_dump(ini_get('allow_url_fopen'));
Se aparecer string(1) "1", a diretiva já está ativa e o erro do seu script tem outra causa (veja Problemas comuns). Se aparecer string(0) "" ou "0", siga o passo a passo.
Como habilitar o allow_url_fopen no cPanel (Select PHP Version)
- Entre no cPanel. O jeito mais rápido é pela Área do Cliente, no botão de acesso ao cPanel do serviço.
- Abra o Select PHP Version. Fica na seção Software. Se não achar, digite "PHP" na busca do topo do cPanel.
- Confira a versão em uso. No topo da página aparece a versão atual do PHP. Se estiver como native, escolha uma versão numerada (por exemplo, 8.3) para liberar as opções.
- Vá para as opções do PHP. Clique na aba Options (em telas antigas, no link Switch to PHP Options).
- Marque o allow_url_fopen. Localize
allow_url_fopenna lista e marque a caixa. Dependendo da versão da tela, a alteração é salva na hora ou é preciso clicar em Save/Apply. - Teste de novo. Abra o
teste-fopen.phpe confira se mudou para"1". Depois apague o arquivo de teste.
allow_url_fopen), confira com o arquivo de teste e, se o valor não mudar, abra um chamado.Alternativa mais robusta: usar cURL no lugar do file_get_contents
Se o script é seu, prefira a extensão cURL para buscar URLs. Ela não depende do allow_url_fopen, aceita tempo limite e mostra o erro exato quando algo falha:
<?php
$ch = curl_init('https://api.exemplo.com.br/dados.json');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_TIMEOUT => 15,
]);
$resposta = curl_exec($ch);
if ($resposta === false) {
error_log('Falha no cURL: ' . curl_error($ch));
}
curl_close($ch);
allow_url_include, que permite fazer include de um arquivo remoto. Esse deve ficar sempre desligado: é uma porta clássica de invasão e está obsoleto desde o PHP 7.4.Problemas comuns
file_get_contents(): https:// wrapper is disabled in the server configuration by allow_url_fopen=0
É a mensagem do PHP 8 para diretiva desligada (em versões antigas: URL file-access is disabled in the server configuration). Habilite pelo passo a passo acima.
Liguei a opção, mas o teste continua mostrando 0
O site provavelmente está rodando outra versão do PHP, diferente da que você editou. Confira se o domínio está como inherit no MultiPHP Manager e se a versão escolhida no Select PHP Version é a mesma em que você marcou a opção.
failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
O allow_url_fopen está funcionando: quem recusou foi o site remoto. Muitos servidores bloqueiam pedidos sem User-Agent. Use cURL e defina um CURLOPT_USERAGENT.
SSL operation failed / certificate verify failed
O certificado do endereço remoto está vencido ou incompleto. Não desligue a verificação de SSL; confirme a URL e, se for de um parceiro seu, peça a correção do certificado.