PHPで複数画像をサーバーに取り込む方法とは?

このQ&Aのポイント
  • PHPのfile_put_contents関数を使用して、複数の画像をサーバーに取り込む方法について教えてください。
  • 自分のサーバーにある指定したURLの画像をダウンロードし、リネームして保存する方法を知りたいです。
  • また、CSVファイルに記載されている複数の画像URLを一括でダウンロードする方法も教えてください。
回答を見る
  • ベストアンサー

file_put_contentsで複数画像の取得

自分のサーバー(myserver.com)上で「他サイトにある画像をダウンロードできるPHP」=【download.php】を組みました。 <?php $url = 'http://yoso.jp/qt6w8d.jpg'; $data = file_get_contents($url); file_put_contents('./image/photo_1.jpg',$data); ?> 上記では、http://yoso.jp/にある1つの画像をphoto_1.jpgとリネームして、myserver.com/image/ ディレクトリに画像ファイルとして収納できます。 **************************************************************** 次に、 1001.csv 1002.csv 1003.csv など複数のCSVファイルを作り、自分のサーバーのmyserver.com/csv_file/ ディレクトリに保管しました。 それぞれのCSVファイルの中には、yoso.jpにある画像のURLが、カンマ区切りで複数書かれています。 例【1001.csv】 中身 (yoso.jp にある 複数(今回3つ)の画像のURLが記載) http://yoso.jp/qt6w8d.jpg,http://yoso.jp/dve4k.jpg,http://yoso.jp/4m2fl3.jpg, 尚、このCSVファイルもスクレイピンクで自作しているため必要であれば ""で囲むように改良することも可能です。 "http://yoso.jp/qt6w8d.jpg","http://yoso.jp/dve4k.jpg","http://yoso.jp/4m2fl3.jpg", 上記のcsvファイルを用意した後、下記のような【get.php】を組みました。 <?php $id=$_SERVER['QUERY_STRING']; $csv_url = "http://myserver.com/csv_file/"; $csv_url .= $id ; $csv_url .= ".csv"; $file_jpg = file_get_contents( $csv_url ); echo $file_jpg; ?> この【get.php】は、http://myserver.com/get.php?id=1001 とクエリーでcsv名を指定すると、1001.csvにある画像URL(1001.csvの場合3つ)をPHP上に表示(echo)できます。 ************************************************************** やりたいこと 【download.php】と【get.php】に記載したソースと組み合わせて、csvファイルに書いてある複数の画像をすべてサーバーに取り込みたいです。 可能であればそれぞれの画像名をphoto_1.jpg photo_2.jpg photo_3.jpg のような形でリネームし保存できればと考えていますが、file_put_contentsにて、複数ファイル指定で動作させる方法がわかりません。 どのようにすればいいかご教示戴きたくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

ループで回すのが簡単ではないでしょうか? $file_jpgにはカンマ区切りのURLが入っていると思いますので、 カンマ区切りでURLを取り出し、その数の分だけループしてget/putしてあげればよいかと思います。 -- $urls = explode(",", $file_jpg); #urlを配列として取り出し for ($i=0; $i<count($urls); $i++) { #urlの分だけループ $data = file_get_contents($urls[$i]); file_put_contents("./image/photo_$i.jpg",$data); }

参考URL:
http://www.php-mysql-linux.com/php/php-function/array-explode/
tajix14
質問者

お礼

有難うございます!! 出来ました。こんな長い文面読んでいただいた後に 的確なご指導、本当にありがとうございました。 深く御礼申し上げます。

関連するQ&A

  • file_get_contents 画像直URL

    file_get_contents($url);した際、画像の直URLがあったら、画像をローカルに保存して、URLを書き換えたいのですが、どうやればいいでしょうか? if(preg_match("/http:\/\//", file_get_contents($url))) { ?? } また、画像をローカルに保存って、PHPで出来るのでしょうか?

    • ベストアンサー
    • PHP
  • file_get_contentsがうまくいかない

    echo $url2 = 'https://go.jp/servicef/112233'; echo $scrape2 = file_get_contents($url2); であれば上手くいきますが $aa = '112233'; echo $url2 = 'https://go.jp/servicef/'.$aa; echo $scrape2 = file_get_contents($url2); とした場合うまくいきません。原因わかる方いないでしょうか??

    • 締切済み
    • PHP
  • file_get_contents()の動きが読めません…。

    いつもお世話になっております。(環境:PHP5.2.5) file_get_contents()を外部ファイル(クラス)の中で使ってデータを取得し、 そのクラスをメインファイルで読み込み、 メインの方で、その得たデータを使おうとしています。 (仮に、メインファイルの名前をmain.phpとしておきます。) その際、クラスの中に書くコードについてですが、 下記のように、2通りの書き方が浮かびました。 (仮に、このクラスファイルの名前をclass.phpとしておきます。) //------------------------------------------------------------ $url= 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; $html = file_get_contents($url); //------------------------------------------------------------ $url= $_SERVER['SCRIPT_FILENAME']; $html = file_get_contents($url); //------------------------------------------------------------ で、パターン2の方は、うまく行くのですが、 パターン1の方の処理だと、なぜか、 その処理を行おうとしているファイル(main.php)のダウンロードを開始しようとするのです! ブラウザに「ダウンロードウィンドウが立ち上がる…」という状況です。 パターン1では、 $url_1 = "http://example.com"; のような、「http://」で始まる書式のURLを file_get_contents()の引数に入れることになりますが、 これ自体は問題ないと思っています。 実際、クラスで読み込む方法ではなく、file_get_contents()を使う方法では、 問題なく動いたからです。 つまり、 メインファイルに、 上記の2パターンを書いて試した場合には、問題なくうまくいったのです。 言い換えれば、 メインファイルだけで完結している場合には、 どうも問題は起こらないようで、 クラスなどで引っ張ってくると、問題が起こるようなのです。 (私の勘違いの可能性もありますが…。) 以上、まとりのない文章で、申し訳ありません。 自分でも、なにがなにやら、よく分かっていないため、 多くの情報を提供することで、なんとかアドバイスを頂けないかと思い、 ひとまず、使えそうな情報を並べてみました。 チェック項目など、提示いただければ、 適宜、それに従って対応致しますので、 どうかご助言をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • file_get_contentsについて

    file_get_contentsについて教えてください。 現在あるサイトを定期的にチェックし、特定の文字列が存在したら メールを送るというものを作っています。 そのサイトチェックの際にfile_get_contentsを使って、 サイトの中身をチェックしています。 $tmpPage = file_get_contents('~.cgi?aa=bbb'); 上記の用に記述して$tmpPage内の文字列をチェックすることで 実現できているのですが、本来このサイトは携帯向けのページのため ヘッダー情報を付加して下記のように記述しています。 $opts = array( 'http'=>array( 'method'=>'GET', 'header'=>'Host :www.XXXXX.jp' . PHP_EOL . 'User-Agent :KDDI-XXXXXXXXXXXX' . PHP_EOL . 'x-up-subno :XXXXXXXXXXXX.ezweb.ne.jp' ) ); $context = stream_context_create( $opts ); $tmpPage = file_get_contents( '~.cgi?aa=bbb', false, $context ); このように記述すると Warning: file_get_contents('~.cgi?aa=bbb') [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found とエラーが返ってきてしまいます。 アクセスするURLをYahooやGoogleにすると問題なく動いているので、 問題なのはチェックするサイトのURLが「XXX.cgi?aa=bbb」と なっているのがダメなのではないかと思っています。 アクセス先のURLが単純な「.html」ではないまたは、ヘッダー情報を 付加する場合、file_get_contentsの使い方が変わるのでしょうか。 ご存知の方がいらっしゃれば是非教えてください。 よろしくお願いします。

    • 締切済み
    • PHP
  • fopenとfile_put_contents

    ファイルを操作する関数「fopen」と「file_put_contents」を勉強していて 不思議に思いました。 「fopen」を使ったファイルに書き出す場合 「fopen」→「flock(LOCK_EX)」→「fputs」→「flock(ロック解除)」→「fclose」の 流れが必須になるようですが 「file_put_contents(FILE_APPEND | LOCK_EX)」の場合、 この関数一つで同じような処理されるようですが ロックやロックの解除、書き込んだファイルを閉じるなどの 役割がすべて補われるのでしょうか? 「file_get_contents」も同じだような役割りのようで 手間をかけて複雑になってしまう「fopen」を使う理由は あるのでしょうか? 処理工程など多少の違いの説明は読んでみたのですが 複雑になる「fopen」を使う必要性が分かりません。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • file_get_contents()の引数

    PHPのfile_get_contents()関数についてです。 file_get_contentsに付けるパラメータはどのようなものがありますか? 解りやすく教えて頂けると助かります よろしくお願いします!

    • 締切済み
    • PHP
  • 「include」と「file_get_contents」の違いがよく

    「include」と「file_get_contents」の違いがよく分かりません。 ネットで調べてみました。 ・「include」… 指定したファイルを読み込んで評価 ・「file_get_contents」… 指定したファイルの内容を全て読み込んで文字列として返す で、実際に試してみたのですが、「file_get_contents」の方がよく分かりません。 具体的には、下記を試すと、結果が、tt string(44) "" となるのですが、ttって何ですか? 評価をしないで文字列として返したということでしょうか? それでなんで tt になるのでしょうか? ▼hoge.php <?php $s = file_get_contents("test1.php"); var_dump($s); ?> ▼test1.php <?php echo ("1どうなるのかな"); ?>

    • ベストアンサー
    • PHP
  • file_get_contents関数で引数をURLにすれば、HTML

    file_get_contents関数で引数をURLにすれば、HTMLソースを取得できるのはわかるのですが、 例えば、URLが制限 255バイト?を超える場合、GETでなくPOSTタイプでHTMLを取得したいのですが、file_get_contents関数のように手軽にPOSTタイプで取得できる関数はありますか? PHP5を使っています。

    • 締切済み
    • PHP
  • imgとfile_get_contentsの違い

    こんにちは, 現在,アフィリの導入を考えています。 (e-clickというアフィリです) <img src="http://www.e-click.jp/jpn/app/?app=AJI+9999^~BDE+9999^~sikibetu=+99999999^~p=+9999"/> と書くように指定されていまして(9999は文字ベース) これだと, https://www.e-click.jp/image/clear.gifにリダイレクトされて, e-clickのアフィリでも認識しているようなのですが, phpで file_get_contents("http://www.e-click.jp/jpn/app /?app=AJI+9999^~BDE+9999^~sikibetu=+99999999^~p=+9999"); とすると,アフィリも作動せず,しかも空白のgif画像も表示されません。 1)imgタグの場合とfile_get_contentsでは送るheaderが違うのでしょうか? 2)get_file_contentsでうまく作動させるにはどうすれば良いのでしょうか? わかる方がいらっしゃいましたらよろしくお願い致します。

    • ベストアンサー
    • PHP
  • file_get_contents()にて文字化け

    PHPにてfile_get_contents()関数を使用し、ソースを読み込んだのですが、文字化けしてしまいます。 ※読込先は海外サイトです。日本語は利用されていません。 エンコードの問題かと思い、試行錯誤しましたが、うまくいきません。 解決方法を教えてください。 ちなみに、ソースの読み込み事態はできているので、ユーゼエージェントで、はじかれていることはないと思います。 [相手サイトの情報] ・UTF-8を宣言している ・日本語は使用していない ※URLを$urlとします。 [ソース] header("Content-type:text/html;charset=UTF-8"); echo mb_convert_encoding(file_get_contents($url),'UTF-8','auto'); file_get_contents($url)単体でもアウトでした。 お願いしますm(_ _)m

    • 締切済み
    • PHP

専門家に質問してみよう