0

所以我通读了每一个 IE 下载脚本错误,并尝试了几乎所有的解决方案。这是我从这里得到的最终代码,但它仍然不能解决我的问题。

我的链接是这样的:http ://www.example.com/download.php?file=example.html

我的下载脚本适用于我尝试过的每个浏览器。但是,当我在新机器上测试 IE8 或清除缓存时,我第一次尝试下载时得到:“IE 无法从example.com...”。

现在,如果我再次按 Enter 键,文件下载将完美运行。没有问题,文件已找到并可下载。但是,如果我清除缓存或在实验室的另一台机器上尝试使用 IE8,我之前没有这样做过,它会在第一次再次抛出错误。就是第一次,以后就好了。我正在扯头发,请帮忙。这是我的代码...

//ini_set('error_reporting', E_ALL);
//ini_set('display_errors', 1);
set_time_limit(0);

$filepath = '/var/www/html/securitycoverage.com/scportal/redirect/www.securitycoverage.com/main/pages/';

$filename = $filepath.$_GET['file'];

if (!is_file($filename)) {
  die('The file appears to be invalid.');
}

$filepath = str_replace('\\', '/', realpath($filename));
$filesize = filesize($filepath);
$filename = substr(strrchr('/'.$filepath, '/'), 1);
$extension = strtolower(substr(strrchr($filepath, '.'), 1));

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.sprintf('%d', $filesize));
header('Expires: 0');

// check for IE only headers
if (isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)) {
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
} else {
  header('Pragma: no-cache');
}

$handle = fopen($filepath, 'rb');
fpassthru($handle);
fclose($handle);
4

1 回答 1

2

您的代码中有错误。利用

$mime = array('application/octet-stream');
header('Content-Type: '.$mime[0]);

或者

header('Content-Type: application/octet-stream');
于 2013-08-06T14:08:04.237 回答