ホームページ >バックエンド開発 >PHPチュートリアル >PHP でリモート イメージをダウンロードしてローカルに保存する方法の詳細な例
この記事では、主に 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); }
以上がPHP でリモート イメージをダウンロードしてローカルに保存する方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。