如何使用PHP提供现有Excel的下载?

如何使用PHP提供现有Excel的下载?,php,Php,我的服务器上有一个生成的xls文件,我想将其推送到客户端下载,但似乎无法使其工作。以下是我到目前为止的情况: $xlsFile = 'test.xls'; header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download");; header("Content-Dispos

我的服务器上有一个生成的xls文件,我想将其推送到客户端下载,但似乎无法使其工作。以下是我到目前为止的情况:

$xlsFile = 'test.xls';

header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=$xlsFile"); 
header("Content-Transfer-Encoding: binary ");  
exit();

我的excel文件是正确的,如果我从服务器打开它,它可以打开,但是我如何才能将此文件推送到客户端下载?

请参阅这篇关于正确MIME类型的旧文章,以便与您的上载一起发送:


请参阅这篇关于上传时要发送的正确MIME类型的旧文章:


您的“内容类型”标题似乎做得过火了。哦,您需要在退出()之前发送文件。你所需要的只是

header("Content-Type: application/vnd.ms-excel");
header('Content-Disposition: attachment; filename="' . $xlsFile . '"');
readfile($xlsFile);
exit();

你似乎用“内容类型”标题做得太过分了。哦,您需要在退出()之前发送文件。你所需要的只是

header("Content-Type: application/vnd.ms-excel");
header('Content-Disposition: attachment; filename="' . $xlsFile . '"');
readfile($xlsFile);
exit();

您只需要再添加一行

$xlsFile = 'test.xls';

header("Content-Type: application/vnd.ms-excelapplication/vnd.ms-excel");
header("Content-Disposition: attachment;filename='$xlsFile'"); 
header("Content-Transfer-Encoding: binary ");  
echo file_get_contents($xlsFile);
exit();

您只需要再添加一行

$xlsFile = 'test.xls';

header("Content-Type: application/vnd.ms-excelapplication/vnd.ms-excel");
header("Content-Disposition: attachment;filename='$xlsFile'"); 
header("Content-Transfer-Encoding: binary ");  
echo file_get_contents($xlsFile);
exit();
示例函数

function file_download($filename, $mimetype='application/octet-stream') {
  if (file_exists($filename)) {
// send headers
    header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
// type
    header('Content-Type: ' . $mimetype);
// date of modified       
    header('Last-Modified: ' . gmdate('r', filemtime($filename)));
    header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename)));
// file size
    header('Content-Length: ' . (filesize($filename)));
    header('Connection: close');
    header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
// send file
    echo file_get_contents($filename);
  } else {
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    header('Status: 404 Not Found');
  }
  exit;
}
示例函数

function file_download($filename, $mimetype='application/octet-stream') {
  if (file_exists($filename)) {
// send headers
    header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
// type
    header('Content-Type: ' . $mimetype);
// date of modified       
    header('Last-Modified: ' . gmdate('r', filemtime($filename)));
    header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename)));
// file size
    header('Content-Length: ' . (filesize($filename)));
    header('Connection: close');
    header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
// send file
    echo file_get_contents($filename);
  } else {
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    header('Status: 404 Not Found');
  }
  exit;
}

这些内容类型标题是错误的。你只需要一个,而这三个都不是excel的正确mime类型。谢谢你指出!这些内容类型标题是错误的。你只需要一个,而这三个都不是excel的正确mime类型。谢谢你指出!你想不想把作者的名字写下来?对不起。我来自俄罗斯,硬英语:(Сааааааааааааааа-ааааааааааааааааа多种内容类型的意义是什么?就像说“我是一辆汽车,我是一只长颈鹿,我是一根口香糖”。除非你在做多部分mime,否则http请求-回复只能有一个mime类型。混合内容类型有什么意义?就像说“我是一辆车,我是一只长颈鹿,我是一根口香糖”。除非你在做多部分mime,否则http请求-回复只能有一个mime类型。