dom — генерировать файл в PHP, а затем ссылаться на него, не сохраняя его на сервере?

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

header('Content-Disposition: attachment;filename=License.xml');
header('Content-Type: text/xml');
$dom = new DOMDocument();
$xml = $dom->createTextNode('<Account Username="'.$fuser.'" Password="'.$fpass.'" Key="'.$softwareKey.'"></Account>');
$xml = $dom->appendChild($xml);
echo $dom->saveXML();

Тем не менее, это не так — на самом деле, это делает так, чтобы страница не загружалась, и вместо этого весь сгенерированный источник сохраняется как License.xml

Функциональность, которая мне нужна, заключается в том, что пользователь сможет без проблем загружать страницу и просматривать содержимое на странице, однако этот файл будет автоматически загружаться при соблюдении условий.

Если это невозможно, то возможно ли сохранить его в значении ссылки, например:

Click <a href="#">here</a> to download your License file!

Еще одна вещь, которую я хочу сделать, это прикрепить файл к электронному письму, но я нашел множество объяснений, как это сделать, хотя, очевидно, я не тот, кто генерирует файлы, я не понимаю, как работает DOM и сколько бы учебников и т. д. я не читал … Мне просто больно, поэтому я решил просто проанализировать весь XML-файл как текст. (Не имеет значения, это именно тот формат, в котором мое приложение в любом случае читает файл License.XML)

Любая помощь высоко ценится, пожалуйста, не связывайте меня с документами DOM Я смотрю на них в течение двух часов, и это больно мне в голову, вся официальная страница документа по PHP просто вызывает у меня головную боль.

1

Решение

Привет, скорее всего, у вас есть что-то вроде этого

<p> some content </p>
<?php //hopefully a php tag. etc.
header('Content-Disposition: attachment;filename=License.xml');
header('Content-Type: text/xml');
....  download code ....
?>
<p> some more content </p>

Это не сработает, потому что вы не можете получить вывод перед вызовом заголовка. Способ обойти это сделать отдельный файл. Передайте этот некоторый тип токена проверки и запустите свой код в iframe или в виде отдельного запроса (отдельная веб-страница). У вас также может быть контент после кода, и в этом случае он будет включен в загруженный вами файл.

Заголовок в основном устанавливает то, что type страницы это. По умолчанию большинство веб-серверов имеют заголовок Content-Type: text/html;, По сути, вы не можете смешивать загрузку с HTML-контентом. Если вы не хотите загружать этот HTML-контент тоже. Вы не можете вызывать заголовок после вывода, потому что веб-сервер уже отправил этот html-заголовок по умолчанию, если вы делаете какой-либо вывод.

Хорошо, самый простой способ — это загрузить код в отдельный файл, назовем его download.php

затем укажите ссылку на него.

<a href="location of download.php" >click me</a>

Когда он загружается, он запускает код. Просто убедитесь, что ничего не выводится до header( ) функция. Даже не пустая строка перед <?php тег

Iframe сделает это без ссылки, которую вы просто делаете, как это

<iframe src="location of download.php" style="display:none;" ></iframe>

Думайте о фрейме как о портале на другую страницу.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector