I have this function whereby it allows people to download zip file but then i try to open it after downloading it, there was this error msg that says "Error reading zip".

Recommended Answers

All 9 Replies

If you really want help you should post your code, or at least the portion you feel is causing the problem. Offhand it sounds like the zip file on the server has gotten corrupted somehow.

$zipfile = new zipfile();
             $zipfile -> add_dir("files/");
             $dir = '../files';
				
             $filename = "testing.mp3";
	$pathname = "$dir/$filename";	
					
	$fr   = fopen($pathname, 'r');
	$data = fread($fr, filesize($pathname));
					
	fclose($fr);
										
	$zipfile->add_file($filedata, "files/".$filename);   
					
					

            header("Content-type: application/octet-stream");
            header("Content-disposition: attachment; filename=testing.zip");
            echo $zipfile->file();

This is the part i feel is causing the problem. i have a zipfile class which creates zip files

Have you tried:

header("Content-type: application/x-zip");

Also, you open the file and put the data into $data. Then you use the class and use the variable $filedata. Should they be the same??

Have you tried:

header("Content-type: application/x-zip");

Also, you open the file and put the data into $data. Then you use the class and use the variable $filedata. Should they be the same??

oh that, it's the same, i forget to change it because these codes are edited to protect the privacy of the codes.

i try already but cannot still error reading zip but the file was in the downloaded because i see the file size of the zip is the same as the file size of the file.

Hi

You should be using a content length header so the browser does not add \r?\n to the stream buffer...

Also your application-x-type is wrong...

if ( strstr ( strtolower ( $_SERVER['HTTP_USER_AGENT'] ), 'msie 5.5' ) )
{
	$att = '';
}
else
{
	$att = ' attachment;';
}

header ( 'Cache-control: max-age=31536000' );
header ( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
header ( 'Content-Length: ' . filesize ( $filename ) );
header ( 'Content-Type: application/x-zip-compressed; name="' . basename ( $filename ) . '"' );
header ( 'Content-Disposition:' . $att . ' filename="' . basename ( $filename ) . '"' );
header ( 'Content-Transfer-Encoding: binary' );
readfile ( $filename );

demo

so this codes are the correct one then? oh k i will try n see then thanks :cheesy:

Hi

You should be using a content length header so the browser does not add \r?\n to the stream buffer...

Also your application-x-type is wrong...

if ( strstr ( strtolower ( $_SERVER['HTTP_USER_AGENT'] ), 'msie 5.5' ) )
{
	$att = '';
}
else
{
	$att = ' attachment;';
}

header ( 'Cache-control: max-age=31536000' );
header ( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
header ( 'Content-Length: ' . filesize ( $filename ) );
header ( 'Content-Type: application/x-zip-compressed; name="' . basename ( $filename ) . '"' );
header ( 'Content-Disposition:' . $att . ' filename="' . basename ( $filename ) . '"' );
header ( 'Content-Transfer-Encoding: binary' );
readfile ( $filename );

demo

by using basename, other ppl can know what is the location of the mp3 but for security purposes, i dun want ppl to know the location of the mp3

i did not use zip file anymore then can work already. i am able to download the file successfully. the next problem arises up. :sad:

In the first place, the mp3 file has a ID3 tag. after it has been downloaded, the ID3 tag is deleted. I figure it must be the codinng though because when i download it straight from server through ftp. Everything is alright. i myself really do not know what is wrong. :?: :?:

This is the part of code which i think might be the problem

$currentdir = '../mp3_files';
$trackname = $trackdb->retrieveTrackName($track_oid);
$filename = "$trackname.mp3";
$pathname = "$currentdir/$filename";

$fr = fopen($pathname, 'r');
$filedata = fread($fr, filesize($pathname));

//fclose($fr);


//$zipfile->add_file($filedata,$filename);

header ( 'Content-Length: ' . filesize ( $pathname ) );
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=$filename");
header ( 'Content-Transfer-Encoding: binary' );
readfile($pathname);

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.