2

PHP DOM xml ピースを作成し、次のような文字列に保存しました。

<?php
  // create a new XML document 
  $doc = new DomDocument('1.0');
  ...  
  ...
  ...
  $xmldata = $doc->saveXML();
?>

現在、ヘッダーを使用してファイルのダウンロード プロンプトを送信することはできず、ファイルをサーバーに書き込むこともできません。つまり、ファイルをそこに置きたくないのです。

このファイルを保存するためのリンクやダウンロードのプロンプトのようなものがよいでしょう。どうすればいいのですか?

4

3 に答える 3

6

コメントから、CMS フレームワーク内で作業していて、コードが配置される前にコンテンツの出力を停止できないことがわかります。

作業しているスクリプトが (制御できない範囲で) 既にコンテンツを出力している場合、1 つのスクリプトだけで達成しようとしていることを行うことはできません。

スクリプトは、「次のコンテンツは HTML です」というヘッダーを送信してから HTML を出力するか、「次のコンテンツは XML であり、添付ファイルであり、特定のファイル名があります」というヘッダーを送信できます。両方を行うことはできません。

XML ファイルをダウンロードするための別のスクリプトへのリンクを含む HTML を出力するか、ファイル ダウンロードを発行して HTML を出力しないようにすることができます。

したがって、変更する CMS スクリプトの出力にダウンロード リンクを追加し、別のスクリプトでダウンロードを処理する必要があります。

役立つ実例を作成しました。この例には、ダウンロード リンクを含む単純な HTML ドキュメントと、ダウンロードを処理する PHP スクリプトが含まれています。

以下のコードを表示するか、実際のを見てください。

HTML (不要な毛羽立ちを削除、必ずしも有効であるとは限りません)

<html>
<head>
<title>XML Download Example</title>
</head>

<body>

<a href="download.php">Download XML example</a>

</body>
</html>

PHP

<?php
// Populate XML document
    $doc = new DomDocument();
    // ... various modifications to the document are made

// Output headers
    header('Content-type: "text/xml"; charset="utf8"');
    header('Content-disposition: attachment; filename="example.xml"');

// Output content
    echo $doc->saveXML();
?>

2 番目のスクリプトを使用してダウンロードを完全に処理できない場合 (関連データにアクセスできない可能性があります)、問題を再考する必要があります。

于 2008-10-15T08:45:49.950 に答える
1

php.iniでoutput_bufferingを有効にすると、ヘッダーの送信にいくつかのオプションがあります。

http://us.php.net/manual/en/function.headers-sent.php

于 2008-10-14T21:11:33.937 に答える
1

同じことが私のために働いた。しかし、私は XML DOM を使用していません。SimpleXML を使用して xml を解析しています。

$xml = new SimpleXMLElement("<root></root>");

フォームを介して提供されるデータに応じて生成されるカスタム xml をビューに提供したいと考えています。フォームを送信すると、xml が自分の希望する名前でダウンロードされます。

header('Content-type: "text/xml"; charset="utf8"');

header('Content-disposition: attachment; filename="'.$_POST['filename'].'.xml"');

echo $xml->asXML();

于 2010-06-01T05:37:58.553 に答える