目次
目的
外部サイトから画像をダウンロードする。
理由
某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分は処理が続きます。
追記
ひとこと
外部サーバーだと過剰アクセスになる場合があるので、
予め管理者に確認を取ってから使用してくださいねー