0

SQL テーブルから特定のレコードを取得し、そのレコードの特定の列を txt ファイルに配置する小さなコードに取り組んでいます。これは問題なく動作しますが、何かを画面にエコーしようとすると、ファイルを fopen または 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の外でも心配です)

ファイルを開き、ファイルに書き込んでから閉じますが、ファイルを開く前にエコーが書き込まれます。ファイルを閉じた後にエコーが発生する場合も同様です。

これは私にとって本当に奇妙で意味がありませんが、おそらく簡単な説明があります。

編集:ダウンロードされたファイルのみに余分なものが含まれています。サーバーに保存されたファイルは、意図したとおりのテーブルからのデータです。

4

1 に答える 1

1

現在のヘッダーの使用方法では、すべての出力がダウンロードに入れられます。ダウンロードへのリンクを含む Web ページが必要な場合は、リンクを含む 2 番目のページを作成し、このページにリンクします。次に、このページで、ファイルに必要なデータのみをエコーし​​ます。

基本的にヘッダーで言うことは、このリクエストのためにブラウザーに送信されるものはすべて、ダウンロードするファイルになるということです。

于 2013-10-31T23:27:42.860 に答える