お友達の胡瓜メモ帳: phpでURLから画像を一括ダウンロード・改とほぼ同じですが、こちらも授業で作成したのでメモ。
これだけの作業がグッとされると気分が良いですし、まるごとダウンロードって言うのがなかなかおいしい気がします。
まぁ、取るつもりの無かったものまで付加されますが。
作成するにあたっての参考ページは以下です。
PHP で zip 圧縮
ここにあるように、「phpMyAdmin」内のzip圧縮用ライブラリとダウンロードライブラリを使用しています。
こちらが現物です。
IEの場合は自動でテキストボックスまで移動されますが、他のブラウザでは広告が表示されると思います。
そのままどうぞスクロールしてみてください。
画像を一括ダウンロードしたいサイトのアドレスをそのままテキストボックスへ入れて「送信」すると、少しレスポンスは悪いですが「img[年月日_時分秒].zip」がダウンロードできます。
解凍するとサイトにある画像が全部入っているはずです。
以下はソースになりますので、見たい人だけどうぞ。
▼続きを読む/たたむ
今回は3つに分かれています。
「zip/lib.php」は説明対象外として、「view.php」「tozip.php」が本体となります。
view.php
<?
header( "Content-Type: text/html; Charset=SJIS" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
?>
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<TITLE>ほるめすメモ帳inBlogger - ページ内画像一括zip圧縮PHP</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
 function init(){
  window.scroll(0,150);
 }
//-->
</SCRIPT> 
</HEAD>
<BODY onload='init();'>
<FORM
 name="frm"
 method="GET"
 action="tozip.php"
>
 <INPUT
  type="text"
  name="url"
  style='width:300px;'
 ><br>
 <INPUT
  type="submit"
  name="send"
  value="送信"
 >
</FORM>
</BODY>
</HTML>
tozip.php
<?
header( "Content-Type: text/html; Charset=SJIS" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
// ライブラリを参照
require_once('zip.lib.php');
if ( $_GET['send'] != '' ) {
 // 配列準備
 $flist = array();
 // zip名作成
 $zipname = date("ymd_His");
 // クラス作成
 $zipfile = new zipfile();
 //$data_temp からファイルっぽいものを配列に入れる
 preg_match_all('/(?:")?(http:\/\/[^\s"]+)/',
  file_get_contents($_GET['url']), $matches);
 //重複したものを省き、名前を整える
 $get_array = array_unique($matches[1]);
 //処理制限時間を外す
 set_time_limit( 0 );
 // 画像ファイルであるフルパスだけを配列に格納していく
 foreach ($get_array as $value){
  if(preg_match("/(gif|jpg|png|jpeg)$/i",$value)){
   array_push( $flist , $value);
  }
 }
 // 全画像フルパスをループ処理する
 for ( $i = 0; $i < count($flist); $i++){
  // 画像データを展開する
  $handle = file_get_contents($flist[$i]);
  
  // ファイル情報として追加
  $zipfile -> addFile( $handle, basename($flist[$i]) );
 }
 // 全データを.zipファイルとして変数に代入
 $zip_buffer = $zipfile->file();
 header( "Content-Type: application/octet-stream" );
 header( "Content-disposition: attachment; filename=img".$zipname.".zip" );
 header("Content-Length: ".strlen($zip_buffer));
  
 // 表示(実際にはzip生成)
 print $zip_buffer;
}
 
?>
 
0 件のコメント:
コメントを投稿