Je m'enseigne moi-même sur le grattage de base et j'ai constaté que parfois les URL que j'insère dans mon code renvoient 404, ce qui gomme tout le reste de mon code.
J'ai donc besoin d'un test en haut du code pour vérifier si l'URL renvoie 404 ou non.
Cela semblerait être une tâche assez simple, mais Google ne me donne aucune réponse. Je crains que je ne recherche le mauvais truc.
Un blog m'a recommandé d'utiliser ceci:
$valid = @fsockopen($url, 80, $errno, $errstr, 30);
puis testez pour voir si $ valide s'il est vide ou non.
Mais je pense que l'URL qui me pose des problèmes a une redirection, donc $ valid devient vide pour toutes les valeurs. Ou peut-être que je fais autre chose de mal.
J'ai également examiné une "demande principale", mais je n'ai pas encore trouvé d'exemples de code réels avec lesquels je peux jouer ou essayer.
Suggestions? Et qu'est-ce que c'est curl?
curl_setopt($handle, CURLOPT_NOBODY, true);
avant d'exécutercurl_exec
Si vous utilisez PHP5, vous pouvez utiliser:
Alternativement avec php4, un utilisateur a contribué à ce qui suit:
Les deux auraient un résultat similaire à:
Par conséquent, vous pouvez simplement vérifier que la réponse d'en-tête était OK, par exemple:
Codes et définitions du W3C
la source
get_headers($https_url,1,443);
je suis sûr que cela fonctionnera bien que ce ne soit pas dans laget_headers()
fonction standard .. N'hésitez pas à le tester et à lui répondre avec un statut.Avec le code de strager, vous pouvez également vérifier le CURLINFO_HTTP_CODE pour d'autres codes. Certains sites Web ne signalent pas un 404, ils redirigent simplement vers une page 404 personnalisée et renvoient 302 (redirection) ou quelque chose de similaire. Je l'ai utilisé pour vérifier si un fichier réel (par exemple, robots.txt) existait sur le serveur ou non. Il est clair que ce type de fichier ne provoquerait pas de redirection s'il existait, mais s'il ne le faisait pas, il redirigerait vers une page 404, qui, comme je l'ai déjà dit, peut ne pas avoir de code 404.
la source
408 Request Timeout
, pas un404
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, FALSE);
Comme le suggère Strager, examinez l'utilisation de cURL. Vous pouvez également être intéressé par la configuration de CURLOPT_NOBODY avec curl_setopt pour ignorer le téléchargement de la page entière (vous voulez juste les en-têtes).
la source
Si vous recherchez une solution la plus simple et celle que vous pouvez essayer en une seule fois sur php5, faites
la source
J'ai trouvé cette réponse ici :
Essentiellement, vous utilisez la méthode "file get contents" pour récupérer l'URL, qui remplit automatiquement la variable d'en-tête de réponse http avec le code d'état.
la source
Cela vous donnera vrai si l'url ne renvoie pas 200 OK
la source
addendum; testé ces 3 méthodes en tenant compte des performances.
Le résultat, au moins dans mon environnement de test:
Curl gagne
Ce test est effectué en considérant que seuls les en-têtes (noBody) sont nécessaires. Testez-vous:
la source
Comme indice supplémentaire de la grande réponse acceptée:
Lors de l'utilisation d'une variante de la solution proposée, j'ai eu des erreurs à cause du paramètre php 'max_execution_time'. Donc ce que j'ai fait était le suivant:
J'ai d'abord défini la limite de temps sur un nombre de secondes plus élevé, à la fin je l'ai remise à la valeur définie dans les paramètres php.
la source
la source
Voici une courte solution.
Dans votre cas, vous pouvez
application/rdf+xml
utiliser ce que vous utilisez.la source
Cette fonction renvoie le code de statut d'une URL en PHP 7:
Exemple:
la source
Vous pouvez également utiliser ce code pour voir l'état de n'importe quel lien:
la source
c'est juste une tranche de code, j'espère que cela fonctionnera pour vous
la source
Voici un moyen!
Ce simple script fait simplement une demande à l'URL pour son code source. Si la requête est terminée avec succès, elle affichera "L'URL existe!". Sinon, il affichera "L'URL n'existe pas!".
la source