note 65404 added to function.header

From: Date: Sun, 30 Apr 2006 09:19:00 +0000
Subject: note 65404 added to function.header
Groups: php.notes 
Request: Send a blank email to php-notes+get-110159@lists.php.net to get a copy of this message
at first one advise to Jon's post (09-Mar-2006 01:38) the "function downloadFile ($file, $mimetype)" can NOT resume downloads. the function sent every time the same file just with different header informations. this function will work <?php function output_file($file,$name) { //do something on download abort/finish //register_shutdown_function( 'function_name' ); if(!file_exists($file)) die('file not exist!'); $size = filesize($file); $name = rawurldecode($name); if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) $UserBrowser = "Opera"; elseif (ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) $UserBrowser = "IE"; else $UserBrowser = ''; /// important for download im most browser $mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 'application/octetstream' : 'application/octet-stream'; @ob_end_clean(); /// decrease cpu usage extreme header('Content-Type: ' . $mime_type); header('Content-Disposition: attachment; filename="'.$name.'"'); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header('Accept-Ranges: bytes'); header("Cache-control: private"); header('Pragma: private'); ///// multipart-download and resume-download if(isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=",$_SERVER['HTTP_RANGE']); str_replace($range, "-", $range); $size2 = $size-1; $new_length = $size-$range; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range$size2/$size"); } else { $size2=$size-1; header("Content-Length: ".$size); } $chunksize = 1*(1024*1024); $this->bytes_send = 0; if ($file = fopen($file, 'r')) { if(isset($_SERVER['HTTP_RANGE'])) fseek($file, $range); while(!feof($file) and (connection_status()==0)) { $buffer = fread($file, $chunksize); print($buffer);//echo($buffer); // is also possible flush(); $this->bytes_send += strlen($buffer); //sleep(1);//// decrease download speed } fclose($file); } else die('error can not open file'); if(isset($new_length)) $size = $new_length; die(); } ?> http://macosbrain.ath.cx/wordpress/2006/04/30/ for some comments in german. ---- Server IP: 66.163.161.117 Probable Submitter: 84.189.226.144 ---- X-Spam-Status: No, hits=3.1 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER autolearn=no version=2.64 ---- Manual Page -- http://www.php.net/manual/en/function.header.php Edit -- http://master.php.net/note/edit/65404 Del: integrated -- http://master.php.net/note/delete/65404/integrated Del: useless -- http://master.php.net/note/delete/65404/useless Del: bad code -- http://master.php.net/note/delete/65404/bad+code Del: spam -- http://master.php.net/note/delete/65404/spam Del: non-english -- http://master.php.net/note/delete/65404/non-english Del: in docs -- http://master.php.net/note/delete/65404/in+docs Del: other reasons-- http://master.php.net/note/delete/65404 Reject -- http://master.php.net/note/reject/65404 Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#110159) next »