【问题标题】:PHP - Download file from external server, filename has quotes " ' " : 'filename.zip'PHP - 从外部服务器下载文件,文件名有引号“'”:'filename.zip'
【发布时间】:2016-04-04 16:42:35
【问题描述】:

我制作了一个脚本,根据请求,服务器将返回一个特定文件以从外部源下载,我使用外部源,因为我在另一台服务器上拥有无限带宽:

$ch = curl_init();
$url="http://www.example.com/downloads/$fileName";
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true); // make it a HEAD request
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($ch);

$mimeType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);

header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $mimeType");
header("Content-length: $size");
header("Content-Transfer-Encoding: binary"); 
header("Content-Disposition:attachment;filename='$fileName'");
readfile($url);

$filename 来自前端的请求。这是来自表单的简单帖子。

一切都很好,但有些用户(不是全部)报告说他们无法打开文件,因为文件名有引号:'filename.zip',而不是filename.zip

我碰壁了,我什至不知道从哪里开始寻找,显然这发生在一些 mac 用户身上。有什么想法吗?

【问题讨论】:

  • 嗯,那是因为你在倒数第二行加上了引号。 :I
  • 我认为这些是必要的。
  • 我们都猜对了一半,you need double quotes。请参阅 Mike 的回答。
  • 是的,我在回复之前正在测试它。谢谢!

标签: php curl download http-headers


【解决方案1】:

HTTP 标准要求您在 Content-Disposition 标头中的文件名参数周围加上双引号。在您的代码中可能如下所示:

header('Cache-Control: public');
header('Content-Description: File Transfer');
header('Content-Type: ' . $mimeType);
header('Content-Type:application/octet-stream');
header('Content-length: ' . $size);
header('Content-Transfer-Encoding: binary'); 
header('Content-Disposition:attachment;filename="' . $fileName . '"');
readfile($url);

请注意,我已将您所有的 PHP 字符串定义更改为使用单引号来一致地显示所有字符串定义。

【讨论】:

  • 嗨,迈克,我正在做一些研究,我认为你是对的,非常感谢,但是!我看到其他帖子在末尾添加了一个分号:“'.$filename.'”;'有这个要求吗?
  • @multimediaxp 不是必需的,但可以添加。分号是参数分隔符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
相关资源
最近更新 更多