使用 PHP 下载文件。如何获取文件名?

发布于 2024-10-20 11:41:36 字数 168 浏览 7 评论 0原文

我需要使用 PHP 脚本从远程服务器下载文件。问题是我收到的链接看起来像“example.com?download=12345”。因此,我想使用正确的扩展名保存文件,并(最多)保留其原始文件名。我该如何操作? 谢谢大家!

I need to download files from remote server with my PHP script. The problem is that the links I recieve look like "example.com?download=12345". So I want to save the file with correct extension and (at best) preserve it's original filename. How do I do this?
Thank you all!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

黑白记忆 2024-10-27 11:41:36

HTTP 响应中的 Content-Disposition 标头(如果存在)将包含其他服务器希望该文件具有的文件名。

The Content-Disposition header in the HTTP response, if it exists, will contain the filename the other server wants the file to have.

卸妝后依然美 2024-10-27 11:41:36

@EricLaw(IE 团队的)发布了 去年 11 月在 IEBlog 上对此进行了详细分析。虽然他的帖子主要针对 IE,但基本知识适用于大多数浏览器:

  • 使用 Content-Disposition 标头(最干净、符合标准,允许您指定文件名;可以与以下任一选项组合)
  • 不要使用查询-string(并不总是实用 - 但可以通过 URL 重写)
  • “在末尾添加一个带有所需扩展名的虚假查询字符串参数”(有点 hack,但有效)

但是,源服务器没有义务执行任何此操作;最有可能的选项是 Content-Disposition 标头。如果不存在,您将返回到第 1 步(尽管您可以根据文件内容猜测文件类型)。

@EricLaw (of the IE Team) has posted a detailed analysis of this on the IEBlog last November. While his post is focused on IE, the basics hold for most browsers:

  • use a Content-Disposition header (cleanest, standard-compliant, allows you to specify the filename; can be combined with either of the following)
  • don't use a query-string (not always practical - but possible with URL rewriting)
  • "Add a bogus querystring parameter at the end with the desired extension" (a bit of a hack, but works)

However, the source server is not obliged to do any of this; the most likely option would be the Content-Disposition header. If that is not present, you are back to square 1 (although you could guesstimate the file type from its content).

调妓 2024-10-27 11:41:36

如果您使用的是curl,响应标头应返回实际的文件名。文件下载的标头如下所示:

'Content-Disposition: attachment; filename="downloaded.pdf"'

If you are using curl, the response header should return the actual filename. The header for file downloads looks like:

'Content-Disposition: attachment; filename="downloaded.pdf"'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文