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


Generate file in PHP then reference it, without storing it on the server?

基本上,我所做的是根据数据库中的信息、随机生成和其他一些因素生成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。默认情况下,大多数Web服务器的页眉为Content-Type: text/html;。从本质上讲,你不能将下载与html内容混合在一起。除非你也想下载html内容。输出后不能调用header,因为如果您进行任何输出,Web服务器已经发送了此默认的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想象成另一个页面的门户。