2013-08-29 4 views
0

Я пытался генерировать и выводить файл 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>'; 
?> 

Вот результат:

enter image description here

Что мне нужно сделать, чтобы получить загружаемый файл, чтобы начать?

ответ

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 (относительно использования поля заголовка Content-Disposition в протоколе передачи гипертекста (HTTP)) для получения более подробной информации.

Надеюсь, это поможет!

+0

Вздох. Зачем кому-то завышать правильный ответ? –

3

Заголовка Content-Disposition, которую вы выводите, не совсем корректна. (См RFC 6266 для полного подробного описания.) Это должно быть:

header('Content-Disposition: attachment; filename=Settings.plist'); 

Вы также можете убедиться, что файл не кэшируются через:

header('Cache-Control: private'); 
header('Pragma: private'); 
+0

Любовь, чтобы знать, почему есть нисходящий ответ на правильный ответ. –

+0

Мне было интересно то же самое! – MrCarrot

+0

Это сработало! Большое спасибо – Lizza

1

Возможно попробовать эти заголовки?

header('Content-type: application/octet-stream; charset=utf-8'); 
header('Content-Disposition: attachment; filename="Settings.' . date('Y-m-d H:i:s') . '.plist"'); 

Я приложил дату к имени файла тоже, чтобы предотвратить браузер кэширование файла, если кто-то загружает его более чем один раз.

Также убедитесь, что в вашем браузере нет содержимого (пробелов), прежде чем ваши заголовки будут выводиться.

Смежные вопросы