Php 重命名要动态下载的pdf文件

Php 重命名要动态下载的pdf文件,php,file,rename,Php,File,Rename,给定:服务器上所有上传的pdf文件都带有时间戳前缀。稍后用户可以再次下载这些文件。这些(丑陋的)文件名在服务器上永远不会再更改 问:当我选择下载PDF文件时,文件名看起来既难看又冗长。如何将这个名称更改为合理的名称,这样当用户下载这个文件时,这个名称就不会显得奇怪了 由于无法重命名原始文件,我是否需要制作副本?对于每个可下载的文件来说,这不是额外的开销吗?显然,删除复制的文件将是另一个额外的步骤 在客户端完全下载文件后,是否可以重命名文件 你们有什么建议吗?类似这样的建议: <?php /

给定:服务器上所有上传的pdf文件都带有时间戳前缀。稍后用户可以再次下载这些文件。这些(丑陋的)文件名在服务器上永远不会再更改

问:当我选择下载PDF文件时,文件名看起来既难看又冗长。如何将这个名称更改为合理的名称,这样当用户下载这个文件时,这个名称就不会显得奇怪了

由于无法重命名原始文件,我是否需要制作副本?对于每个可下载的文件来说,这不是额外的开销吗?显然,删除复制的文件将是另一个额外的步骤

在客户端完全下载文件后,是否可以重命名文件

你们有什么建议吗?

类似这样的建议:

<?php
// We'll be outputting a PDF  
header('Content-type: application/pdf');

// It will be called downloaded.pdf  
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf  
readfile('original.pdf');
?> 

服务内容的文件名在HTTP头中定义。查看(以及注释)以了解更多信息。

您需要在
内容配置
标题中设置所需的文件名:

$name = 'desiredname.pdf';
header('Content-Disposition: attachment;filename="' . $name . '"');

但不幸的是,雷德蒙德的一个团队开发的某个网络浏览器不会接受这一点。如果您想让它也在该浏览器中工作,那么您需要附加与请求路径最后一部分完全相同的文件名。例如:
http://example.com/pdf/desiredname.pdf

不久前我也在做类似的事情,通过php提供文件(在我的例子中,不是重命名文件,而是检查下载文件的人是否登录并允许查看这些文件)。我发现pdf下载在IE中不起作用,除非我还添加了以下标题:

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');

我不知道为什么。尝试一下,看看会发生什么。

我需要在最近的一个项目中这样做,对如何实现有点困惑,但在看到克劳斯的答案后不久就找到了答案。进一步阐述克劳斯的回应:

1) 创建一个名为“process.php”的文件。修改Klaus的代码,使其接受两个参数:原始文件名和新名称。My process.php看起来像:

<?php
$file = $_GET['file'];
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename='.$_GET['newFile']);
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

2) 在面向用户的页面上创建指向处理器脚本的链接:

<a href="process.php?file=OriginalFile.pdf&newFile=MyRenamedFile.pdf">DOWNLOAD ME</a>


内容类型
应为
内容类型
。@jensgram:不区分大小写。@klausbyskov:请参阅下面BalusC的评论。据他说这对IE不起作用?我也找到了这条线useful@BalusC:您似乎是对的:)我认为从技术上讲,filename参数不应该用引号括起来。如果名称中不包含空格或有趣的字符,请不要用引号括起来。@BalusC:这与此类似,非常有用。谢谢。如果我的文件放在“myFiles”目录中,我如何在这里设置路径?我有点困惑。你能解释一下吗?我发现了。我将文件名分配为
$file='myFiles/sample.pdf'。它工作得很有魅力。。。谢谢你的密码+1.