Maison  >  Article  >  développement back-end  >  Utilisez PHP pour télécharger toutes les images sur Internet

Utilisez PHP pour télécharger toutes les images sur Internet

王林
王林original
2023-06-13 09:41:591807parcourir

Avec la popularisation d'Internet, les images sont devenues un élément indispensable de la vie quotidienne des gens. Que ce soit dans les médias sociaux, dans les actualités ou dans les journaux personnels, les images jouent un rôle très important. Par conséquent, nous avons naturellement réfléchi à la manière d'utiliser PHP pour télécharger toutes les images sur Internet et fournir davantage de fonctions liées aux images. Dans le prochain article, nous nous concentrerons sur les méthodes et techniques spécifiques d'utilisation de PHP pour télécharger toutes les images sur Internet.

  1. Obtenir des liens d'images sur Internet

Pour télécharger des images sur Internet, vous devez d'abord clarifier la source de l'image. Généralement, les images sur les pages Web sont référencées via la balise img, afin que nous puissions analyser la page HTML. code, obtenez le lien vers l'image. En PHP, vous pouvez utiliser la fonction CURL ou file_get_contents pour obtenir le code HTML de la page :

$url = 'https://www.example.com';
$html = file_get_contents($url);

Après avoir obtenu le code HTML, nous pouvons utiliser des expressions régulières pour faire correspondre les liens d'image qu'il contient. Supposons que nous souhaitions obtenir tous les liens se terminant par .jpg, .jpeg, .png, .gif, nous pouvons utiliser l'expression régulière suivante :

preg_match_all('/<img.*?src=["'](.+?.(?:jpg|jpeg|png|gif))["'].*?>/i', $html, $matches);
$links = array_unique($matches[1]);

Dans le code ci-dessus, la fonction preg_match_all utilise des expressions régulières pour faire correspondre la balise img en HTML , puis obtenez tous les liens d'image via $matches[1], puis utilisez la fonction array_unique pour supprimer les liens en double.

  1. Téléchargez l'image et enregistrez-la localement

Après avoir obtenu le lien vers l'image, nous pouvons utiliser curl ou la fonction file_get_contents pour télécharger l'image en local. Afin d'éviter de télécharger des fichiers portant le même nom, nous pouvons donner à chaque fichier un nom de fichier unique. Une méthode simple consiste à générer un nom de fichier basé sur l'heure actuelle et la valeur MD5 :

foreach ($links as $link) {
    $extension = pathinfo(parse_url($link, PHP_URL_PATH), PATHINFO_EXTENSION);
    $filename = md5($link . time()) . '.' . $extension;
    file_put_contents($filename, file_get_contents($link));
}

Dans le code ci-dessus, nous utilisons une boucle foreach pour parcourir tous les liens d'image, utilisons la fonction parse_url pour obtenir le chemin dans le lien (à l'exclusion la partie du nom de domaine), puis utilisez la fonction pathinfo pour obtenir l'extension dans le chemin, et enfin utilise la fonction file_get_contents pour télécharger l'image en local, et utilise la fonction file_put_contents pour enregistrer le contenu du fichier téléchargé en tant que fichier local. Puisque chaque nom de fichier est unique, vous n’avez pas à vous soucier des noms en double.

  1. Gestion des exceptions de téléchargement

Pendant le processus de téléchargement d'images, vous pouvez rencontrer des situations anormales, telles que le lien de l'image n'est pas disponible, la vitesse de téléchargement est trop lente, etc. Afin d'éviter que ces situations anormales n'entraînent des effets néfastes sur le programme, nous pouvons effectuer une gestion des exceptions sur le processus de téléchargement. Par exemple, lorsqu'un téléchargement de fichier échoue, vous pouvez imprimer un message d'erreur ou enregistrer un journal :

foreach ($links as $link) {
    $extension = pathinfo(parse_url($link, PHP_URL_PATH), PATHINFO_EXTENSION);
    $filename = md5($link . time()) . '.' . $extension;
    $content = @file_get_contents($link);
    if ($content !== false) {
        file_put_contents($filename, $content);
    } else {
        error_log('Failed to download ' . $link);
    }
}

Dans le code ci-dessus, nous utilisons le masque d'erreur @ pour masquer l'invite d'erreur de la fonction file_get_contents, puis utilisons la structure de jugement pour vérifiez le résultat du téléchargement et utilisez error_log La fonction enregistre les informations d'erreur.

  1. Contrôler la vitesse de téléchargement

Lors du téléchargement d'images à grande échelle, nous devons également considérer la question de la vitesse de téléchargement. Si la vitesse de téléchargement est trop rapide, cela peut entraîner une charge inutile sur le serveur et peut même être considéré comme une attaque malveillante de la part du serveur. Par conséquent, nous devons limiter la vitesse de téléchargement.

Afin de contrôler la vitesse de téléchargement, nous pouvons utiliser la fonction veille pour mettre le programme en pause pendant un certain temps. Par exemple, nous pouvons définir une pause d'1 seconde après le téléchargement d'une image pour garantir que le programme ne placera pas une lourde charge sur le serveur lors du téléchargement des images :

foreach ($links as $link) {
    $extension = pathinfo(parse_url($link, PHP_URL_PATH), PATHINFO_EXTENSION);
    $filename = md5($link . time()) . '.' . $extension;
    $content = file_get_contents($link);
    if ($content !== false) {
        file_put_contents($filename, $content);
    } else {
        error_log('Failed to download ' . $link);
    }
    sleep(1);
}

Dans le code ci-dessus, nous utilisons la fonction sleep pour mettre le programme en pause 1 seconde.

Résumé

Dans cet article, nous avons exploré en détail comment utiliser PHP pour télécharger toutes les images sur Internet. L'idée spécifique est d'abord d'obtenir tous les liens d'images, puis de parcourir tous les liens, d'utiliser la fonction file_get_contents pour télécharger les images et de les enregistrer localement, et enfin d'effectuer la gestion des exceptions et le contrôle de la vitesse du processus de téléchargement. Bien que cet article ne fournisse qu'une simple implémentation PHP, je pense que les lecteurs peuvent mieux comprendre et maîtriser le processus de mise en œuvre du téléchargement d'images grâce à l'introduction de cet article, et aider les lecteurs à avoir une meilleure idée et une meilleure solution lorsqu'ils rencontrent des problèmes connexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn