Создайте XML-файл PHP DOM и создайте ссылку / приглашение сохранить файл без записи файла на сервер, когда заголовки уже отправлены - PullRequest
2 голосов
/ 14 октября 2008

Я создал кусок XML DOM PHP и сохранил его в строку, подобную этой:

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

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

Было бы неплохо что-то вроде ссылки сохранить файл или приглашение на загрузку. Как мне это сделать?

Ответы [ 3 ]

6 голосов
/ 15 октября 2008

Я вижу из комментариев, что вы работаете в рамках CMS и не можете остановить вывод контента до того места, где будет ваш код.

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

Ваш сценарий может либо отправлять заголовки с надписью «следующее содержимое - HTML», затем выводить HTML, либо отправлять заголовки с надписью «следующее содержимое - это XML, является вложением и имеет определенное имя файла». Вы не можете сделать оба.

Вы можете либо вывести HTML, содержащий ссылку на отдельный скрипт для загрузки файла XML, либо вы можете загрузить файл и не выводить 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();
?>

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

1 голос
/ 01 июня 2010

То же самое у меня сработало. Но я не использую XML DOM. я использую SimpleXML для анализа моего xml.

$ xml = new SimpleXMLElement ( "");

Я хочу дать своему представлению пользовательский xml, который будет сгенерирован в зависимости от данных, которые они предоставляют через форму. При отправке формы они получают XML-файл для загрузки с собственным желаемым именем.

header ('Content-type: "text / xml"; кодировка = "utf8" ');

заголовок ( "Content-распоряжения: присоединение; имя файла = "» [имя файла ']. 'XML $ _ POST.'. "');

echo $ xml-> asXML ();

1 голос
/ 15 октября 2008

Вы можете включить output_buffering в вашем php.ini, тогда у вас могут быть некоторые опции с отправкой заголовков.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...