【发布时间】:2019-09-13 03:52:30
【问题描述】:
我有一个要解决的问题。问题是使用 CURL 下载文件,并在发生这种情况时在浏览器中向用户提供另存为提示。我可以成功打开文件,但它直接在浏览器中作为字符数据打开。
到目前为止,我已经尝试使用标准的 Content-Type 和 Content-Disposition 标头,但实际上没有成功生成保存对话提示:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "ftp://server.com/recordings/4_23_2019/CD36FAFA9DFD4DE190B487C503D5A3D2 @ 2_04_28 PM.wav");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILE, $file); #output
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
$file = curl_exec($ch);
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="CD36FAFA9DFD4DE190B487C503D5A3D2 @ 2_04_28 PM.wav"');
header('Content-Transfer-Encoding: binary');
header('Content-length: ' . filesize($file));
readfile($file);
exit;
}
?>
我相信使用这些标题应该会向用户提供保存提示,但我会得到一个包含一堆随机字符的页面。
产生的错误:
警告:file_exists() 期望参数 1 是资源,字符串 在 /path/name 中给出
警告:无法修改标头信息 - 标头已发送
【问题讨论】:
-
谢谢,删除问题的通配符部分。
-
你可能需要小心你的 PHP 标签。例如,如果您在一行中单独包含“”,直到您的 PHP 文件的顶部,服务器可能会在发送标头之前发送一个换行符,这通常会破坏标头。如果可以,请在第一个 PHP 标记内尝试,在换行符有机会呈现之前。
-
那个浏览器会属于 IE 家族吗?
-
谢谢,@UncaAlby 我所看到的标题没有问题,没有 php 输出错误,我已经更新了代码以显示 php 标签的位置。