実現したいこと
ブログを移設したく、画像をダウンロードしようと思い、
下記ソースのように画像をダウンロードをしてファイルは生成できたのですが、
中身がないようで0KBのファイルが出来上がってしまいました。
中身もダウンロードするにはどのようにしたらいいのでしょうか?
発生している問題・分からないこと
PHPで画像をダウンロードしたが容量が0KBになってしまいます。
画像のファイルをそのまま持ってきたいです。
エラーメッセージ
error
1エラー等は特に表示されません。
該当のソースコード
php
1<?php 2header("Cache-Control: no-store"); 3 $file_name = "urllist.txt"; /*読込ファイルの指定*/ 4 $img_url = file( $file_name ); /*ファイルを全て配列に入れる*/ 5 6foreach( $img_url as $value ) { 7 if(!$value==""){ 8 //フォルダを生成 9 $a = str_replace('https://blog.jp', '.', $value); 10 $a = preg_replace('!/[^/]*$!', '/', $a); 11 if(!file_exists($a."/")){ 12 mkdir($a,0777,true); 13 } 14 15 //画像のURLからファイル名を生成 16 $filename = basename($value); 17 18 //画像の取得と保存 19 $data = file_get_contents($value); 20 $result = file_put_contents($a.$filename,$data); 21 echo $a ." ".$result."<br />"; 22 @ob_flush(); 23 @flush(); 24 } 25 sleep(1); 26} 27echo "完了しました"; 28?>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
file_get_contentsやfile_put_contentsを使用して画像を保存する方法はあるのですが、
foreachを使用して繰り返し画像をダウンロードする方法は見当たりませんでした。
補足
特になし
echo $a ." ".$result."<br />";
は正しく実行されているのですか?
if(!$value==""){
がうまく動作しないような気がするのですが。
下記のような感じで多少手直しはしましたが、実行はされています。
0KBではなく、1KBになりましたが、ファイルが壊れているのはかわらずです。
<?php
$file_name = "urllist.txt"; /*読込ファイルの指定*/
$img_url = file( $file_name ); /*ファイルを全て配列に入れる*/
$context = stream_context_create(array(
'http' => array('ignore_errors' => true)
));
foreach( $img_url as $value ) {
if(!$value==""){
//フォルダを生成
$a = str_replace('https://pds.exblog.jp', '.', $value);
$a = preg_replace('!/[^/]*$!', '/', $a);
if(!file_exists($a."/")){
mkdir($a,0777,true);
}
//画像のURLからファイル名を生成
$filename = basename($value);
//画像の取得と保存
$data = file_get_contents($value,FALSE, $context);
$result = file_put_contents($a.$filename,$data);
echo $a ." ".$result."<br />";
}
sleep(1);
}
echo "完了しました";
?>
下記のように出力されまして、なぜか最後の1つだけは正常に保存されるようです。
./pds/1/202502/13/21/ 111
./pds/1/202502/13/21/ 111
./pds/1/202502/10/21/ 111
./pds/1/202502/10/21/ 111
./pds/1/202502/10/21/ 111
./pds/1/202502/10/21/ 111
./pds/1/202502/08/21/ 111
./pds/1/202502/08/21/ 111
./pds/1/202502/04/21/ 111
./pds/1/202502/02/21/ 111
./pds/1/202502/02/21/ 69063
完了しました
PHP にこだわりがなければ、wget コマンドを利用してもよいかと思います。
$ wget -x -nH -i urllist.txt
