我正在处理一小段代码,该代码从SQL表中获取特定记录,并将该记录中的某些列放在txt文件中。这很好用,但是,如果我尝试在打开文件或写入文件的位置之前或之后回显屏幕上的某些内容,那么即使在文件外部放置了文本,也将回声也放置在文件中。
这是我当前的全部代码:
Even this outside the PHP is placed in the file.
echo"Banana";
$orderNo = 3;
//DB Connect
$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('amazondb', $conn);
//Open file, select Table
$file = fopen('upload/Order.txt', 'w');
$result = mysql_query("SELECT ID, PurchaseDate, BuyerName, BuyerPhoneNumber,
BuyerEmail, ShipAddress1, ShipAddress2, ShipAddress3
FROM imported_orders");
//Loop, input to file
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{ if($row['ID']==($orderNo-1))
{fwrite($file, $row['PurchaseDate'].PHP_EOL .$row['BuyerName']);}
}
fclose($file);
//Download File
$filename ="upload/Order.txt";
header("Content-Length:" . filesize($filename));
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=Order.txt');
readfile($filename);
?>
上面的代码将以下内容输出到文件:
Even this outside the PHP is placed in the file.
Banana2013-03-14
name
这是我第一次使用标头,并使用PHP进行任何形式的下载,因此不确定是否会引起问题。 (我将通过使用if isset的HTML表单触发下载,并且用户将输入代码中的" $ orderNo",不确定现在这样做是否可以解决此问题,尽管事实上它会写东西即使在PHP之外也让我担心)
我打开文件,写入文件,然后关闭它,但是甚至在我打开文件之前的回显都已写入到文件中,关闭文件后也有回显。
这对我来说真的很奇怪,没有任何意义,尽管可能很简单
说明。
编辑:只有下载的文件中有多余的东西,保存在服务器上的文件只是表中预期的数据。
它放在哪个文件中?服务器上的文件还是客户端上的文件?
您意识到这些标头正在以应用程序/八位字节流的形式将内容作为名为Order.txt的文件发送...如果您告诉Web浏览器您向其发送文件而不是简单地输出内容,您期望什么?您不能在一个请求中发送其他内容
它应该放在客户机上的文件中,而不应该放在服务器上的文件中。
您需要了解HTTP和文件下载的工作方式。这是不可能的。
Even this outside the PHP is placed in the file, wtf.与相同...
当他尝试设置标题时,该代码如何不抱怨已经发送的输出?
您将以文本形式输出一次,然后尝试以其他形式再次输出。您可以做一个或另一个。
嗨,很抱歉,如果标头中的内容非常错误,仅在大约一个小时前进行了查找,但起初却如此,因此一无所获关于它放置在哪个文件中,不确定为什么我没有更早检查但文件保存在服务器正确,只有下载到客户端的文件不正确。再次对不起,如果我对标题的使用很糟糕,并且使您难过。
@xbonez必须在ini文件中配置输出缓冲。
@Vereonix什么是文件下载?客户端(您的浏览器)将请求发送到您的服务器(您访问PHP脚本)。服务器首先发送特定的HTTP标头,然后发送文件内容。而已。您无法在网站上显示文字,因为在文件下载的上下文中没有网站之类的东西。网站只不过是同一请求响应方案所期望的一件事:标题。您永远都不会下载和访问网站(暂时忽略JavaScript)。
现在使用标题的方式,所有输出都将放在下载中。 如果您想要一个带有下载链接的网页,请使用该链接创建另一个页面,链接到该页面。 然后在此页面上,仅回显文件中所需的数据。
基本上,您说的是标头,发送给浏览器的所有请求都将是您要下载的文件。
谢谢,直到现在,我的钱一分钱都掉了,我将2和2放在一起,实现了我点击过的每个下载链接,因为实际上这只是另一个链接,wjych只是下载文件