This is the code of one of my php files. When this php file is accessed it forces a download of a file hosted on a remote server. So when 'http://mywebsite.com/myfile.php' is accessed 'http://remotewebsite.com/remotefile.exe' will start downloading. So my question is whether the file is transferred through my server to the user or is it directly transferred to the user? Will my server bandwidth be used in this transfer? function output_file($file, $name, $mime_type='') { /* This function takes a path to a file to output ($file), the filename that the browser will see ($name) and the MIME type of the file ($mime_type, optional). If you want to do something on download abort/finish, register_shutdown_function('function_name'); */ if(!is_readable($file)) { $size = remote_filesize($file); } else { $size = filesize($file); } $name = rawurldecode($name); /* Figure out the MIME type (if not specified) */ $known_mime_types=array( "pdf" => "application/pdf", "txt" => "text/plain", "html" => "text/html", "htm" => "text/html", "exe" => "application/octet-stream", "zip" => "application/zip", "doc" => "application/msword", "xls" => "application/vnd.ms-excel", "ppt" => "application/vnd.ms-powerpoint", "gif" => "image/gif", "png" => "image/png", "jpeg"=> "image/jpg", "jpg" => "image/jpg", "php" => "text/plain" ); if($mime_type==''){ $file_extension = strtolower(substr(strrchr($file,"."),1)); if(array_key_exists($file_extension, $known_mime_types)){ $mime_type=$known_mime_types[$file_extension]; } else { $mime_type="application/force-download"; }; }; @ob_end_clean(); //turn off output buffering to decrease cpu usage // required for IE, otherwise Content-Disposition may be ignored if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off'); header('Content-Type: ' . $mime_type); header('Content-Disposition: attachment; filename="'.$name.'"'); header("Content-Transfer-Encoding: binary"); header('Accept-Ranges: bytes'); /* The three lines below basically make the download non-cacheable */ header("Cache-control: private"); header('Pragma: private'); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // multipart-download and download resuming support if(isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); list($range) = explode(",",$range,2); list($range, $range_end) = explode("-", $range); $range=intval($range); if(!$range_end) { $range_end=$size-1; } else { $range_end=intval($range_end); } $new_length = $range_end-$range+1; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range-$range_end/$size"); } else { $new_length=$size; header("Content-Length: ".$size); } /* output the file itself */ $chunksize = 1*(1024*1024); //you may want to change this $bytes_send = 0; if ($file = fopen($file, 'r')) { if(isset($_SERVER['HTTP_RANGE'])) fseek($file, $range); while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length) ) { $buffer = fread($file, $chunksize); print($buffer); //echo($buffer); // is also possible flush(); $bytes_send += strlen($buffer); } fclose($file); } else die('Error - can not open file.'); die(); } PHP:
your server will use the double bandwidth of the filesize it fetches the file from the remote and hands it over to the enduser.
So i did a little experiment. I saved this php file on my computer on my localhost and I made it to force downloaded a zip file from my website. I put the force download link in my download manager and started the download. Once the the download was started I turned off my localhost so that the php file was no longer accessible and the download still continued. But when I paused the download and started it again it failed. So I think the php file is only used to connect to the actual download file. Once the connection is established the file is directly downloaded. So what do you guys think? Is there anyone who knows exactly what happens?
Till i know it doesnt use ur bandwith because i used to use php download manager scripts which i suppose had the url option and it used Force downloads my bandwith wasnt used
whatever you say guys, the above posted script reads the file from a remote location and hands it over to the enduser. everyone with half a brain will realize that this will first take the file´s size as bandwidth to get the file to the "yourserver" from the "remoteserver" and then take again the file´s size as bandwidth from the "yourserver" to the user.