[FX.php List] [OFF] connection_aborted on IIS
Dale Bengston
dbengston at tds.net
Mon Dec 14 12:11:23 MST 2009
Hi Frank,
Here's how I force a download x-plat. Content type doesn't matter. You want the browser to think it's not something it can load in a browser window.
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='. basename($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($file));
ob_clean();
flush();
readfile($file);
exit;
I have not tried it on .exe files. That might be a security thing that IIS is preventing.
Dale
On Dec 14, 2009, at 9:38 AM, Someone wrote:
> Hi,
> Does any one know if connection_aborted function works on IIS (Microsoft-IIS/7.0) / Windows Server 2008
>
> I'm trying to do a force down a file (exe) and record if download was completed
>
> It works on Apache/ OS X
>
> Thanks
> Frank
>
> Here's the script
> ---------------------------------------------------
> $filename = $_GET['file'];
>
> // required for IE, otherwise Content-disposition is ignored
> if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');
>
> $file_extension = strtolower(substr(strrchr($filename,"."),1));
>
> if( $filename == "" ) {
> //echo "<html><title>eLouai's Download Script</title><body>ERROR: download file NOT SPECIFIED. USE force-download.php?file=filepath</body></html>";
> exit;
> } elseif ( ! file_exists( $filename ) ) {
> //echo "<html><title>eLouai's Download Script</title><body>ERROR: File not found. USE force-download.php?file=filepath</body></html>";
> exit;
> };
> switch( $file_extension )
> {
> case "pdf": $ctype="application/pdf"; break;
> case "exe": $ctype="application/octet-stream"; break;
> case "zip": $ctype="application/zip"; break;
> case "doc": $ctype="application/msword"; break;
> case "xls": $ctype="application/vnd.ms-excel"; break;
> case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
> case "gif": $ctype="image/gif"; break;
> case "png": $ctype="image/png"; break;
> case "jpeg":
> case "jpg": $ctype="image/jpg"; break;
> default: $ctype="application/force-download";
> }
>
> header("Pragma: public"); // required
> header("Expires: 0");
> header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
> header("Cache-Control: private",false); // required for certain browsers
> header("Content-Type: $ctype");
> // change, added quotes to allow spaces in filenames, by Rajkumar Singh
> header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
> header("Content-Transfer-Encoding: binary");
> header("Content-Length: ".filesize($filename));
>
> $bytes_send = 0;
> $size = filesize($filename);
> $file = fopen($filename,"rb");
> if(isset($_SERVER['HTTP_RANGE'])) fseek($file, $range);
> while(!feof($file) ){ // if we haven't got to the End Of File
> $buffer = fread($file, 1024*8);
> print($buffer);//read 8k from the file and send to the user
> flush();//force the previous line to send its info
> $bytes_send += strlen($buffer);
> if (connection_aborted()){ //check the connection, if it has ended...
> fclose($file);//close the file
> die(); //kill the script
> }
> }
> if( connection_aborted() ) die();
>
> fclose($file);//close the file
>
> if( $size == $bytes_send){
> // record download was completed
> }
> exit;
> ---------------------------------------------------
> _______________________________________________
> FX.php_List mailing list
> FX.php_List at mail.iviking.org
> http://www.iviking.org/mailman/listinfo/fx.php_list
More information about the FX.php_List
mailing list