Bonjour à tous,
J'ai besoin d'une fonction pour extraire les url des images d'une page HTML et de tester leur présence sur un serveur distant. Voici comment j'ai procédé :
Je précise : le but n'est pas de lister toutes les images en "404" (dommage mais vraiment trop gourmand) mais de retourner false à la 1ere image non trouvée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 $page = "ma-page-a-scanner.html"; function is_image_exists ($url) { if (@fclose(@fopen($url, 'r'))) { return true; } else { return false; } } function scan_images($page){ $scan = file_get_contents($page); preg_match_all('#src="(.*)"#U', $scan, $match); foreach($match[0] as $val){ $im = str_replace('src="', '', $val); //un seul regex suffirait sans doute mais je n'ai pas trouvé $img = str_replace('"', '', $im); // encore un tour de trop ? if(!is_image_exists($img)){ return false; } } return true; }
Pour la fonction is_image_exists, j'ai testé également getimagesize, ce n'est plus rapide. Testé aussi avec CURL : pas mieux.
Telles quelles ces fonctions mettent environ 15 secondes pour parser 37 URL dont aucune ne retourne false. Peut-on mieux faire ?
Et, quand même, peut-on retourner un tableau de toutes les images false sans plomber le serveur ?
D'avance merci.
Partager