Jawaban:
Buffer Output untuk Pengembang Web, Panduan Pemula :
Tanpa buffering output (default), HTML Anda dikirim ke browser dalam beberapa bagian sebagai proses PHP melalui skrip Anda. Dengan buffering output, HTML Anda disimpan dalam variabel dan dikirim ke browser sebagai bagian di akhir skrip Anda.
Keuntungan buffering output untuk pengembang Web
- Mengaktifkan buffering output saja mengurangi jumlah waktu yang diperlukan untuk mengunduh dan merender HTML kita karena itu tidak dikirim ke browser dalam beberapa bagian karena PHP memproses HTML.
- Semua hal mewah yang dapat kita lakukan dengan string PHP, sekarang kita dapat melakukan dengan seluruh halaman HTML kita sebagai satu variabel.
- Jika Anda pernah menjumpai pesan "Peringatan: Tidak dapat mengubah informasi header - header sudah dikirim oleh (output)" saat mengatur cookie, Anda akan senang mengetahui bahwa buffer output adalah jawaban Anda.
ob_start()
, benar-benar semuanya buffered. ada parameter kedua opsional untuk ob_start()
,, int $chunk_size
yang, jika diatur, akan menyebabkan buffer memerah setelah panggilan keluaran apa pun yang menyebabkan panjang buffer sama atau melebihi ukuran ini.
Output buffering digunakan oleh PHP untuk meningkatkan kinerja dan melakukan beberapa trik.
Anda dapat meminta PHP menyimpan semua output ke dalam buffer dan mengeluarkan semuanya sekaligus sekaligus meningkatkan kinerja jaringan.
Anda dapat mengakses konten buffer tanpa mengirimnya kembali ke browser dalam situasi tertentu.
Pertimbangkan contoh ini:
<?php
ob_start( );
phpinfo( );
$output = ob_get_clean( );
?>
Contoh di atas menangkap output ke dalam variabel alih-alih mengirimkannya ke browser. output_buffering dimatikan secara default.
Pertimbangkan contoh ini:
<?php
ob_start( );
echo "Hello World";
if ( $some_error )
{
header( "Location: error.php" );
exit( 0 );
}
?>
ob_flush()
atau ob_end_flush()
). Isi buffer juga memerah ketika skrip Anda berakhir, tiba-tiba atau sebaliknya sehingga seharusnya tidak ada masalah.
Saya tahu bahwa ini adalah pertanyaan lama tetapi saya ingin menulis jawaban saya untuk pelajar visual. Saya tidak dapat menemukan diagram yang menjelaskan buffering output di web-seluruh dunia jadi saya membuat diagram sendiri di Windows mspaint.exe
.
Jika buffering output dimatikan, maka echo
akan segera mengirim data ke Browser.
Jika buffering output diaktifkan, maka echo
akan mengirim data ke buffer output sebelum mengirimnya ke Browser.
phpinfo
Untuk melihat apakah buffering Output dihidupkan / dimatikan, silakan merujuk ke phpinfo di bagian inti. The output_buffering
direktif akan memberitahu Anda jika output buffer adalah on / off.
Dalam hal ini output_buffering
nilainya 4096 yang berarti bahwa ukuran buffer adalah 4 KB. Ini juga berarti bahwa penyangga Output dihidupkan, di server Web.
php.ini
Dimungkinkan untuk menghidupkan / mematikan dan mengubah ukuran buffer dengan mengubah nilai output_buffering
direktif. Cukup temukan php.ini
, ubah ke pengaturan pilihan Anda, dan mulai ulang server Web. Anda dapat menemukan contoh di php.ini
bawah ini.
; Output buffering is a mechanism for controlling how much output data
; (excluding headers and cookies) PHP should keep internally before pushing that
; data to the client. If your application's output exceeds this setting, PHP
; will send that data in chunks of roughly the size you specify.
; Turning on this setting and managing its maximum buffer size can yield some
; interesting side-effects depending on your application and web server.
; You may be able to send headers and cookies after you've already sent output
; through print or echo. You also may see performance benefits if your server is
; emitting less packets due to buffered output versus PHP streaming the output
; as it gets it. On production servers, 4096 bytes is a good setting for performance
; reasons.
; Note: Output buffering can also be controlled via Output Buffering Control
; functions.
; Possible Values:
; On = Enabled and buffer is unlimited. (Use with caution)
; Off = Disabled
; Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = 4096
Arahan output_buffering
bukan satu-satunya arahan yang dapat dikonfigurasi mengenai buffering Output. Anda dapat menemukan arahan buffering Output yang dapat dikonfigurasi lainnya di sini: http://php.net/manual/en/outcontrol.configuration.php
Contoh: ob_get_clean ()
Di bawah ini Anda dapat melihat cara menangkap echo
dan memanipulasi sebelum mengirimnya ke browser.
// Turn on output buffering
ob_start();
echo 'Hello World'; // save to output buffer
$output = ob_get_clean(); // Get content from the output buffer, and discard the output buffer ...
$output = strtoupper($output); // manipulate the output
echo $output; // send to output stream / Browser
// OUTPUT:
HELLO WORLD
Contoh: Hackingwithphp.com
Info lebih lanjut tentang Output buffer dengan contoh dapat ditemukan di sini:
Fungsi Kontrol Output memungkinkan Anda untuk mengontrol kapan output dikirim dari skrip. Ini dapat berguna dalam beberapa situasi yang berbeda, terutama jika Anda perlu mengirim header ke browser setelah skrip Anda mulai menghasilkan data. Fungsi Kontrol Output tidak memengaruhi header yang dikirim menggunakan header () atau setcookie (), hanya fungsi seperti echo () dan data antara blok kode PHP.
http://php.net/manual/en/book.outcontrol.php
Lebih banyak sumber daya:
Seperti namanya di sini, buffer memori digunakan untuk mengelola bagaimana output skrip muncul.
Ini adalah salah satu tutorial yang sangat bagus untuk topik ini
ob_start(); // turns on output buffering
$foo->bar(); // all output goes only to buffer
ob_clean(); // delete the contents of the buffer, but remains buffering active
$foo->render(); // output goes to buffer
ob_flush(); // send buffer output
$none = ob_get_contents(); // buffer content is now an empty string
ob_end_clean(); // turn off output buffering
Buffer dapat disarangkan, jadi saat satu buffer aktif, buffer lain ob_start()
mengaktifkan buffer baru. Jadi ob_end_flush()
dan ob_flush()
tidak benar-benar mengirim buffer ke output, tetapi ke buffer induk. Dan hanya ketika tidak ada buffer induk, konten dikirim ke browser atau terminal.
Dijelaskan dengan baik di sini: https://phpfashion.com/everything-about-output-buffering-in-php
UPDATE 2019. Jika Anda memiliki dedicated server dan SSD atau NVM yang lebih baik, 3.5GHZ. Anda tidak harus menggunakan buffering untuk membuat situs web yang dimuat lebih cepat dalam 100ms-150ms.
Karena jaringan lambat daripada memproses skrip pada tahun 2019 dengan server kinerja (severs, memory, disk) dan dengan menghidupkan APC PHP :) Untuk skrip yang dihasilkan kadang-kadang hanya membutuhkan 70 ms saat lain hanya jaringan membutuhkan waktu, dari 10 ms hingga 150 ms dari lokasi. server pengguna.
jadi jika Anda ingin 150ms cepat, buffering membuat slowl, karena butuh data buffer koleksi tambahan itu membuat biaya tambahan. 10 tahun yang lalu ketika server membuat skrip 1s, itu berguna.
Harap keluaran_buffering ada batasnya jika Anda ingin menggunakan jpg untuk memuatnya dapat membersihkan otomatis dan mengirim crash.
Bersulang.
Anda dapat membuat sungai cepat atau Anda dapat membuat tama tama :)