>  기사  >  백엔드 개발  >  PHP를 사용하여 인터넷의 모든 이미지를 다운로드하세요.

PHP를 사용하여 인터넷의 모든 이미지를 다운로드하세요.

王林
王林원래의
2023-06-13 09:41:591831검색

인터넷이 대중화되면서 사진은 사람들의 일상생활에서 없어서는 안 될 부분이 되었습니다. 소셜 미디어, 뉴스 정보, 개인 일기 등에서 사진은 매우 중요한 역할을 합니다. 그래서 우리는 어떻게 하면 PHP를 이용해 인터넷에 있는 모든 사진을 다운로드 받을 수 있고, 사진과 관련된 더 많은 기능을 제공할 수 있을지 자연스럽게 생각하게 되었습니다. 다음 기사에서는 PHP를 사용하여 인터넷에서 모든 이미지를 다운로드하는 구체적인 방법과 기술에 중점을 둘 것입니다.

  1. 인터넷에서 이미지 링크 가져오기

인터넷에서 이미지를 다운로드하려면 먼저 이미지의 출처를 명확히 해야 합니다. 일반적으로 웹페이지의 이미지는 img 태그를 통해 참조되므로 HTML 페이지를 구문 분석할 수 있습니다. 코드, 이미지에 대한 링크를 가져옵니다. PHP에서는 CURL 또는 file_get_contents 함수를 사용하여 페이지의 HTML 코드를 가져올 수 있습니다.

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

HTML 코드를 가져온 후 정규식을 사용하여 그 안에 있는 이미지 링크를 일치시킬 수 있습니다. .jpg, .jpeg, .png, .gif로 끝나는 모든 링크를 가져오려면 다음 정규식을 사용할 수 있습니다.

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

위 코드에서 preg_match_all 함수는 정규식을 사용하여 HTML의 img 태그와 일치시킵니다. , $matches[1]을 통해 모든 이미지 링크를 얻은 다음 array_unique 함수를 사용하여 중복 링크를 제거합니다.

  1. 이미지를 다운로드하여 로컬에 저장하세요

이미지에 대한 링크를 얻은 후 컬이나 file_get_contents 함수를 사용하여 이미지를 로컬에 다운로드할 수 있습니다. 동일한 이름을 가진 파일을 다운로드하지 않기 위해 각 파일에 고유한 파일 이름을 지정할 수 있습니다. 간단한 방법은 현재 시간과 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));
}

위 코드에서는 foreach 루프를 사용하여 모든 이미지 링크를 순회하고,parse_url 함수를 사용하여 링크의 경로를 얻습니다(제외) pathinfo 함수는 경로의 확장자를 가져온 후 마지막으로 file_get_contents 함수를 사용하여 이미지를 로컬에 다운로드하고, file_put_contents 함수를 사용하여 다운로드한 파일 내용을 로컬 파일로 저장합니다. 각 파일 이름은 고유하므로 이름이 중복되는 것에 대해 걱정할 필요가 없습니다.

  1. 다운로드 예외 처리

사진을 다운로드하는 동안 사진 링크를 사용할 수 없거나 다운로드 속도가 너무 느린 등 비정상적인 상황이 발생할 수 있습니다. 이러한 비정상적인 상황이 프로그램에 부정적인 영향을 미치는 것을 방지하기 위해 다운로드 프로세스에서 예외 처리를 수행할 수 있습니다. 예를 들어, 파일 다운로드가 실패하면 오류 메시지나 로그를 인쇄할 수 있습니다:

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);
    }
}

위 코드에서는 오류 마스크 @를 사용하여 file_get_contents 함수의 오류 프롬프트를 마스크한 다음 판단 구조를 사용하여 확인합니다. 결과를 다운로드하고 error_log를 사용합니다. 이 함수는 오류 정보를 기록합니다.

  1. 다운로드 속도 제어

대규모 이미지를 다운로드할 때는 다운로드 속도 문제도 고려해야 합니다. 다운로드 속도가 너무 빠르면 서버에 불필요한 부하가 발생할 수 있으며, 심지어 서버에 의한 악의적인 공격으로 간주될 수도 있습니다. 따라서 다운로드 속도를 제한해야 합니다.

다운로드 속도를 제어하기 위해 절전 기능을 사용하여 일정 기간 동안 프로그램을 일시 중지할 수 있습니다. 예를 들어, 프로그램이 사진을 다운로드하는 동안 서버에 과도한 부하를 주지 않도록 사진을 다운로드한 후 1초의 일시 중지를 설정할 수 있습니다.

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);
}

위 코드에서는 절전 기능을 사용하여 프로그램을 일시 중지합니다. 1 초.

요약

이 기사에서는 PHP를 사용하여 인터넷에서 모든 이미지를 다운로드하는 방법을 자세히 살펴보았습니다. 구체적인 아이디어는 먼저 모든 이미지 링크를 얻은 다음 모든 링크를 반복하고 file_get_contents 함수를 사용하여 이미지를 다운로드하고 로컬에 저장한 다음 마지막으로 다운로드 프로세스에서 예외 처리 및 속도 제어를 수행하는 것입니다. 이 글에서는 간단한 PHP 구현만을 제공하지만, 독자들은 이 글의 소개를 통해 이미지 다운로드의 구현 과정을 더 잘 이해하고 숙달할 수 있으며, 관련 문제에 직면했을 때 더 나은 아이디어와 해결책을 얻을 수 있을 것이라고 믿습니다.

위 내용은 PHP를 사용하여 인터넷의 모든 이미지를 다운로드하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.