PHP DOM xmlファイルを作成し、ヘッダーが既に送信されている場合にサーバーにファイルを書き込まずに保存ファイルリンク/プロンプトを作成します
質問
PHP DOM xmlピースを作成し、次のような文字列に保存しました:
<?php
// create a new XML document
$doc = new DomDocument('1.0');
...
...
...
$xmldata = $doc->saveXML();
?>
ヘッダーを使用してファイルのダウンロードプロンプトを送信できず、サーバーにファイルを書き込むことができません。または、ファイルをその上に配置したくありません。
このファイルを保存するリンクやダウンロードプロンプトのようなものが良いでしょう。どうすればいいですか?
解決
コメントから、CMSフレームワーク内で作業していることがわかり、コードが配置される前にコンテンツが出力されるのを止めることができません。
作業中のスクリプトが既に(制御範囲を超えて)コンテンツを出力している場合、1つのスクリプトだけで達成しようとしていることを実行できません。
スクリプトは、<!> quot;というヘッダーを送信できます。次のコンテンツはHTML <!> quotです。次に、HTMLを出力するか、<!> quot;というヘッダーを送信します。次のコンテンツはXMLであり、添付ファイルであり、特定のfilename <!> quot;を持ちます。両方はできません。
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番目のスクリプトを介してダウンロードを完全に処理できない場合(関連データにアクセスできない場合など)、問題を再考する必要があります。
他のヒント
php.iniでoutput_bufferingを有効にすると、ヘッダーを送信するオプションがいくつかあります。
同じことがうまくいきました。しかし、私はXML DOMを使用していません。 SimpleXMLを使用してxmlを解析します。
$ xml =新規 SimpleXMLElement(<!> quot; <!> lt; root <!> gt; <!> lt; / root <!> gt; <!> quot;);
フォームを介して提供するデータに応じて生成されるカスタムxmlをビューに提供したい。フォームを送信すると、希望する名前のXMLがダウンロードとして取得されます。
header( 'Content-type:<!> quot; text / xml <!> quot ;; charset = <!> quot; utf8 <!> quot; ');
header( 'Content-disposition: 添付; filename = <!> quot; '。$ _ POST [' filename ']。'。xml <!> quot; ');
echo $ xml-<!> gt; asXML();