Public feed #726952

Unnamed

public php v1 · immutable
Raw Edit
·published 2007-10-05 17:01 UTC
rendered paste body
<?phpfunction readfile_chunked($filename,$retbytes=true){	$chunksize = 1*(1024*1024); // how many bytes per chunk	$buffer = '';	$cnt =0;	// $handle = fopen($filename, 'rb');	$handle = fopen($filename, 'rb');	stream_set_blocking($handle, 0);	if ($handle === false){		return false;	}	while (!feof($handle)){		$buffer = fread($handle, $chunksize);		echo $buffer;		if ($retbytes){			$cnt += strlen($buffer);		}	}	$status = fclose($handle);	if ($retbytes && $status){		return $cnt; // return num. bytes delivered like readfile() does.	}	return $status;}function dl_file($file){	//First, see if the file exists	if (!is_file($file)) { die("<b>404 File not found!</b>"); }	//Gather relevent info about file	$len = filesize($file);	$filename = basename($file);	$file_extension = strtolower(substr(strrchr($filename,"."),1));		//This will set the Content-Type to the appropriate setting for the file	switch( $file_extension ) {		case "mp3": $ctype="audio/mpeg"; break;		case "wav": $ctype="audio/x-wav"; break;		case "wma": $ctype="audio/x-ms-wma"; break;		case "ra": $ctype="audio/vnd.rn-realaudio"; break;		case "ogg" : $ctype="application/ogg"; break;		case "zip": $ctype="application/zip"; break;		case "rar": $ctype="application/x-rar-compressed"; break;		case "exe": $ctype="application/octet-stream"; break;		case "mpeg":		case "mpg":		case "mpe": $ctype="video/mpeg"; break;		case "mp4": $ctype="video/mp4"; break;		case "mov": $ctype="video/quicktime"; break;		case "wmv": $ctype="video/x-ms-wmv"; break;		case "avi": $ctype="video/x-msvideo"; break;		//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)		case "php":		case "htm":		case "html":		case "txt":		default: die("<b>Cannot be used for ". $file_extension ." files!</b>");	}	//Begin writing headers	header("Pragma: public");	header("Expires: 0");	header("Cache-Control: must-revalidate, post-check=0, pre-check=0");	header("Cache-Control: public");	header("Content-Description: File Transfer");	//Use the switch-generated Content-Type	header("Content-Type: $ctype");	//Force the download	$header="Content-Disposition: attachment; filename=".$filename.";";	header($header);	header("Content-Transfer-Encoding: binary");	header("Content-Length: ".$len);		readfile_chunked($file);	//@readfile($file);}?>