我有一个脚本从$ _GET ['key']获取一个键,查找数据库中的位置并使用readfile和一些标题来提供下载供使用.这适用于Firefox而不是IE8,无法在另一个IE上测试它.我在IE中收到以下错误:"Internet Explorer无法从www.example.com下载download.php".好像它正在尝试下载PHP脚本.
$the_query = "SELECT * FROM `files` WHERE `user_id`=" . $_SESSION['user_id'] . " AND `key`='" . $key . "'";
$result = mysql_query($the_query);
$row = mysql_fetch_array($result);
$file = '/var/www/vhosts/www.example.com/httpsdocs/uploads/' . $row['id'] . '/' . $row['file'];
header("Content-type: application/octet-stream");
header("Content-length: ".filesize($file));
header('Content-Description: File Transfer');
header("Cache-control: private");
header('Content-Disposition: attachment; filename=' . rawurlencode(basename($file)));
readfile($file);
Run Code Online (Sandbox Code Playgroud)
Seq*_*com 28
要解决此错误:"Internet Explorer无法从www.example.com下载download.php",请将这些标头添加到您的脚本中:
header("Pragma: ");
header("Cache-Control: ");
该代码将从标头中删除Cache-Control,这会导致下载问题.
上面的代码应该添加在文件的顶部.
它适用于我们.
通过使用php.net的第一个示例来管理这个工作
http://us3.php.net/manual/en/function.readfile.php
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;