Jump to content

File Download - Broke in IE only


Stooney

Recommended Posts

The following code works fine when using chrome or firefox, but fails with IE.

Error: Requested site is either unavailable or cannot be found.

 

Question: Does anyone see anything here that is a known bug with IE that I don't know about?

 

public function download(){
	if($this->validateFile()){
		if(!headers_sent()){
			header('Content-type: '.$this->getType());
			header('Content-Disposition: attachment; filename="'.$this->name.'"');
			readfile($this->file);
		} else{
			echo 'Headers have already been sent and are preventing the file download from taking place.';
		}
		return true;
	}
	return false;
}

//I felt this function might be relevant to the issue.  I know, it's kind of a ghetto function, I'll improve on it some other time though.

private function getType(){
	$types=array(		'txt'	=>	'text/plain', 
					'mp3'	=>	'audio/x-mp3', 
					'jpg'	=>	'image/jpeg', 
					'jpeg'	=>	'image/jpeg', 
					'gif'	=>	'image/gif', 
					'png'	=>	'image/png', 
					'doc'	=>	'application/msword', 
					'swf'	=>	'application/x-shockwave-flash', 
					'flv'	=>	'video/flv', 
					'mpg'	=>	'video/mpeg', 
					'mpeg'	=>	'video/mpeg', 
					'avi'	=>	'video/x-msvideo', 
					'rtf'	=>	'application/rtf', 
					'pdf'	=>	'application/pdf', 
					'zip'	=>	'application/zip', 
					'exe'	=>	'application/octet-stream', 
					'xls'	=>	'application/msexcel', 
					'xlsxl'	=>	'application/msexcel');
	if(!$types[$this->getExt()]==''){
		return $types[$this->getExt()];
	}
	return 'application/octet-stream';
}

 

Link to comment
https://forums.phpfreaks.com/topic/232607-file-download-broke-in-ie-only/
Share on other sites

  • 2 months later...

For future reference to others, the following fixed the issue for me:

 

<?php
header('Content-Description: File Transfer');
header('Content-type: '.$this->getType());
header('Content-Disposition: attachment; filename='.basename($this->file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header("Content-Length: " . filesize($this->file));
ob_clean();
flush();
?>

Archived

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

×
×
  • Create New...

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.