用PHP生成文件然后引用它,而不将其存储在服务器上?

时间:2014-11-02 03:31:15

标签: php dom io save documents

基本上我根据我的研究生成基于我数据库中的信息,随机生成和其他一些因素生成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 个答案:

答案 0 :(得分: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>

将iframe视为另一个页面的门户网站。