English 中文(简体)
生成并下载 zip
原标题:generate and download zip
  • 时间:2012-05-24 16:16:13
  •  标签:
  • php

im 使用 PHP 生成并强制下载一个 ZIP 文件, 其中载有数据库表格中列出的相片序列 。

<?php
include("config.php");
require ("拉链文件.inc.php");
$zipfile = new zipfile();
$filedata = implode("", file("拉链文件.inc.php"));

$getspdi = mysql_query("SELECT * FROM `wedding_photos` WHERE `user_hash` =  $_GET[id]  ORDER BY `id` DESC LIMIT 0, 1000") or die(mysql_error());
$getspd = mysql_fetch_array($getspdi);

while ($photos = mysql_fetch_array($getspdi)) {
$zipfile->add_file(file_get_contents(/var/www/vhosts/domain.com/httpdocs-entertainment$photos[img]), "&photos[img]");
echo("/var/www/vhosts/domain.com/httpdocs-entertainment/ <br />");
}

header("Content-disposition: attachment; filename=spd_$_GET[title]_$_GET[fname]_$_GET[lname]__$_GET[photos]_Photos.zip");
echo $zipfile->file();
?>

然而这个代码似乎只是让我看到一个空白的白页, 什么都没有发生。

有人能给我点想法吗?

拉链文件.inc.php

thanks for your replies, forgot to mention also that i have no clue when it comes to php and am trying to fix someone elses bit of code.the content of the 拉链文件.inc.php is as follows.

 code 
<?php  
/* 
Zip file creation class 
makes zip files on the fly... 

use the functions add_dir() and add_file() to build the zip file; 
see example code below 



v1.1 9-20-01 
  - added comments to example 

v1.0 2-5-01 

initial version with: 
  - class appearance 
  - add_file() and file() methods 
  - gzcompress() output hacking 


*/  



class zipfile   
{   

    var $datasec = array(); // array to store compressed data 
    var $ctrl_dir = array(); // central directory    
    var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00"; //end of Central directory record 
    var $old_offset = 0;  

    function add_dir($name)    

    // adds "directory" to archive - do this before putting any files in directory! 
    // $name - name of directory... like this: "path/" 
    // ...then you can add files using add_file with names like "path/file.txt" 
    {   
        $name = str_replace("\", "/", $name);   

        $fr = "x50x4bx03x04";  
        $fr .= "x0ax00";    // ver needed to extract 
        $fr .= "x00x00";    // gen purpose bit flag 
        $fr .= "x00x00";    // compression method 
        $fr .= "x00x00x00x00"; // last mod time and date 

        $fr .= pack("V",0); // crc32 
        $fr .= pack("V",0); //compressed filesize 
        $fr .= pack("V",0); //uncompressed filesize 
        $fr .= pack("v", strlen($name) ); //length of pathname 
        $fr .= pack("v", 0 ); //extra field length 
        $fr .= $name;   
        // end of "local file header" segment 

        // no "file data" segment for path 

        // "data descriptor" segment (optional but necessary if archive is not served as file) 
        $fr .= pack("V",$crc); //crc32 
        $fr .= pack("V",$c_len); //compressed filesize 
        $fr .= pack("V",$unc_len); //uncompressed filesize 

        // add this entry to array 
        $this -> datasec[] = $fr;  

        $new_offset = strlen(implode("", $this->datasec));  

        // ext. file attributes mirrors MS-DOS directory attr byte, detailed 
        // at http://support.microsoft.com/support/kb/articles/Q125/0/19.asp 

        // now add to central record 
        $cdrec = "x50x4bx01x02";  
        $cdrec .="x00x00";    // version made by 
        $cdrec .="x0ax00";    // version needed to extract 
        $cdrec .="x00x00";    // gen purpose bit flag 
        $cdrec .="x00x00";    // compression method 
        $cdrec .="x00x00x00x00"; // last mod time & date 
        $cdrec .= pack("V",0); // crc32 
        $cdrec .= pack("V",0); //compressed filesize 
        $cdrec .= pack("V",0); //uncompressed filesize 
        $cdrec .= pack("v", strlen($name) ); //length of filename 
        $cdrec .= pack("v", 0 ); //extra field length    
        $cdrec .= pack("v", 0 ); //file comment length 
        $cdrec .= pack("v", 0 ); //disk number start 
        $cdrec .= pack("v", 0 ); //internal file attributes 
        $ext = "x00x00x10x00";  
        $ext = "xffxffxffxff";   
        $cdrec .= pack("V", 16 ); //external file attributes  -  directory  bit set 

        $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header 
        $this -> old_offset = $new_offset;  

        $cdrec .= $name;   
        // optional extra field, file comment goes here 
        // save to array 
        $this -> ctrl_dir[] = $cdrec;   


    }  


    function add_file($data, $name)    

    // adds "file" to archive    
    // $data - file contents 
    // $name - name of file in archive. Add path if your want 

    {   
        $name = str_replace("\", "/", $name);   
        //$name = str_replace("\", "\\", $name); 

        $fr = "x50x4bx03x04";  
        $fr .= "x14x00";    // ver needed to extract 
        $fr .= "x00x00";    // gen purpose bit flag 
        $fr .= "x08x00";    // compression method 
        $fr .= "x00x00x00x00"; // last mod time and date 

        $unc_len = strlen($data);   
        $crc = crc32($data);   
        $zdata = gzcompress($data);   
        $zdata = substr( substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug 
        $c_len = strlen($zdata);   
        $fr .= pack("V",$crc); // crc32 
        $fr .= pack("V",$c_len); //compressed filesize 
        $fr .= pack("V",$unc_len); //uncompressed filesize 
        $fr .= pack("v", strlen($name) ); //length of filename 
        $fr .= pack("v", 0 ); //extra field length 
        $fr .= $name;   
        // end of "local file header" segment 

        // "file data" segment 
        $fr .= $zdata;   

        // "data descriptor" segment (optional but necessary if archive is not served as file) 
        $fr .= pack("V",$crc); //crc32 
        $fr .= pack("V",$c_len); //compressed filesize 
        $fr .= pack("V",$unc_len); //uncompressed filesize 

        // add this entry to array 
        $this -> datasec[] = $fr;  

        $new_offset = strlen(implode("", $this->datasec));  

        // now add to central directory record 
        $cdrec = "x50x4bx01x02";  
        $cdrec .="x00x00";    // version made by 
        $cdrec .="x14x00";    // version needed to extract 
        $cdrec .="x00x00";    // gen purpose bit flag 
        $cdrec .="x08x00";    // compression method 
        $cdrec .="x00x00x00x00"; // last mod time & date 
        $cdrec .= pack("V",$crc); // crc32 
        $cdrec .= pack("V",$c_len); //compressed filesize 
        $cdrec .= pack("V",$unc_len); //uncompressed filesize 
        $cdrec .= pack("v", strlen($name) ); //length of filename 
        $cdrec .= pack("v", 0 ); //extra field length    
        $cdrec .= pack("v", 0 ); //file comment length 
        $cdrec .= pack("v", 0 ); //disk number start 
        $cdrec .= pack("v", 0 ); //internal file attributes 
        $cdrec .= pack("V", 32 ); //external file attributes -  archive  bit set 

        $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header 
//        echo "old offset is ".$this->old_offset.", new offset is $new_offset<br>"; 
        $this -> old_offset = $new_offset;  

        $cdrec .= $name;   
        // optional extra field, file comment goes here 
        // save to central directory 
        $this -> ctrl_dir[] = $cdrec;   
    }  

    function file() { // dump out file    
        $data = implode("", $this -> datasec);   
        $ctrldir = implode("", $this -> ctrl_dir);   

        return    
            $data.   
            $ctrldir.   
            $this -> eof_ctrl_dir.   
            pack("v", sizeof($this -> ctrl_dir)).     // total # of entries "on this disk" 
            pack("v", sizeof($this -> ctrl_dir)).     // total # of entries overall 
            pack("V", strlen($ctrldir)).             // size of central dir 
            pack("V", strlen($data)).                 // offset to start of central dir 
            "x00x00";                             // .zip file comment length 
    }  
}   

?>
 code 

感激多多多多多 感谢

thanks Gavin

问题回答

打开错误报告并告诉我们其中写了什么。 但是, 问题的一部分可能在于您需要 < code> header < em > 之前的 < em >, 您需要回音 。





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签