Je génère des URL dynamiques d'images pour les ISBN de livre. J'ai besoin d'un moyen fiable avec PHP pour vérifier si les images existent réellement à l'url distante. J'ai essayé différentes approches avec différentes bibliothèques PHP, curl, etc.) , mais aucun d'entre eux ne fonctionne bien, certains d'entre eux sont carrément lents. Étant donné que je dois générer (et vérifier!) environ 60 URL pour chaque livre de ma base de données, c'est un temps d'attente énorme. Des indices?
function checkRemoteFile($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
// don't download content
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
if($result !== FALSE)
{
return true;
}
else
{
return false;
}
}
-> c'est le moyen le plus rapide si votre hôte prend en charge curl
Utilisez la méthode getimagesize () comme celle-ci
$external_link = ‘http://www.example.com/example.jpg’;
if (@getimagesize($external_link)) {
echo “image exists “;
} else {
echo “image does not exist “;
}
Il n'y a pas de moyen "facile" ici - au minimum, vous devez générer une requête HEAD
et vérifier le type de contenu résultant pour vous assurer qu'il s'agit d'une image. Cela ne tient pas compte des éventuels problèmes de référent. curl est le chemin à parcourir ici.
Vous pouvez utiliser curl . Définissez simplement l'option curl CURLOPT_NOBODY sur true. Cela sautera les informations sur le corps et n'obtiendra que la tête (donc le code http également). Ensuite, vous pouvez utiliser le CURLOPT_FAILONERROR pour transformer tout ce processus en une vérification de type vrai/faux
Vous pouvez utiliser getimagesize ()
Crédit: http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/
Je fais cela pour mon suivi de photos immobilières ...
$im = @imagecreatefromjpeg($pathtoimg);
if($im)
imagedestroy($im); // dont save, just ack...
elseif(!$missing[$inum])
$img404arr[] = $inum;
Cela `` semble '' plus rapide que le téléchargement de l'image réelle, prenant environ 0,3 seconde pour chacune des images dont la moyenne est de 100k.
J'aimerais pouvoir faire une vérification d'en-tête et lire si j'obtiens un 200 contre un 404 sans rien télécharger. Quelqu'un l'a-t-il à portée de main?
Solution de https://www.experts-exchange.com
<?php
function url_exists($url) {
if (!$fp = curl_init($url)) return false;
return true;
}
?>
C'est probablement un point muet à ce stade, mais cela fonctionne pour moi:
function is_webfile($webfile)
{
$fp = @fopen($webfile, "r");
if ($fp !== false)
fclose($fp);
return($fp);
}
if(@getimagesize($remoteImageURL)){
//image exists!
}else{
//image does not exist.
}