Estou aprendendo algumas coisas básicas e descobri que, às vezes, os URLs que eu alimento no meu código retornam 404, o que agrega todo o resto do meu código.
Então, eu preciso de um teste na parte superior do código para verificar se o URL retorna 404 ou não.
Isso parece uma tarefa bastante direta, mas o Google não está me dando respostas. Preocupo-me por procurar as coisas erradas.
Um blog recomendado eu uso isso:
$valid = @fsockopen($url, 80, $errno, $errstr, 30);
e então teste para ver se $ válido se vazio ou não.
Mas acho que o URL que está me causando problemas tem um redirecionamento, portanto $ valid está vazio para todos os valores. Ou talvez eu esteja fazendo outra coisa errada.
Também examinei uma "solicitação de cabeçalho", mas ainda não encontrei exemplos de código reais com os quais possa brincar ou experimentar.
Sugestões? E o que é isso sobre curl?
fonte
curl_setopt($handle, CURLOPT_NOBODY, true);
antes de executarcurl_exec
Se você estiver executando o php5, poderá usar:
Como alternativa ao php4, um usuário contribuiu com o seguinte:
Ambos teriam um resultado semelhante a:
Portanto, você pode verificar se a resposta do cabeçalho está correta, por exemplo:
Códigos e Definições W3C
fonte
get_headers($https_url,1,443);
tenho certeza que funcionará, embora não esteja naget_headers()
função padrão . Fique à vontade para testá-lo e responder com um status.Com o código do strager, você também pode verificar o CURLINFO_HTTP_CODE para outros códigos. Alguns sites não relatam um 404, eles simplesmente redirecionam para uma página 404 personalizada e retornam 302 (redirecionamento) ou algo semelhante. Eu usei isso para verificar se um arquivo real (por exemplo, robots.txt) existia no servidor ou não. Claramente, esse tipo de arquivo não causaria um redirecionamento se existisse, mas, se não existisse, seria redirecionado para uma página 404, que, como eu disse antes, pode não ter um código 404.
fonte
408 Request Timeout
, não um404
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, FALSE);
Como o strager sugere, veja como usar cURL. Você também pode estar interessado em definir CURLOPT_NOBODY com curl_setopt para pular o download da página inteira (você só quer os cabeçalhos).
fonte
Se você está procurando uma solução mais fácil e a que você pode tentar de uma só vez no php5 do
fonte
Encontrei esta resposta aqui :
Essencialmente, você usa o método "file get contents" para recuperar a URL, que preenche automaticamente a variável de cabeçalho de resposta http com o código de status.
fonte
Isso será verdadeiro se o URL não retornar 200 OK
fonte
adendo; testou esses três métodos considerando o desempenho.
O resultado, pelo menos no meu ambiente de teste:
Ganhos de cachos
Este teste é realizado sob a consideração de que apenas os cabeçalhos (noBody) são necessários. Teste-se:
fonte
Como uma dica adicional para a ótima resposta aceita:
Ao usar uma variação da solução proposta, obtive erros devido à configuração do php 'max_execution_time'. Então, o que eu fiz foi o seguinte:
Primeiro, defino o limite de tempo para um número maior de segundos, no final, defino-o novamente para o valor definido nas configurações de php.
fonte
fonte
Aqui está uma solução curta.
No seu caso, você pode mudar
application/rdf+xml
para o que usar.fonte
Esta função retorna o código de status de uma URL no PHP 7:
Exemplo:
fonte
Você também pode usar esse código para ver o status de qualquer link:
fonte
isso é justo e parte do código, a esperança funciona para você
fonte
Aqui está uma maneira!
Esse script simples simplesmente faz uma solicitação ao URL para seu código-fonte. Se a solicitação for concluída com êxito, ela exibirá "URL Exists!". Caso contrário, ele exibirá "URL Não Existe!".
fonte