Jump to content

Archived

This topic is now archived and is closed to further replies.

spyder

Zip and download.

Recommended Posts

Hello, I adminstrate a site which offers mp3 albums to a community.I am pretty new with php and I needed a small code which would convert all mp3 files in a directory to a .zip archive and display a download link to the archive. Also, once downloaded it deletes the zip archive.

Share this post


Link to post
Share on other sites
Might take a look here...

http://www.phpclasses.org/browse/package/2322.html

Lite...

Share this post


Link to post
Share on other sites
Thanks for the script but there is a little bug in it. As I run the test.php in my browser it gives me the following error..

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/punjabio/public_html/music/a/zip.php on line 11

I didn't modify the zip.php at all. It's just the way the author wrote it from the link that you had given me.


[code]
<?php

/**
* Class to dynamically create a zip file (archive)
*
* @author Rochak Chauhan
*/

class createZip  { 

public $compressedData = array();
public $centralDirectory = array(); // central directory 
public $endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
public $oldOffset = 0;

/**
* Function to create the directory where the file(s) will be unzipped
*
* @param $directoryName string
*
*/

public function addDirectory($directoryName) {
$directoryName = str_replace("\\", "/", $directoryName); 

$feedArrayRow = "\x50\x4b\x03\x04";
$feedArrayRow .= "\x0a\x00";   
$feedArrayRow .= "\x00\x00";   
$feedArrayRow .= "\x00\x00";   
$feedArrayRow .= "\x00\x00\x00\x00";

$feedArrayRow .= pack("V",0);
$feedArrayRow .= pack("V",0);
$feedArrayRow .= pack("V",0);
$feedArrayRow .= pack("v", strlen($directoryName) );
$feedArrayRow .= pack("v", 0 );
$feedArrayRow .= $directoryName; 

$feedArrayRow .= pack("V",0);
$feedArrayRow .= pack("V",0);
$feedArrayRow .= pack("V",0);

$this -> compressedData[] = $feedArrayRow;

$newOffset = strlen(implode("", $this->compressedData));

$addCentralRecord = "\x50\x4b\x01\x02";
$addCentralRecord .="\x00\x00";   
$addCentralRecord .="\x0a\x00";   
$addCentralRecord .="\x00\x00";   
$addCentralRecord .="\x00\x00";   
$addCentralRecord .="\x00\x00\x00\x00";
$addCentralRecord .= pack("V",0);
$addCentralRecord .= pack("V",0);
$addCentralRecord .= pack("V",0);
$addCentralRecord .= pack("v", strlen($directoryName) );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$ext = "\x00\x00\x10\x00";
$ext = "\xff\xff\xff\xff"; 
$addCentralRecord .= pack("V", 16 );

$addCentralRecord .= pack("V", $this -> oldOffset );
$this -> oldOffset = $newOffset;

$addCentralRecord .= $directoryName; 

$this -> centralDirectory[] = $addCentralRecord; 
}

/**
* Function to add file(s) to the specified directory in the archive
*
* @param $directoryName string
*
*/

public function addFile($data, $directoryName)  {

$directoryName = str_replace("\\", "/", $directoryName); 

$feedArrayRow = "\x50\x4b\x03\x04";
$feedArrayRow .= "\x14\x00";   
$feedArrayRow .= "\x00\x00";   
$feedArrayRow .= "\x08\x00";   
$feedArrayRow .= "\x00\x00\x00\x00";

$uncompressedLength = strlen($data); 
$compression = crc32($data); 
$gzCompressedData = gzcompress($data); 
$gzCompressedData = substr( substr($gzCompressedData, 0, strlen($gzCompressedData) - 4), 2);
$compressedLength = strlen($gzCompressedData); 
$feedArrayRow .= pack("V",$compression);
$feedArrayRow .= pack("V",$compressedLength);
$feedArrayRow .= pack("V",$uncompressedLength);
$feedArrayRow .= pack("v", strlen($directoryName) );
$feedArrayRow .= pack("v", 0 );
$feedArrayRow .= $directoryName; 

$feedArrayRow .= $gzCompressedData; 

$feedArrayRow .= pack("V",$compression);
$feedArrayRow .= pack("V",$compressedLength);
$feedArrayRow .= pack("V",$uncompressedLength);

$this -> compressedData[] = $feedArrayRow;

$newOffset = strlen(implode("", $this->compressedData));

$addCentralRecord = "\x50\x4b\x01\x02";
$addCentralRecord .="\x00\x00";   
$addCentralRecord .="\x14\x00";   
$addCentralRecord .="\x00\x00";   
$addCentralRecord .="\x08\x00";   
$addCentralRecord .="\x00\x00\x00\x00";
$addCentralRecord .= pack("V",$compression);
$addCentralRecord .= pack("V",$compressedLength);
$addCentralRecord .= pack("V",$uncompressedLength);
$addCentralRecord .= pack("v", strlen($directoryName) );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("V", 32 );

$addCentralRecord .= pack("V", $this -> oldOffset );
$this -> oldOffset = $newOffset;

$addCentralRecord .= $directoryName; 

$this -> centralDirectory[] = $addCentralRecord; 
}

/**
* Fucntion to return the zip file
*
* @return zipfile (archive)
*/

public function getZippedfile() {

$data = implode("", $this -> compressedData); 
$controlDirectory = implode("", $this -> centralDirectory); 

return 
$data. 
$controlDirectory. 
$this -> endOfCentralDirectory. 
pack("v", sizeof($this -> centralDirectory)).   
pack("v", sizeof($this -> centralDirectory)).   
pack("V", strlen($controlDirectory)).           
pack("V", strlen($data)).               
"\x00\x00";                           
}

/**
*
* Function to force the download of the archive as soon as it is created
*
* @param archiveName string - name of the created archive file
*/

public function forceDownload($archiveName) {
$headerInfo = '';

if(ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}

// Security checks
if( $archiveName == "" ) {
echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> The download file was NOT SPECIFIED.</body></html>";
exit;
}
elseif ( ! file_exists( $archiveName ) ) {
echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> File not found.</body></html>";
exit;
}

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=".basename($archiveName).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($archiveName));
readfile("$archiveName");

}

}
?>

[/code]

Share this post


Link to post
Share on other sites

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.