Üzerinde hiçbir içerik, görünür hiçbir hata mesajı - Dün bir web sitesi ekran sadece beyaz bir sayfa neden garip bir hata izini.
Ben preg_replace kullanılan bir düzenli ifade sorun olduğunu gördük.
Sadece html echo'ing önce birikmiş içerik başlıktaki html etiketi değiştirmek için, düzenli ifade kullanılır. Html bug (60 kb - çok büyük değil) meydana sayfada oldukça büyük var ve preg_replace gibi / kullanılan regex sadece belirli uzunlukta bir dize işleyebilir gibiydi - ya da benim regex (gerçekten de mümkündür) berbat.
(PHP 5.2.9 üzerinde test) sorunu reproduces bu örnek programda bakın:
function replaceTitleTagInHtmlSource($content, $replaceWith) {
return preg_replace('#(<title>)([\s\S]+)(<\/title>)#i', '$1'.$replaceWith.'$3', $content);
}
$dummyStr = str_repeat('A', 6000);
$karşıtalStr = '<title>foo</title>';
for($i = 0; $i < 10; $i++) {
$karşıtalStr .= $dummyStr;
}
print 'orignal: ' . strlen($karşıtalStr);
print '<hr />';
$replaced = replaceTitleTagInHtmlSource($karşıtalStr, 'bar');
print 'replaced: ' . strlen($replaced);
print '<hr />';
Çıktı:
orignal: 60018
replaced: 0
Yani - fonksiyon uzunluğu 60000 bir dize alır ve 0 uzunlukta bir dize döndürür. Ne ben benim regex yapmak istedim.
Değişen
for($i = 0; $i < 10; $i++) {
karşı
for($i = 0; $i < 1; $i++) {
in order karşı decrease the karşıtal string length, the output is:
orignal: 6018
replaced: 6018
Ben değiştirirken kaldırıldı zaman, sayfanın içeriği herhangi bir sorun olmadan sergilendi.