我正在处理一小段代码,该代码从SQL表中获取特定记录,并将该记录中的某些列放在txt文件中。这工作正常,但是如果我尝试将某些内容回显到屏幕,在我打开文件或 fwrite 之前,它也会在文件中放置回显,甚至外部的文本也放置在文件中。
这是我当前的完整代码:
Even this outside the PHP is placed in the file.
<?php
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 之外写东西的事实让我担心)
我打开文件,写入文件,然后关闭它,但是在我打开文件之前,回显正在写入它,关闭它之后的回显也是如此。
这对我来说真的很奇怪,没有任何意义,尽管可能有一个简单的解释。
编辑:只有下载的文件才有额外的东西,保存在服务器上的文件只是表中的数据。
您现在使用标头的方式,所有输出都将放在下载中。如果您想要一个带有下载链接的网页,请创建带有链接的第二个页面,链接到此页面。然后在此页面上,仅回显文件中所需的数据。
基本上,您对标头所说的是,为此请求发送到浏览器的所有内容都将是您要下载的文件。