Eu escrevi um código PHP como este
$site="http://www.google.com";
$content = file_get_content($site);
echo $content;
Mas quando removo "http: //" $site
, recebo o seguinte aviso:
Aviso: file_get_contents (www.google.com) [function.file-get-contents]: falha ao abrir o fluxo:
Eu tentei try
e catch
mas não funcionou.
php
function
exception-handling
warnings
Waseem
fonte
fonte
Respostas:
Etapa 1: verifique o código de retorno:
if($content === FALSE) { // handle error here... }
Etapa 2: suprima o aviso colocando um operador de controle de erro (ou seja
@
) na frente da chamada para file_get_contents () :$content = @file_get_contents($site);
fonte
@
pode afetar negativamente o desempenho. Veja esta resposta em uma postagem relacionada que explica bastante bem.Você também pode definir seu manipulador de erros como uma função anônima que chama uma exceção e usar uma tentativa / captura nessa exceção.
Parece um monte de código para capturar um pequeno erro, mas se você estiver usando exceções em todo o aplicativo, será necessário fazer isso apenas uma vez, na parte superior (em um arquivo de configuração incluído, por exemplo), e será converta todos os seus erros em exceções por toda parte.
fonte
Minha maneira favorita de fazer isso é bastante simples:
Descobri isso depois de experimentar o
try/catch
código do @enobrev acima, mas isso permite um código menos demorado (e IMO, mais legível). Simplesmente usamoserror_get_last
para obter o texto do último erro efile_get_contents
retornamos falso em caso de falha, portanto, um simples "se" pode capturar isso.fonte
@file_get_contents
para suprimir o relatório de erros para o navegador.@file_get_contents
para suprimir o aviso e testar o valor do resultado=== FALSE
.if (false !== ($data = file_get_contents ()))
error_get_last
para retornar nada na minha experiênciaVocê pode adicionar um @:
$content = @file_get_contents($site);
Isso suprimirá qualquer aviso - use com moderação! . Consulte Operadores de controle de erros
Editar: quando você remove o 'http: //', não está mais procurando uma página da web, mas um arquivo no seu disco chamado "www.google ....."
fonte
Uma alternativa é suprimir o erro e também lançar uma exceção que você poderá capturar mais tarde. Isso é especialmente útil se houver várias chamadas para file_get_contents () no seu código, pois você não precisa suprimir e manipular todas elas manualmente. Em vez disso, várias chamadas podem ser feitas para essa função em um único bloco try / catch.
fonte
Aqui está como eu fiz isso ... Não há necessidade de bloco try-catch ... A melhor solução é sempre a mais simples ... Aproveite!
fonte
$http_response_header
não é atualizado nesse caso, uma vez que nenhuma resposta HTTP é recebida.fonte
$url
404 não for encontrado, o aviso ainda aparecerá.ignore_errors
instrui apenas o contexto HTTP a não interpretar os códigos de status de resposta HTTP > = 400 como erros. Embora marginalmente relacionado, isso não responde à questão do tratamento de erros do PHP.ignore_errors
opção! Era disso que eu precisava!Aqui está como eu lido com isso:
fonte
A melhor coisa seria definir seus próprios manipuladores de erro e exceção, o que fará algo útil como registrá-lo em um arquivo ou enviar um e-mail para críticos. http://www.php.net/set_error_handler
fonte
Você poderia usar este script
fonte
if ($url === true)...
porque se você receber uma resposta0
ou vazio, isso gera um erro de conexão.Desde o PHP 4 use error_reporting () :
fonte
A maneira mais simples de fazer isso é preceder um @ antes de file_get_contents, i. e .:
fonte
algo assim:
fonte
fonte
Você deve usar a função file_exists () antes para usar file_get_contents (). Dessa forma, você evitará o aviso php.
fonte
Alterar o arquivo php.ini
fonte
Isso tentará obter os dados; se não funcionar, detectará o erro e permitirá que você faça o que for necessário dentro do problema.
fonte
fonte
Você também deve definir o
em sua
php.ini
parar de receber avisos.fonte