0

如何使用 php 动态更改下载的文件名?此 Excel 表是使用 Javascript 从 HTML 表转换而来的。现在我想在每次下载时动态更改文件名。我使用input类型按钮作为下载按钮。


编者注: 根据评论,这个问题可以改写如下。

我希望人们能够从服务器下载 Excel 表格。如何强制下载文件并根据月份设置文件名?当我下载文件时,它显示“download.xls”

No code provided

看评论:

4

3 回答 3

2

你写

此 Excel 表是使用 Javascript 从 HTML 表转换而来的。

这意味着 HTML 表格在客户端已经可以作为 EXCEL 文件使用。

如果是这种情况,则没有理由将转换后的 EXCEL 文件从客户端推送回服务器,以便客户端可以再次从服务器下载它。那没有意义,并且在无用的循环上浪费带宽。

换句话说:当 EXCEL 文件已经驻留在客户端的 Javascript 内存中时,您需要做的就是将您的(Javascript 转换的)EXCEL 文件存储为基于 Javascript 之类的文件名Math.random()。至于一种简单的文件保存方法,HTML5 的文件保存功能(作为许多方法之一)可能会成为您最好的朋友。

想一想:如果您坐在家里的沙发上,您不会开车上班只是为了能够开车回家并从家里厨房的冰箱里拿啤酒,对吗?对,你就呆在家里,走进厨房去拿啤酒。;)

同样在这里:如果您将其转换为客户端并且客户端将文件保存在他的计算机内存中,让他将其保存到他的磁盘上。不要强迫他上传整个文件,以便他可以下载它……正如所说:JavascriptMath.random()使您能够生成一个随机数,您可以使用它来创建随机文件名。

编辑

基于OP在评论中的问题

但是如何根据月份以动态文件名保存这些下载的文件。

要根据月份创建文件名,您可以像这样使用 Javascript 的日期:

var now = new Date(); 
var month = now.getMonth();

如果您正在寻找有关如何在客户端存储文件的提示,您可能需要深入研究:

如果您想在服务器端处理它并使用 PHP 将文件推送到客户端,并使用您自己的基于 的文件名year-month-day,您可以这样:

<?php
$realname = './data.xls';
if (file_exists($realname )) 
{
    $randname = 'YourExcelFilename'.gmdate('Y-m-d').'.xls';
    header('Content-type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment; filename='.$randname);
    header('Content-Length: '.filesize($realname));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    ob_clean();
    flush();
    readfile($file);
}
exit();
?>

编辑 2 :由于@Herbert 的评论,通过删除 2 个不必要的标题更正了上面的示例)

如果您想要更多替代解决方案,您可能需要检查我在第一条评论中链接的两个问题的答案,因为您的问题可能与这些问题重复

于 2013-07-26T08:35:47.917 回答
2

将生成的文件名应用于 Content-Disposition 标头。

header("Content-Disposition: attachment; filename=\"$random_filename\"");
header('Content-type: application/vnd.ms-excel');
readfile($actual_filename);
于 2013-07-26T08:37:39.503 回答
1

您可以使用 PHP 的重命名函数http://php.net/manual/en/function.rename.php重命名服务器上的文件

于 2013-07-26T08:24:28.750 回答