(PHP 4, PHP 5, PHP 7)
ob_start — Çıktı tamponlamasını başlatır
$çıktı_geriçağırıcı
= NULL
[, int $parça_boyu
= 0
[, int $seçenekler
= PHP_OUTPUT_HANDLER_STDFLAGS
]]] )Bu işlev çıktı tamponlamasını ektin kılar. Çıktı tamponlaması etkinken betikten (başlıklar dışında) hiçbir çıktı gönderilmez ve çıktı dahili bir tamponda saklanır.
Bu dahili tamponun içeriği ob_get_contents() işleviyle bir dizge değişkenine kopyalanabilir. Dahili tamponda birikenleri çıktılamak için ob_end_flush() işlevini kullanın. Çıktılamak istemiyorsanız, ob_end_clean() işlevi ile tampon içeriğini sessiz sedasız silebilirsiniz.
Bazı HTTP sunucuları (Apache gibi) geriçağırım işlevini çağırırken betiğin çalışma dizinini değiştirir. Geriçağırım işlevinde chdir(dirname($_SERVER['SCRIPT_FILENAME'])) gibi bir çağrıyla betiğin bulunduğu dizine dönebilirsiniz.
Çıktı tamponlaması bir yığıt gibi çalışabilir, bir ob_start() etkinken başka bir ob_start() çağrısı yapabilirsiniz. Yalnız aynı sayıda ob_end_flush() çağrısı yapmayı unutmayın. Eğer çok sayıda çıktı geriçağırım işlevi etkinse, her biri iç içelik sırası gözetilerek çıktıyı süzerler.
çıktı_geriçağırıcı
Bu değiştirge ile isteğe bağlı bir çıktı eylemcisi işlev
belirtilebilir. Bu işlev değiştirge olarak bir dizge almalı ve bir
dizge döndürmelidir. Bu işlev, çıktı tamponu boşaltılırken (gönderim),
tampon temizlenirken (ob_flush(),
ob_clean() ve benzeri bir işlevle) veya isteğin
sonunda çıktı tamponu kullanıcının tarayıcısına boşaltılırken
çağrılacaktır. İşlev çağrıldığında çıktı tamponunu değiştirge olarak
alması ve sonuçta tarayıcıya gönderilmek üzere yeni bir çıktı tamponu
döndürmesi beklenir. Eğer bu değiştirge ile belirtilen işlev
çağrılabilir değilse ob_start() FALSE
döndürür.
İşlevinin sözdizimi:
$tampon
[, int $kip
] )tampon
kip
PHP_OUTPUT_HANDLER_*
sabitlerinin bit maskesi.
çıktı_geriçağırıcı
FALSE
döndürdüğü takdirde
özgün çıktı tarayıcıya gönderilir.
çıktı_geriçağırıcı
, değiştirgesine bir NULL
değer aktarılarak atlanabilir.
ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() ve ob_start() bir geriçağırım işlevi olarak belirtilemez. Bunlardan biri belirtilirse, davranışın nasıl olacağı belirsizdir. Bir tamponun içeriğini silmek isterseniz geriçağrıcıdan "" (boş dizge) döndürmelisiniz. Bir geriçağırım işlevinden, çıktı tamponlama işlevlerini kullanarak print_r($ifade, true) veya highlight_file($dosyaismi, true) gibi işlevleri çağıramazsınız.
Bilginize:
PHP 4.0.4'ten itibaren, sıkıştırılmış sayfaları destekleyen tarayıcılara gziplenmiş veri göndermek için ob_gzhandler() işlevi kullanılabilmektedir. ob_gzhandler() işlevi tarayıcının kabul edeceği içerik kodlamasının türünü tespit ettikten sonra buna uygun çıktı döndürür.
parça_boyu
İsteğe bağlı parça_boyu
belirtildiği takdirde,
parça_boyu
nu aşan veya tamponun tam dolmasına
sebep olan bir çıktılama çağrısından sonra tampon boşaltılır. Öntanımlı
0 değerinin anlamı işlevin sadece çıktı tamponu kapandığında
çağrılacağı anlamına gelir.
PHP 5.4.0 öncesinde, özel 1 değeri
parça_boyu
olarak 4096 kullanılacağı anlamına
gelirdi.
kip
kip
, çıktı tamponuna uygulanabilecek işlemleri
denetleyen bir bitmaskesidir. Çıktı tamponunun temizlenmesi,
boşaltılması ve silinmesine izin vermek öntanımlı olup, bunun karşılığı
PHP_OUTPUT_HANDLER_CLEANABLE
|
PHP_OUTPUT_HANDLER_FLUSHABLE
|
PHP_OUTPUT_HANDLER_REMOVABLE
veya kısaca
PHP_OUTPUT_HANDLER_STDFLAGS
sabitidir.
Her sabit aşağıda açıklandığı gibi belli bir işlev kümesine erişimi denetler:
Sabit | İşlevler |
---|---|
PHP_OUTPUT_HANDLER_CLEANABLE |
ob_clean(), ob_end_clean() ve ob_get_clean(). |
PHP_OUTPUT_HANDLER_FLUSHABLE |
ob_end_flush(), ob_flush() ve ob_get_flush(). |
PHP_OUTPUT_HANDLER_REMOVABLE |
ob_end_clean(), ob_end_flush() ve ob_get_flush(). |
Başarı durumunda TRUE
, başarısızlık durumunda FALSE
döner.
Sürüm: | Açıklama |
---|---|
5.4.0 |
ob_start() işlevinin (FALSE belirtildiğinde
betiğin çalışması bitene kadar çıktı tamponunu silinmesini engelleyen)
üçüncü değiştirgesi (çıktı tamponuna uygulanabilecek işlemleri
denetleyen bir bitmaskesi olarak) integer türünde
kip değiştirgesi olarak değiştirildi. Ne yazık
ki bu değişiklikle, 5.4.0 öncesinde yazılmış ve üçüncü değiştirgenin
kullanıldığı kodların API uyumluluğunun bozulmasına sebep olunmuştur.
Bu kodun her iki sürümle de uyumlu olmasının nasıl sağlanabileceği ile
ilgili örnek için kip
örneğine bakınız.
|
5.4.0 | 1 değeri artık çıktı tamponuna gönderilecek parçaların 1 baytlık olacağı anlamına geliyor. |
4.3.2 |
çıktı_geriçağırıcı çalıştırılamadığı zaman
işlevin FALSE döndürmesi sağlandı.
|
4.2.0 |
sil değiştirgesi eklendi.
|
Örnek 1 - Kullanıcı tanımlı geriçağırım işlevi örneği
<?php
function geriçağırım($tampon)
{
// elmaları armutlarla değiştirelim
return (str_replace("elmalar", "armutlar", $tampon));
}
ob_start("geriçağırım");
?>
<html>
<body>
<p>Bizden elmalarla armutların karşılaştırılması isteniyor.</p>
</body>
</html>
<?php
ob_end_flush();
?>
Yukarıdaki örneğin çıktısı:
<html> <body> <p>Bizden armutlarla armutların karşılaştırılması isteniyor.</p> </body> </html>
Örnek 2 Çıktı tamponunun hem PHP 5.3 hem de 5.4 ile uyumlu olmasını sağlayan ve çıktı tamponunun silinmesini önleyen kod örneği
<?php
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^
PHP_OUTPUT_HANDLER_REMOVABLE);
} else {
ob_start(null, 0, false);
}
?>