php中怎样实现图片的打包下载?

[复制链接]
查看11 | 回复1 | 2011-3-23 12:59:19 | 显示全部楼层 |阅读模式
我的图片显示和选择的表单代码如下:
form name=\"selectpic\" enctype=\"multipart/form-data\" action=\"download.php\" method=\"POST\" onSubmit=\"return doCheck();\"
?php
$num=0;
while ($d=mysql_fetch_array($re))
{
$num=$num 1;
if($num%3==1){
echo \"tr\";
}
$picname=\'$d[zpname]\';
echo \"td\";
echo \"a href=\'readpic.php?id=$d[id]\";
echo \"img src=\'$d[dizhi]\' width=\'100\' height=\'100\'\".\"br\";
echo $d[zpname];
echo \"/a\";
echo \"label\";
echo \"input name=checkbox[] type=checkbox value=$d[dizhi]\";
echo \"/label\";
echo \"/td\";
if($num%3==0){
echo \"/tr\";
}
}
?
label
input type=\"submit\" name=\"button\" id=\"button\" value=\"下载\" /
/label
/form

download.php的代码部分该怎样写呢?
还请高手指教~~大恩不言谢~~
回复

使用道具 举报

千问 | 2011-3-23 12:59:19 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">download.php 文件部分, 根据自己的需要修改一下 //---------------------- 中间的部分即可

?php
class zipfile {

var $datasec = array ();

var $ctrl_dir = array ();

var $eof_ctrl_dir = \"\\x50\\x4b\\x05\\x06\\x00\\x00\\x00\\x00\";

var $old_offset = 0;



function unix2_dostime($unixtime = 0){

$timearray = ($unixtime == 0) ? getdate () : getdate($unixtime);


if ($timearray [\'year\']1980){

$timearray [\'year\'] = 1980;

$timearray [\'mon\'] = 1;

$timearray [\'mday\'] = 1;

$timearray [\'hours\'] = 0;

$timearray [\'minutes\'] = 0;

$timearray [\'seconds\'] = 0;

}

return (($timearray [\'year\'] - 1980)25) | ($timearray [\'mon\']21) | ($timearray [\'mday\']16) | ($timearray [\'hours\']11) | ($timearray [\'minutes\']5) | ($timearray [\'seconds\']1);

}

function add_file($data, $name, $time = 0){

$name = str_replace(\'\\\\\', \'/\', $name);



$dtime = dechex($this-unix2_dostime($time));

$hexdtime = \'\\x\' . $dtime [6] . $dtime [7] . \'\\x\' . $dtime [4] . $dtime [5] . \'\\x\' . $dtime [2] . $dtime [3] . \'\\x\' . $dtime [0] . $dtime [1];

eval(\'$hexdtime = \"\' . $hexdtime . \'\";\');



$fr = \"\\x50\\x4b\\x03\\x04\";

$fr .= \"\\x14\\x00\";

$fr .= \"\\x00\\x00\";

$fr .= \"\\x08\\x00\";

$fr .= $hexdtime;



$unc_len = strlen($data);

$crc = crc32($data);

$zdata = gzcompress($data);

$zdata = substr(substr($zdata, 0, strlen($zdata)- 4), 2);

$c_len = strlen($zdata);

$fr .= pack(\'V\', $crc);

$fr .= pack(\'V\', $c_len);

$fr .= pack(\'V\', $unc_len);

$fr .= pack(\'v\', strlen($name));

$fr .= pack(\'v\', 0);

$fr .= $name;



$fr .= $zdata;

$fr .= pack(\'V\', $crc);

$fr .= pack(\'V\', $c_len);

$fr .= pack(\'V\', $unc_len);



$this-datasec [] = $fr;



$cdrec = \"\\x50\\x4b\\x01\\x02\";

$cdrec .= \"\\x00\\x00\";

$cdrec .= \"\\x14\\x00\";

$cdrec .= \"\\x00\\x00\";

$cdrec .= \"\\x08\\x00\";

$cdrec .= $hexdtime;

$cdrec .= pack(\'V\', $crc);

$cdrec .= pack(\'V\', $c_len);

$cdrec .= pack(\'V\', $unc_len);

$cdrec .= pack(\'v\', strlen($name));

$cdrec .= pack(\'v\', 0);

$cdrec .= pack(\'v\', 0);

$cdrec .= pack(\'v\', 0);

$cdrec .= pack(\'v\', 0);

$cdrec .= pack(\'V\', 32);



$cdrec .= pack(\'V\', $this-old_offset);

$this-old_offset= strlen($fr);



$cdrec .= $name;



$this-ctrl_dir[] = $cdrec;

}

function add_path($path, $l = 0){

$d = @opendir($path);

$l = $l0 ? $l : strlen($path) 1;

while($v = @readdir($d)){

if($v == \'.\' || $v == \'..\'){

continue;

}

$v = $path . \'/\' . $v;

if(is_dir($v)){

$this-add_path($v, $l);

} else {

$this-add_file(file_get_contents($v), substr($v, $l));

}

}

}

function file(){

$data = implode(\'\', $this-datasec);

$ctrldir = implode(\'\', $this-ctrl_dir);

return $data . $ctrldir . $this-eof_ctrl_dir . pack(\'v\', sizeof($this-ctrl_dir)) . pack(\'v\', sizeof($this-ctrl_dir)) . pack(\'V\', strlen($ctrldir)) . pack(\'V\', strlen($data)) . \"\\x00\\x00\";

}



function add_files($files){

foreach($files as $file){

if (is_file($file)){

$data = implode(\"\", file($file));

$this-add_file($data, $file);

}

}

}

function output($file){

$fp = fopen($file, \"w\");

fwrite($fp, $this-file ());

fclose($fp);

}
}


$dfile =tempnam(\'/tmp\', \'tmp\');//产生一个临时文件,用于缓存下载文件
$zip = new zipfile();
//----------------------
$filename = \'image.zip\'; //下载的默认文件名

$image = array(

array(\'image_src\' = \'pic1.jpg\', \'image_name\' = \'图片1.jpg\'),

array(\'image_src\' = \'pic2.jpg\', \'image_name\' = \'pic/图片2.jpg\'),
);

foreach($image as $v){

$zip-add_file(file_get_contents($v[\'image_src\']),$v[\'image_name\']);

// 添加打包的图片,第一个参数是图片内容,第二个参数是压缩包里面的显示的名称, 可包含路径

// 或是想打包整个目录 用 $zip-add_path($image_path);
}
//----------------------
$zip-output($dfile);

// 下载文件
ob_clean();
header(\'Pragma: public\');
header(\'Last-Modified:\'.gmdate(\'D, d M Y H:i:s\') . \'GMT\');
header(\'Cache-Control:no-store, no-cache, must-revalidate\');
header(\'Cache-Control:pre-check=0, post-check=0, max-age=0\');
header(\'Content-Transfer-Encoding:binary\');
header(\'Content-Encoding:none\');
header(\'Content-type:multipart/form-data\');
header(\'Content-Disposition:attachment; filename=\"\'.$filename.\'\"\'); //设置下载的默认文件名
header(\'Content-length:\'. filesize($dfile));
$fp = fopen($dfile, \'r\');
while(connection_status() == 0
}
fclose($fp);
@unlink($dfile);
@flush();
@ob_flush();
exit();
?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行