PHP

【PHP】画像をダウンロードするfile_put_contentsのちょい罠

PHP-アイキャッチ

こんにちは!ゆーたろうです。

外部サーバにある画像を自サーバに転送する際に使用したfile_put_contentsで少しハマったため、備忘録を残しておきます。

やろうとしたこと

外部サーバにあるJPG画像を、自サーバに転送(ダウンロード)しようとした。

書いたソース

<?php

file_put_contents("./image/1.jpg", "./tmp/image/test.jpg");

?>

このように、別のフォルダにある画像を移動させようとした。

発生した現象

下記図のように、正しく表示されない画像データになってしまった。

file_put_contentsの画像取得エラー

原因

JPG形式の画像だけど、中にはただのバイナリデータになってしまった。

JPG拡張子のテキストファイルみたいになった様子。

検索ワード「file_put_contents 画像が大きいか」で調べてみて、phpでfile_get_contents で外部の画像を取得し、サイズ変更を行って保存してみるの記事を読んで解決しました。

file_put_contentsだとバイナリデータをもってきてしまうので、持ってくる先の画像は「file_get_contents」で取ってくる必要があるようです。

対策後のソース

これでできました。

<?php

file_put_contents("./image/1.jpg", file_get_contents("./tmp/image/test.jpg"));

?>

めでたしめでたし。