2012-05-24 3 views
0

메신저 생성 및 다운로드 PHP는 데이터베이스 테이블에서 나열된 일련의 사진을 포함하는 ZIP 파일을 생성하고 강제로 다운로드합니다.생성 및 우편 번호

<?php 
include("config.php"); 
require ("zipfile.inc.php"); 
$zipfile = new zipfile(); 
$filedata = implode("", file("zipfile.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(); 
?> 

그러나이 코드는 그냥 빈 페이지로 연결되는 것으로 보이며 아무 일도 일어나지 않습니다.

아무에게도 아이디어를 줄 수 있습니까? 귀하의 답변에 대한

zipfile.inc.php

덕분에, 또한 내가 그것을 PHP에 관해서 아무 단서와 zipfile.inc의 code.the 내용의 누군가를 elses 비트를 해결하기 위해 노력하고 있음을 언급하는 것을 잊었다 .php는 다음과 같습니다.

'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 = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //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 = "\x50\x4b\x03\x04"; 
     $fr .= "\x0a\x00"; // ver needed to extract 
     $fr .= "\x00\x00"; // gen purpose bit flag 
     $fr .= "\x00\x00"; // compression method 
     $fr .= "\x00\x00\x00\x00"; // 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 = "\x50\x4b\x01\x02"; 
     $cdrec .="\x00\x00"; // version made by 
     $cdrec .="\x0a\x00"; // version needed to extract 
     $cdrec .="\x00\x00"; // gen purpose bit flag 
     $cdrec .="\x00\x00"; // compression method 
     $cdrec .="\x00\x00\x00\x00"; // 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 = "\x00\x00\x10\x00"; 
     $ext = "\xff\xff\xff\xff"; 
     $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 = "\x50\x4b\x03\x04"; 
     $fr .= "\x14\x00"; // ver needed to extract 
     $fr .= "\x00\x00"; // gen purpose bit flag 
     $fr .= "\x08\x00"; // compression method 
     $fr .= "\x00\x00\x00\x00"; // 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 = "\x50\x4b\x01\x02"; 
     $cdrec .="\x00\x00"; // version made by 
     $cdrec .="\x14\x00"; // version needed to extract 
     $cdrec .="\x00\x00"; // gen purpose bit flag 
     $cdrec .="\x08\x00"; // compression method 
     $cdrec .="\x00\x00\x00\x00"; // 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 
      "\x00\x00";        // .zip file comment length 
    } 
} 

?> 
'code' 

많은 감사

감사 개빈

+0

Zipfile.inc.php이란 무엇입니까? –

+0

함수가 무엇인지 확인하려면 zipfile.inc.php가 필요합니다. 내가 먼저 점검 할 것은 오류 로그입니다. – Pitchinnate

+0

mysql_ * 함수 사용을 중단하십시오. 그들은 더 이상 유지되지 않습니다. 대신에'PDO' 또는'MySQLi'를 사용하십시오. – Robik

답변

0

전원을 켜고 오류에보고하고 말씀을 우리에게 말해. 그러나 문제의 일부는 앞에 표시되어야한다는 것입니다.

+0

약간 다른 문제가 발생했습니다. 이제는 zip 파일을 다운로드하고 생성 할 수있게되었지만 폴더에는 아무 것도 없으며 코드에서 사용해야하는 방법에 따라 이름이 지정되지 않습니다. 그것은 단지 spd___photos.zip으로 로딩 중입니다 –

+0

PHP의 내장 Zip 아카이브 관리자를 사용하지 않는 이유가 있습니까? 나는 그것에 대한 좋은 경험을했습니다. –

+0

정말 마지막 비트가 아니기 때문에 실제로는 완벽하게 작동합니다. 다운로드를 생성하는 스크립트는 스크립트를 활성화하는 스크립트와 별개입니다. 즉, Zip 파일을 생성하는 generate.phph를 실행하는 admin_users에서 다운로드를 누르십시오. $ slide [ip]가 링크를 통해 전달되지 않을 수 있습니까? 첫 페이지에 $ slide [ip]를 표시하면 결과가 표시되지만 zip 파일이 만들어진 두 번째 페이지에서는 그렇지 않습니다. 감사합니다. 개빈 –