Ö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.
Sorun, unserialize() çağrısı değil, aramayı yapmak için eklediğiniz php dosyalarından herhangi birinin Php'den önce veya sonunda?> . Eklediğiniz dosyaların başlangıçlarını ve sonlarını kontrol edin. – NineBerry
"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. –
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