По сути, я создаю файл 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 просто вызывает у меня головную боль.
Привет, скорее всего, у вас есть что-то вроде этого
<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>
Думайте о фрейме как о портале на другую страницу.
Других решений пока нет …