2012-09-26 27 views
2

可能重复:
Getting around Chrome's Malicious File Warning保持/放弃谷歌浏览器PHP下载

代码:

/* 
    .... Code to authenticate to my mysql and verify that we are an legal user. 
    */ 
    $type = mysql_result($AllResult, 0, 'file_type'); 
    $size = mysql_result($AllResult, 0, 'file_size'); 
    $name = mysql_result($AllResult, 0, 'file_name'); 
    $data = mysql_result($AllResult, 0, 'file_content'); 

    session_write_close(); 
    ob_clean(); 
    mysql_close(); 

    header("Content-Transfer-Encoding: binary"); 
    header("Content-type: $type"); 
    header("Content-length: $size"); 
    header("Content-Disposition: attachment;filename=$name"); 
    header("Content-Description: PHP Generated Data"); 
    echo "$data"; 

我做了一个PHP代码从一个LONGBLOB下载文件我的数据库并将其保存到用户计算机。此代码在Opera和Firefox上运行得非常完美。然而,在IE和谷歌Chrome - 如果程序是不是有一个微软的SmartScreen许可证 - 这将PROMT对话“......名字......不常用下载,可能会损害您的计算机”

插图:

How it looks without license

然而,我想知道我是否可以更改标题,或者如果可以获取对话框“此文件可能会损害您的计算机。你想保留.....反正吗?' [KEEP] [DISCARD]

什么样的对话我讲的一个例证: Discard/Keep

更新:我试图用同样的结果

同时使用在线和依恋我的内容处置
+2

请不要使用'mysql_ *'函数编写新代码。他们不再维护,社区已经开始[弃用程序](http://goo.gl/KJveJ)。查看[*红色框*](http://goo.gl/GPmFd)?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定哪些,[这篇文章](http://goo.gl/3gqF9)会帮助你。如果你选择PDO,[这里是很好的教程](http://goo.gl/vFWnC)。 –

回答

0

在从Chrome年底至少会有没有办法禁用此通知。您看到“此类文件可能会损害您的计算机”,因为您的下载文件的扩展名是可执行文件(即.exe,.dll等)。微软可能也是如此。我知道,微软的系统将退出抱怨,如果该文件是“常用下载”(即他们看到很多人 下载同一文件)。如果有一个头可以绕过这个通知,那么对用户来说就是不利的。

您可以通过确保您的下载名称具有不可执行的扩展名(如.txt,.html等)来避免这种情况,因此通常不会被浏览器供应商视为高优先级威胁。

+0

然而,感谢您的答案,通过直接引用文件'http://www.somewebsite/somefile.exe'它将改变抱怨保持/丢弃。有没有更安全的方法来做到这一点,而不是直接接受文件? – dotTutorials

+0

我指的是该文件的名称是一套在你的代码的行头中的标题(“内容处置:附件;文件名= $名称”)。没有必要直接引用任何文件。你现在正在为脚本输出设置$ name变量? –

+0

$ name变量是从数据库加载的。它最初是从$ _FILES设置[“文件”] [“名称”] – dotTutorials