1

オンデマンドで 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>';
 ?>

出力は次のとおりです。

ここに画像の説明を入力

ファイルのダウンロードを開始するにはどうすればよいですか?

4

3 に答える 3

3

出力しているContent-Dispositionヘッダーが正しくありません。(完全な詳細な仕様については、 RFC 6266を参照してください。) 次のようにする必要があります。

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

次の方法で、ファイルがキャッシュされないようにすることもできます。

header('Cache-Control: private');
header('Pragma: private');  
于 2013-08-29T20:31:53.817 に答える
1

おそらくこれらのヘッダーを試してみてください。

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

誰かがファイルを複数回ダウンロードした場合にブラウザがファイルをキャッシュしないように、ファイル名にも日付を追加しました。

また、ヘッダーが出力される前に、ブラウザーに返されるコンテンツ (空白) がないことを確認してください。

于 2013-08-29T20:32:32.057 に答える
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 6266Content-Disposition ( Hypertext Transfer Protocol (HTTP) でのヘッダー フィールドの使用について) を参照してください。

お役に立てれば!

于 2013-08-29T20:31:16.120 に答える