Corriger la façon PHP de vérifier si l'image externe existe?
Je sais qu'il y a au moins 10 les mêmes questions avec les réponses, mais aucune ne semble fonctionner pour moi parfaitement. Je suis en train de vérifier si interne ou externe de l'image (URL de l'image est-elle valide?).
fopen($url, 'r')
échoue à moins que j'utilise@fopen()
:Warning: fopen(http://example.com/img.jpg) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in file.php on line 21
getimagesize($img)
échoue lorsque l'image n'existe pas (PHP 5.3.8):Warning: getimagesize() [function.getimagesize]: php_network_getaddresses: getaddrinfo failed
- CURL échoue parce qu'il n'est pas pris en charge par certains serveurs (même s'il est présent essentiellement partout).
fileExists()
échoue car il ne fonctionne pas avec les Url externes et
ne peut pas vérifier si nous avons affaire à une image.
Quatre méthodes les plus courantes sont les réponses à cette question sont mauvais. Quelle serait la bonne façon de le faire?
source d'informationauteur Atadj
Vous devez vous connecter pour publier un commentaire.
getimagesize($img) fails when image doesn't exist:
ne suis pas sûr de comprendre ce que vous voulez .....À PARTIR DE PHP DOC
Exemple
Sortie
getimagesize
fonctionne très bienModifier
Ce code est fait pour vérifier le fichier... Mais, il ne fonctionne que pour les images!
Si vous utilisez PHP >=5.0.0, vous pouvez passer un paramètre supplémentaire dans fopen pour spécifier les options de contexte pour HTTP, parmi eux, la prise en compte de l'échec des codes d'état.
Utilisation
fsockopen
se connecter au serveur, envoyer unHEAD
demande et voir ce que vous obtenez en retour.Le seul moment où vous devez être conscient des problèmes est de savoir si le domaine n'existe pas.
Exemple de code:
Vous pouvez utiliser la POIRE/HTTP_Request2 Paquet pour cette. Vous pouvez le trouver ici
Voici un exemple. L'Exemple attend de vous que vous avez installé ou téléchargé le HTTP_Request2 paquet correctement. Il utilise le style ancien de la prise de l'adaptateur, pas de roulage.
J'ai trouvé essayez d'attraper la meilleure solution pour cela. Il fonctionne très bien avec moi.
Je sais que vous avez écrit "sans curl" mais encore, quelqu'un peut trouver cela utile:
Vous verrez quelque chose comme ceci
HTTP/1.1 200 OK
ouHTTP/1.1 404 Not Found
retournés dans les en-tête de tableau. Vous pouvez le faire également en parallèle de multiples demandes aveccurl multi
.Il y a plusieurs étapes, il n'y a pas de solution unique:
Pour ce genre de travail, vous pouvez intercepter les exceptions et à les gérer de bien définir votre réponse. Dans ce cas, vous pouvez même supprimer les erreurs, car il est prévu qu'elles truc peut échouer. Si vous traiter les erreurs correctement.
Car il n'est pas possible de faire un contrôle à 100% sans avoir l'image téléchargée. Donc, étape 1 et 2 sont nécessaires, 3 et 4 en option pour une réponse définitive.