2016-03-29 21 views
0

Ödeme ağ geçidini yazıyorum ve ödeme sunucusuna xml yanıtı atmalıyım. Ancak, aniden, oluşturulan belgenin başında XML'm satır sonu nedeniyle bozuldu.Basit arama unserialize() işlevi çıktı arabelleğine satır sonu ekler - wtf?

Kohana 3 çerçevesini kullanıyorum ve oturum nesnesini almak için PHP işlevi unserialize() ve bu işlev çağrıldığında çıktı arabelleğine satırsonu satırlarını kullanıyorum. Bu kod:

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

döner böyle sonuçlanır:

123 
document_body 

Ama bu kodu:

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

döner böyle belgelemek:

(empty line) 
123document_body 

Yani görebilirsiniz , Eğer oluşturulan doc_body'sinde satır sonu yok, kodumun ilk satırda satır sonu yok (ilk örnekteki "123" önce satır sonu görmüyoruz) ve söz veriyorum, UTF'yi kullanıyorum. 8 BOM OLMADAN.

Bu yüzden sorum sorum: neler oluyor?


ben oluşturulan belgeyi çıktısını almadan tampon temizlemek için ob_end_clean() kullanılan ve benim sorun çözüldü, ama gerçekten unserialize() 'in davranışlarını anlamıyorum.

+1

Sorun, unserialize() çağrısı değil, aramayı yapmak için eklediğiniz php dosyalarından herhangi birinin . Eklediğiniz dosyaların başlangıçlarını ve sonlarını kontrol edin. – NineBerry

+0

"Unserialize" ın bunu yapabilmesinin tek yolu, bir nesneyi yeni bir satır çıkaran bir "__wakeup" yöntemiyle çözmesidir. Daha muhtemel sorun, başka bir yer. –

+1

Linebreak'in betiğin ilk çıktısı olması durumunda ['headers_sent ($ file, $ line);'] (http://docs.php.net/headers_sent) kullanabilir ve $ file/$ line’i kontrol edebilirsiniz. Bu çıktıyı neyin ürettiğine inşallah. – VolkerK

cevap

0

Ben bir moron'um. unserialize() bunu aldı: My fail

Üzgünüz, çocuklar. Sadece kustum.

+0

@duskwuff sağladığınız sürece, bu tahmin sizin için geçerliydi: ya da eğer seri hale getirme tetikleniyorsa lider/sondaki yeni satır içeren bir dosyadan yüklenecek sınıf –