PHPを使って、画像を取得して特定のディレクトリに新しいファイル名で保存したいのですが、画像ファイルは作成されるのに中身が0kbの空のjpgファイルが作成されます。
下記の通りのコードで処理していますが、この場合だと上手くバイナリデータを取得できていないということでしょうか?
PHP
1 2//ダウンロード後のファイル名 3$save_file='./download/new.jpg'; 4 5//元の画像 6$url = 'http://任意のドメイン/img/old.jpg'; 7 8//file_get_contentsで取得 9$data = file_get_contents($url); 10 11//特定のディレクトリーにファイルを保存する 12file_put_contents($save_file,$data);
おそらく、E_WARNING レベルのエラー が発生していると思いますので、
下記のようにレポーティングレベルを変えたり、警告の出力をオンにしてみてください。
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
もしくはログファイルに何か出ているかもしれないので、そちらを参照してみてください。
原因はいくつか考えられますが、まずはエラーかどうかを調べられる状態にしてみてください。
file_get_contentsの結果の$dataをvar_dump()してみてください。
教えて頂いた方法で実行してみると
Warning: file_put_contents(./download/new.jpg): failed to open stream: No such file or directory in...
と表示されていてエラーが出ていました。
そのphpファイルと同じ階層にdownloadフォルダはあるのでしょうか。
同じ階層にフォルダはあります。パーミッションかなと思い777に設定して試しましたが変わらずでした。
それとこのサーバ自体にベーシック認証をかけているのですが、その認証にひっかかるなどありますでしょうか。
おそらく別問題かなと(試したわけではないですが)
ひとまず下記の結果も教えてください。正しく取得できていないとputもできないと思うので。
var_dump($data);
教えて頂いたコードを入れてみました。
bool(false)
画像がそもそも取れてませんね。
指定したURLは直に実行して画像が表示されるものですか?
直に実行したところ画像は正しく表示されるのですが、なぜ取得できないのかが
再度、var_dump($data);すると文字列が表示されました。