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の外でも心配です)
ファイルを開き、ファイルに書き込んでから閉じますが、ファイルを開く前にエコーが書き込まれます。ファイルを閉じた後にエコーが発生する場合も同様です。
これは私にとって本当に奇妙で意味がありませんが、おそらく簡単な説明があります。
編集:ダウンロードされたファイルのみに余分なものが含まれています。サーバーに保存されたファイルは、意図したとおりのテーブルからのデータです。