2009-07-29 9 views
2

PHPを使用して、テキストファイルの情報をユーザーに渡してから、アプリケーションの入力として使用します。私は次のスニペットに示すメソッドを使用して、ファイルをユーザーに提供しています。ファイルの先頭にLF接頭辞を付けるPHPを停止する方法

header('Content-type: text/csv'); 
header('Content-Disposition: attachment; filename=filename.dat'); 
echo $data; 
exit(); 

私は対話の罰金として保存取得したデータは、唯一の問題は、私は取り除くように見えるカント、出力ファイルの先頭に改行文字があることがある存在です。

データを使用するアプリケーションが空白に敏感で、これを修正するのは簡単ですが、ユーザーに更新を強制することは、さまざまな理由で下りたいとは限りません。

この問題を引き起こしていることは誰でも知っていますか、さらに重要な回避策です。

+0

HTTPヘッダーは、CRLFで終了するはずです。最後のヘッダーを終了するLFがファイルの前に付いていますか?もしそうなら、それはHTTPクライアントのバグです。 – jrockway

+1

'$ data'に改行が含まれているか、これを行うスニペットの前に何かがあります。あなたがPHPブロックを開く前の改行かもしれません。 – Gumbo

+1

@ Gumbo:私には合理的な答えのように聞こえますが、なぜコメントを使用するのですか? – AnthonyWJones

答えて

3

私はすでに質問へのコメントで言ったように:

あなた$dataは、その改行が含まれているか、これを行うことスニペットの前に何かがあるのどちらか。あなたがPHPブロックを開く前の改行かもしれません。

+0

ありがとうございます - ヘッダー呼び出し後のステートメントだけが実際にファイルの内容に含まれる可能性があると誤って推測しました – Willbill

1

おそらく、$ dataに改行が含まれています。 も含まれています

1

おそらく余分な改行が何とか$dataになっています。それを修正できない場合は、データをエコーする前にデータをtrim()にすることができます。

設定方法を投稿することができます$data

0

おそらくまたはob_get_lengthを使用して、echoステートメントの前に出力に何かが送信されているかどうかを確認できます。または、echoの前にob_cleanを使用してください。

1

あなたが先頭または末尾のラインフィードを持つファイルを識別することができないプロジェクト、新しい行に取り組んでいる場合には、キャリッジリターンは自分のヘッダの前に以下のコードを呼び出す:

​​

これもそれらのバッファに依存するいくつかの予期しない副作用がありますが、出力バッファを完全にクリアする有効な方法です。

関連する問題