外部サイトから画像をダウンロードする

2015年4月30日

目的

外部サイトから画像をダウンロードする。

 

理由

某ECサービスからEC-cubeに移転しようとしたが、
画像の一括ダウンロード機能がなかった。
そもそも画像のダウンロード機能がない。

 

手段

画像のダウンロード機能はないが、画像名のリストはCSVで取得できる。なんじゃそら
というわけで、そのCSVを使って画像をhttpアクセスで一括ダウンロードします。

 $filepath = './common/file/imagelist.csv';// CSVファイルの設置箇所指定
 $csv = file_get_contents($filepath);
 $lines = explode("\r\n", $csv);

 foreach ($lines as $line)
 {
   $img_url = 'http://hoge.com/img/'.$line;// 外部サイトのドメインとか画像の設置ディレクトの指定
   $local_path = './common/fetch_img/'.$line; // 画像の保存先

   $data = file_get_contents($img_url);
   file_put_contents($local_path, $data);

   unset($local_path);
   unset($img_url);
   unset($data);
   unset($line);
 }

 

ちなみに(1)

単品で画像を取得したい場合は↓



 $img_url = 'http://hoge.com/img/'.$line;// 外部サイトのドメインとか画像の設置ディレクトの指定
 $local_path = './common/fetch_img/'.$line; // 画像の保存先

 $data = file_get_contents($img_url);
 file_put_contents($local_path, $data);

 

ちなみに(2)

ファイルが大きすぎるか、多すぎると処理が追いつかなくて以下のようなエラーができるかもしれません。

Fatal error: Maximum execution time of 300 seconds exceeded in

つまり処理が長すぎるので、やーめたってことです。
※300のところは各環境で違う

共用サーバーによっては使えないかもしれませんが、
以下のものを処理の先頭に記載すれば行ける場合も


ini_set("max_execution_time",600);

これで10分は処理が続きます。

 

追記

file_get_contentsでベーシック認証の掛かったコンテンツを取得する

 

ひとこと

外部サーバーだと過剰アクセスになる場合があるので、
予め管理者に確認を取ってから使用してくださいねー

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-PHP