2016-03-29 7 views
0

私は支払いゲートウェイを作成しており、xml-responseを支払いサーバーに送信する必要があります。しかし、突然、私のXMLは、生成されたドキュメントの開始時に改行によって破損していました。単純な呼び出しunserialize()関数は、出力バッファに改行を追加します - wtf?

私はKohana 3フレームワークを使用し、PHP関数unserialize()を使用してセッションオブジェクトを取得し、この関数が呼び出されたときに改行が出力バッファに出力されます。 このコード:

123 
document_body 

しかし、このコード::あなたが見ることができるように

(empty line) 
123document_body 

<?php 
$object = unserialize($data); 
echo 123; 
document_creation_and_outputting; 

リターンは、このように文書化

<?php 
echo 123; 
$object = unserialize($data); 
document_creation_and_outputting; 

リターンは、このような結果、もし生成されたdoc_bodyには改行がありません。私のスクリプトは最初の行に改行がありません(最初の例では "123"の前に改行が表示されないためです)。そして、私はUTF- 8 BOMなし。

私の質問です:何が起こっているのですか?


私は、生成された文書を出力する前に、バッファをきれいにするob_end_clean()を使用し、それは私の問題を解決し、私は本当にunserialize()の振る舞いを理解していません。

+1

問題はunserialize()への呼び出しではなく、呼び出しを行うためにインクルードするPHPファイルのいずれかが、<?phpの前、または?>の後の冒頭に何か(おそらく見えない) 。含まれているファイルの先頭と末尾を確認してください。 – NineBerry

+0

改行を出力する '__wakeup'メソッドでオブジェクトをデコードすると、これを行う' unserialize'と考えることができます。おそらく問題はどこか他のところです。 –

+1

linebreakがスクリプトの最初の出力である場合は、['headers_sent($ file、$ line);'](http://docs.php.net/headers_sent)を使用して$ file/$ line (うまくいけば)この出力をどのように生成するかを確認してください。 – VolkerK

答えて

0

私は馬鹿です。 unserialize()がこれを受け取った: My fail

申し訳ありません。私はちょうどfuNucked。

+0

@duskwuffを提供していない限り、これは当然のことです:あるいは、逆シリアル化によって先頭または末尾の改行を含むファイルからロードされるクラス –

関連する問題