3

XML ファイルを画面に出力するスクリプトを作成しましたが、ダウンロード ダイアログを開いてファイルとして保存できるようにしたいと考えています。

どうすればそれができますか?

thnx!

スクリプト:

<?php
print '<?xml version="1.0" encoding="UTF-8" ?>';
print "\n <data>";
...
print "\n </data>";
?>
4

2 に答える 2

4

ヘッダーを正しく設定してみてください:

<?php
header('Content-Type: text/xml');
header('Content-Disposition: attachment; filename="example.xml"'); 
header('Content-Transfer-Encoding: binary');

print '<?xml version="1.0" encoding="UTF-8" ?>';
print "\n <data>";
...
print "\n </data>";
?>
于 2009-09-08T12:04:27.360 に答える
3

以下を使用して、ブラウザに「名前を付けて保存...」ダイアログを強制的に表示させてみてください: ブラウザは、解釈/表示方法がわからないコンテンツ タイプに対して、またはヘッダーに指示されています。正しいヘッダーがわかれば、ダウンロードするように指定したり、デフォルトのファイル名、コンテンツ タイプ、キャッシュ方法を指定したりできます。

<?php
$xml = '<?xml version="1.0" encoding="UTF-8" ?>';
$xml .= "\n <data>";

// Create the rest of your XML Data...

$xml .= "\n </data>";
downloader($xml, 'yourFile.xml', 'application/xml');

関数コード:

<?php
if(!function_exists('downloader'))
 {
  function downloader($data, $filename = true, $content = 'application/x-octet-stream')
   {
    // If headers have already been sent, there is no point for this function.
    if(headers_sent()) return false;
    // If $filename is set to true (or left as default), treat $data as a filepath.
    if($filename === true)
     {
      if(!file_exists($data)) return false;
      $data = file_get_contents($data);
     }
    if(strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== false)
     {
      header('Content-Disposition: attachment; filename="'.$filename.'"');
      header('Expires: 0');
      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
      header('Content-Transfer-Encoding: binary');
      header('Content-Type: '.$content);
      header('Pragma: public');
      header('Content-Length: '.strlen($data));
     }
    else
     {
      header('Content-Disposition: attachment; filename="'.$filename.'"');
      header('Content-Transfer-Encoding: binary');
      header('Content-Type: '.$content);
      header('Expires: 0');
      header('Pragma: no-cache');
      header('Content-Length: '.strlen($data));
     }
    // Send file to browser, and terminate script to prevent corruption of data.
    exit($data);
   }
 }
于 2009-09-08T12:06:07.683 に答える