Heim > Artikel > Backend-Entwicklung > Verwenden Sie PHP, um alle Bilder im Internet herunterzuladen
Mit der Popularisierung des Internets sind Bilder zu einem unverzichtbaren Bestandteil des täglichen Lebens der Menschen geworden. Ob in sozialen Medien, Nachrichteninformationen oder persönlichen Tagebüchern, Bilder spielen eine sehr wichtige Rolle. Daher haben wir natürlich darüber nachgedacht, wie wir mit PHP alle Bilder im Internet herunterladen und weitere Funktionen im Zusammenhang mit Bildern bereitstellen können. Im nächsten Artikel konzentrieren wir uns auf die spezifischen Methoden und Techniken zur Verwendung von PHP zum Herunterladen aller Bilder im Internet.
Um Bilder im Internet herunterzuladen, müssen Sie zunächst die Quelle des Bildes klären. Im Allgemeinen werden Bilder auf Webseiten über das img-Tag referenziert, damit wir die HTML-Seite analysieren können Code, Holen Sie sich den Link zum Bild. In PHP können Sie die Funktion CURL oder file_get_contents verwenden, um den HTML-Code der Seite abzurufen:
$url = 'https://www.example.com'; $html = file_get_contents($url);
Nachdem wir den HTML-Code erhalten haben, können wir reguläre Ausdrücke verwenden, um die darin enthaltenen Bildlinks abzugleichen. Angenommen, wir möchten alle Links erhalten, die mit .jpg, .jpeg, .png, .gif enden, können wir den folgenden regulären Ausdruck verwenden:
preg_match_all('/<img.*?src=["'](.+?.(?:jpg|jpeg|png|gif))["'].*?>/i', $html, $matches); $links = array_unique($matches[1]);
Im obigen Code verwendet die Funktion preg_match_all reguläre Ausdrücke, um den img-Tag in HTML abzugleichen Rufen Sie dann alle Bildlinks über $matches[1] ab und verwenden Sie dann die Funktion array_unique, um doppelte Links zu entfernen.
Nachdem wir den Link zum Bild erhalten haben, können wir Curl oder die Funktion file_get_contents verwenden, um das Bild lokal herunterzuladen. Um das Herunterladen von Dateien mit demselben Namen zu vermeiden, können wir jeder Datei einen eindeutigen Dateinamen geben. Eine einfache Methode besteht darin, einen Dateinamen basierend auf der aktuellen Zeit und dem MD5-Wert zu generieren:
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)); }
Im obigen Code verwenden wir eine foreach-Schleife, um alle Bildlinks zu durchlaufen, und verwenden die Funktion parse_url, um den Pfad im Link zu erhalten (außer der Domänennamensteil) und dann verwenden Die Funktion pathinfo ruft die Erweiterung im Pfad ab und verwendet schließlich die Funktion file_get_contents, um das Bild lokal herunterzuladen, und verwendet die Funktion file_put_contents, um den heruntergeladenen Dateiinhalt als lokale Datei zu speichern. Da jeder Dateiname einzigartig ist, besteht kein Grund zur Sorge über doppelte Namen.
Während des Herunterladens von Bildern können ungewöhnliche Situationen auftreten, z. B. ist der Bildlink nicht verfügbar, die Download-Geschwindigkeit ist zu langsam usw. Um zu verhindern, dass diese ungewöhnlichen Situationen negative Auswirkungen auf das Programm haben, können wir beim Downloadvorgang eine Ausnahmebehandlung durchführen. Wenn beispielsweise ein Dateidownload fehlschlägt, können Sie eine Fehlermeldung drucken oder ein Protokoll aufzeichnen:
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); } }
Im obigen Code verwenden wir die Fehlermaske @, um die Fehleraufforderung der Funktion file_get_contents zu maskieren, und verwenden dann die Beurteilungsstruktur, um Überprüfen Sie das Download-Ergebnis und verwenden Sie error_log. Die Funktion protokolliert Fehlerinformationen.
Beim Herunterladen von Bildern in großem Umfang müssen wir auch die Frage der Download-Geschwindigkeit berücksichtigen. Wenn die Download-Geschwindigkeit zu hoch ist, kann dies zu einer unnötigen Belastung des Servers führen und möglicherweise sogar als böswilliger Angriff des Servers gewertet werden. Daher müssen wir die Download-Geschwindigkeit begrenzen.
Um die Download-Geschwindigkeit zu steuern, können wir die Sleep-Funktion nutzen, um das Programm für einen bestimmten Zeitraum anzuhalten. Beispielsweise können wir nach dem Herunterladen eines Bildes eine Pause von 1 Sekunde einstellen, um sicherzustellen, dass das Programm den Server beim Herunterladen von Bildern nicht stark belastet:
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); }
Im obigen Code verwenden wir die Sleep-Funktion, um das Programm anzuhalten 1 Sekunde.
Zusammenfassung
In diesem Artikel haben wir ausführlich untersucht, wie man mit PHP alle Bilder im Internet herunterlädt. Die konkrete Idee besteht darin, zunächst alle Bildlinks abzurufen, dann alle Links zu durchlaufen, die Funktion „file_get_contents“ zu verwenden, um die Bilder herunterzuladen und lokal zu speichern, und schließlich eine Ausnahmebehandlung und Geschwindigkeitskontrolle für den Downloadvorgang durchzuführen. Obwohl dieser Artikel nur eine einfache PHP-Implementierung bereitstellt, glaube ich, dass die Leser durch die Einführung dieses Artikels den Implementierungsprozess des Bilddownloads besser verstehen und beherrschen und den Lesern helfen können, eine bessere Idee und Lösung zu finden, wenn sie auf damit verbundene Probleme stoßen.
Das obige ist der detaillierte Inhalt vonVerwenden Sie PHP, um alle Bilder im Internet herunterzuladen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!