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

StackOverflow https://stackoverflow.com/questions/202305

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

Из комментариев я вижу, что вы работаете в рамках 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();
?>

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

Другие советы

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

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

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

$xml = новый SimpleXMLElement("<root></root>");

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

заголовок('Content-type:"текст/xml";кодировка="utf8"');

заголовок('Content-расположение:привязанность;filename="'.$_POST['имя файла'].'.xml"');

echo $xml->asXML();

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top