有没有办法告诉浏览器在下载EXE时禁用“运行”按钮?

时间:2010-09-02 16:03:04

标签: php download mime-types content-disposition

某些无限带宽类型可能会让您的用户不断下载您的产品,并不断忘记他们放置产品的位置并重新下载。但是对于稀缺的认识是智慧的开始,因为保释担保人对验尸官说,因为他带着一个两米长的麻袋带来了一周的捕获,我想拯救我们麻烦。

这是我在PHP中所做的事情

header("MIME-Version: 1.0");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: post-check=0, pre-check=0");
header("Content-type: application/octet-stream");
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . basename($filename).'"');
header("Content-Transfer-Encoding: binary");
readfile($filename);

我可以添加另一行,它会让所有浏览器神奇地混淆,认为任何操作系统都不可能对这个字节块做任何事情,除非将它置于某个安全位置,以便其主人在他或她的闲暇?

3 个答案:

答案 0 :(得分:2)

据我所知,不,没有。文件下载由浏览器处理,并根据需要提供选项。您可能能够使用Java或Flash中的自定义应用程序执行此操作,但我不是百分之百,因为浏览器在提示下载时仍可能胜过该应用程序。

或者,您可以让用户通过匿名FTP帐户下载文件,但这需要用户了解如何使用FTP客户端并在其计算机上需要FTP客户端才能显示弹出对话框。

答案 1 :(得分:2)

如果他们有用户帐户,一种解决方案就是简单地限制每个帐户允许的下载次数。另一种选择可能是将.exe放在一个zip文件中,这样它就不能简单地“运行”了......虽然浏览器可能会尝试在临时文件中显示内容。如果您尚未使用安装程序,也可以使用安装程序,并将应用程序配置为无法从浏览器“运行”,但必须正确安装。这样,图标/开始菜单条目就位,供下次使用。

答案 2 :(得分:2)

如果指定文件的mimetype,浏览器将显示它应该显示的内容。例如,pdf将提示在pdf查看器中打开或保存,图像将打开图像应用程序或另存为等。

检查出来:

$info = pathinfo($fileName); 
header('Content-Description: File Transfer');
header('Content-Type: '.Mimetypes::get($info['extension']));
header('Content-Disposition: attachment; filename=' . basename($fileName));
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($fileName));

class Mimetypes{
/**
*   static isAllowed returns true for allowed extensions and false otherwise.
*   method is static thus allowing is to be called without construction/
*   instantiation of the object.  
*
*   @param string ext the file extension 
*   @return boolean true for allowed extension, false otherwise 
*
*/
public static function isAllowed($ext){
    $allowedFiletypes = array('jpg','gif','bmp','png', 'xls', 'doc', 'docx', 'txt', 'pdf'); // These will be the types of file that will pass the validation.
    if(in_array($ext, $allowedFiletypes)){
        return true;    
    }else{
        return false;
    }
}//end isAllowed($ext) 

/**
*   method get accepts an extension string as argument
*   and returns the mimetype for this given argument 
*   if an entry exists in the map of extensions to
*   mimetypes.  
*   if the extension is not defined function will return
*   empty string. 
*
*
*/
public static function get($ext){
    $map = array(
        '323'=>'text/h323',
        'acx'=>'application/internet-property-stream',
        'ai application/postscript',
        'aif'=>'audio/x-aiff',
        'aifc'=>'audio/x-aiff',
        'aiff'=>'audio/x-aiff',
        'asf'=>'video/x-ms-asf',
        'asr'=>'video/x-ms-asf',
        'asx'=>'video/x-ms-asf',
        'au'=>'audio/basic',
        'avi'=>'video/x-msvideo',
        'axs'=>'application/olescript',
        'bas'=>'text/plain',
        'bcpio'=>'application/x-bcpio',
        'bin'=>'application/octet-stream',
        'bmp'=>'image/bmp',
        'c'=>'text/plain',
        'cat'=>'application/vnd.ms-pkiseccat',
        'cdf'=>'application/x-cdf',
        'cer'=>'application/x-x509-ca-cert',
        'class'=>'application/octet-stream',
        'clp'=>'application/x-msclip',
        'cmx'=>'image/x-cmx',
        'cod'=>'image/cis-cod',
        'cpio'=>'application/x-cpio',
        'crd'=>'application/x-mscardfile',
        'crl'=>'application/pkix-crl',
        'crt'=>'application/x-x509-ca-cert',
        'csh'=>'application/x-csh',
        'css'=>'text/css',
        'dcr'=>'application/x-director',
        'der'=>'application/x-x509-ca-cert',
        'dir'=>'application/x-director',
        'dll'=>'application/x-msdownload',
        'dms'=>'application/octet-stream',
        'doc'=>'application/msword',
        'dot'=>'application/msword',
        'dvi'=>'application/x-dvi',
        'dxr'=>'application/x-director',
        'eps'=>'application/postscript',
        'etx'=>'text/x-setext',
        'evy'=>'application/envoy',
        'exe'=>'application/octet-stream',
        'fif'=>'application/fractals',
        'flr'=>'x-world/x-vrml',
        'gif'=>'image/gif',
        'gtar'=>'application/x-gtar',
        'gz'=>'application/x-gzip',
        'h'=>'text/plain',
        'hdf'=>'application/x-hdf',
        'hlp'=>'application/winhlp',
        'hqx'=>'application/mac-binhex40',
        'hta'=>'application/hta',
        'htc'=>'text/x-component',
        'htm'=>'text/html',
        'html'=>'text/html',
        'htt'=>'text/webviewhtml',
        'ico'=>'image/x-icon',
        'ief'=>'image/ief',
        'iii'=>'application/x-iphone',
        'ins'=>'application/x-internet-signup',
        'isp'=>'application/x-internet-signup',
        'jfif'=>'image/pipeg',
        'jpe'=>'image/jpeg',
        'jpeg'=>'image/jpeg',
        'jpg'=>'image/jpeg',
        'js'=>'application/x-javascript',
        'latex'=>'application/x-latex',
        'lha'=>'application/octet-stream',
        'lsf'=>'/x-la-asf',
        'lsx'=>'video/x-la-asf',
        'lzh'=>'application/octet-stream',
        'm13'=>'application/x-msmediaview',
        'm14'=>'application/x-msmediaview',
        'm3u'=>'audio/x-mpegurl',
        'man'=>'application/x-troff-man',
        'mdb'=>'application/x-msaccess',
        'me'=>'application/x-troff-me',
        'mht'=>'message/rfc822',
        'mhtml'=>'message/rfc822',
        'mid'=>'audio/mid',
        'mny'=>'application/x-msmoney',
        'mov'=>'video/quicktime',
        'movie'=>'video/x-sgi-movie',
        'mp2'=>'video/mpeg',
        'mp3'=>'audio/mpeg',
        'mpa'=>'video/mpeg',
        'mpe'=>'video/mpeg',
        'mpeg'=>'video/mpeg',
        'mpg'=>'video/mpeg',
        'mpp'=>'application/vnd.ms-project',
        'mpv2'=>'video/mpeg',
        'ms'=>'application/x-troff-ms',
        'mvb'=>'application/x-msmediaview',
        'nws'=>'message/rfc822',
        'oda'=>'application/oda',
        'p10'=>'application/pkcs10',
        'p12'=>'application/x-pkcs12',
        'p7b'=>'application/x-pkcs7-certificates',
        'p7c'=>'application/x-pkcs7-mime',
        'p7m'=>'application/x-pkcs7-mime',
        'p7r'=>'application/x-pkcs7-certreqresp',
        'p7s'=>'application/x-pkcs7-signature',
        'pbm'=>'image/x-portable-bitmap',
        'pdf'=>'application/pdf',
        'pfx'=>'application/x-pkcs12',
        'pgm'=>'image/x-portable-graymap',
        'pko'=>'application/ynd.ms-pkipko',
        'pma'=>'application/x-perfmon',
        'pmc'=>'application/x-perfmon',
        'pml'=>'application/x-perfmon',
        'pmr'=>'application/x-perfmon',
        'pmw'=>'application/x-perfmon',
        'png'=>'image/png',
        'pnm'=>'image/x-portable-anymap',
        'pot'=>'application/vnd.ms-powerpoint',
        'ppm'=>'image/x-portable-pixmap',
        'pps'=>'application/vnd.ms-powerpoint',
        'ppt'=>'application/vnd.ms-powerpoint',
        'prf'=>'application/pics-rules',
        'ps'=>'application/postscript',
        'pub'=>'application/x-mspublisher',
        'qt'=>'video/quicktime',
        'ra'=>'audio/x-pn-realaudio',
        'ram'=>'audio/x-pn-realaudio',
        'ras'=>'image/x-cmu-raster',
        'rgb'=>'image/x-rgb',
        'rmi'=>'audio/mid',
        'roff'=>'application/x-troff',
        'rtf'=>'application/rtf',
        'rtx'=>'text/richtext',
        'scd'=>'application/x-msschedule',
        'sct'=>'text/scriptlet',
        'setpay'=>'application/set-payment-initiation',
        'setreg'=>'application/set-registration-initiation',
        'sh'=>'application/x-sh',
        'shar'=>'application/x-shar',
        'sit'=>'application/x-stuffit',
        'snd'=>'audio/basic',
        'spc'=>'application/x-pkcs7-certificates',
        'spl'=>'application/futuresplash',
        'src'=>'application/x-wais-source',
        'sst'=>'application/vnd.ms-pkicertstore',
        'stl'=>'application/vnd.ms-pkistl',
        'stm'=>'text/html',
        'svg'=>'image/svg+xml',
        'sv4cpio'=>'application/x-sv4cpio',
        'sv4crc'=>'application/x-sv4crc',
        'swf'=>'application/x-shockwave-flash',
        't'=>'application/x-troff',
        'tar'=>'application/x-tar',
        'tcl'=>'application/x-tcl',
        'tex'=>'application/x-tex',
        'texi'=>'application/x-texinfo',
        'texinfo'=>'application/x-texinfo',
        'tgz'=>'application/x-compressed',
        'tif'=>'image/tiff',
        'tiff'=>'image/tiff',
        'tr'=>'application/x-troff',
        'trm'=>'application/x-msterminal',
        'tsv'=>'text/tab-separated-values',
        'txt'=>'text/plain',
        'uls'=>'text/iuls',
        'ustar'=>'application/x-ustar',
        'vcf'=>'text/x-vcard',
        'vrml'=>'x-world/x-vrml',
        'wav'=>'audio/x-wav',
        'wcm'=>'application/vnd.ms-works',
        'wdb'=>'application/vnd.ms-works',
        'wks'=>'application/vnd.ms-works',
        'wmf'=>'application/x-msmetafile',
        'wps'=>'application/vnd.ms-works',
        'wri'=>'application/x-mswrite',
        'wrl'=>'x-world/x-vrml',
        'wrz'=>'x-world/x-vrml',
        'xaf'=>'x-world/x-vrml',
        'xbm'=>'image/x-xbitmap',
        'xla'=>'application/vnd.ms-excel',
        'xlc'=>'application/vnd.ms-excel',
        'xlm'=>'application/vnd.ms-excel',
        'xls'=>'application/vnd.ms-excel',
        'xlt'=>'application/vnd.ms-excel',
        'xlw'=>'application/vnd.ms-excel',
        'xof'=>'x-world/x-vrml',
        'xpm'=>'image/x-xpixmap',
        'xwd'=>'image/x-xwindowdump',
        'z'=>'application/x-compress',
        'zip'=>'application/zip'
    ); 

    if(array_key_exists($ext, $map)){
        return $map[$ext]; 
    }else{
        return "";
    }//end if(array_key_exists($ext, $map)) | else
}//end get($ext) 
}//end class Mimetypes