我一直在尝试按需生成并输出plist文件给用户。当用户单击按钮时,我运行以下代码:
<?php
header('Content-Description: File Transfer');
header('Content-Type: application/xml');
header('Content-Disposition: filename="Settings.plist"');
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>key</key>
<string>value</string>
</dict>
</plist>';
?>
这是输出:
启动文件下载需要做什么?
答案 0 :(得分:3)
您输出的Content-Disposition
标题不太正确。 (有关完整的详细规范,请参阅RFC 6266。)应该是:
header('Content-Disposition: attachment; filename=Settings.plist');
您可能还希望确保不通过以下方式缓存文件:
header('Cache-Control: private');
header('Pragma: private');
答案 1 :(得分:1)
也许试试这些标题?
header('Content-type: application/octet-stream; charset=utf-8');
header('Content-Disposition: attachment; filename="Settings.' . date('Y-m-d H:i:s') . '.plist"');
我也将日期附加到文件名,以防止浏览器缓存文件,如果有人多次下载该文件。
还要确保在输出标题之前没有内容(空格)返回浏览器。
答案 2 :(得分:0)
您用于Content Disposition标头的语法错误。看起来您忘记添加Content-Disposition: attachment
位。
RFC 6266通过示例显示语法:
Content-Disposition: Attachment; filename=example.html
你现在正在做:
header('Content-Disposition: filename="Settings.plist"');
^
这应该是:
header('Content-Disposition: Attachment; filename="Settings.plist"');
完整代码:
header('Content-Description: File Transfer');
header('Content-Type: application/xml');
header('Content-Disposition: Attachment; filename="Settings.plist"');
有关详细信息,请参阅RFC 6266(关于在超文本传输协议(HTTP)中使用Content-Disposition
标头字段)。
希望这有帮助!