ホームページ  >  記事  >  バックエンド開発  >  リモート画像をダウンロードしてローカルに保存するための PHP メソッド

リモート画像をダウンロードしてローカルに保存するための PHP メソッド

微波
微波オリジナル
2017-06-28 11:48:272004ブラウズ

この記事では、主に PHP でリモート画像をダウンロードする方法を紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう

PHP を使用して単純なクローラーを作成する場合、リモート画像をダウンロードする必要があることがよくあります。そのため、この必要性を単純に実装しましょう。

1.curlを使用します

たとえば、次の2つの画像があります:

$images = [
  'https://dn-laravist.qbox.me/2015-09-22_00-17-06j.png',
  'https://dn-laravist.qbox.me/2015-09-23_00-58-03j.png'
];

最初のステップでは、最も単純なコード実装を直接使用できます:

function download($url, $path = 'images/')
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
  $file = curl_exec($ch);
  curl_close($ch);
  $filename = pathinfo($url, PATHINFO_BASENAME);
  $resource = fopen($path . $filename, 'a');
  fwrite($resource, $file);
  fclose($resource);
}

その後、リモート画像をダウンロードするときに使用できます。このように:

foreach ( $images as $url ) {
  download($url);
}

2. クラスをカプセル化する

アイデアを明確にした後、この基本的な関数をクラスにカプセル化できます:

class Spider {

  public function downloadImage($url, $path = 'images/')
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    $file = curl_exec($ch);
    curl_close($ch);
    $filename = pathinfo($url, PATHINFO_BASENAME);
    $resource = fopen($path . $filename, 'a');
    fwrite($resource, $file);
    fclose($resource);
  }
}

さて、次のように少し最適化することもできます:

public function downloadImage($url, $path='images/')
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    $file = curl_exec($ch);
    curl_close($ch);

    $this->saveAsImage($url, $file, $path);
  }

  private function saveAsImage($url, $file, $path)
  {
    $filename = pathinfo($url, PATHINFO_BASENAME);
    $resource = fopen($path . $filename, 'a');
    fwrite($resource, $file);
    fclose($resource);
  }

カプセル化した後これをクラスに追加すると、次のように画像をダウンロードするコードを呼び出すことができます:

$spider = new Spider();

foreach ( $images as $url ) {
  $spider->downloadImage($url);
}

この方法で、基本的なリモート画像のダウンロードは OK です。

以上がリモート画像をダウンロードしてローカルに保存するための PHP メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。