Apa itu buffering output?


Jawaban:


274

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.

6
+1. Berikut ini tautan lain yang membantu: php.net/manual/en/function.ob-start.php - juga membantu ketika berhadapan dengan fungsi yang menggemakan nilai yang ingin Anda simpan dalam variabel.
Cam

Apakah semuanya benar-benar buffered sampai akhir, atau akankah halaman itu hanya berupa potongan jika saya memiliki halaman yang panjang?
zedoo

5
@zedoo jika Anda memulai buffering output dengan ob_start(), benar-benar semuanya buffered. ada parameter kedua opsional untuk ob_start(),, int $chunk_sizeyang, jika diatur, akan menyebabkan buffer memerah setelah panggilan keluaran apa pun yang menyebabkan panjang buffer sama atau melebihi ukuran ini.
kapak.

12
Jika Anda mendapatkan "Peringatan: Tidak dapat mengubah informasi header", itu berarti Anda perlu mengaudit kode Anda terlebih dahulu karena mengaktifkan buffering output adalah perbaikan dari gejala dan bukan penyebabnya. Sesuatu sedang menulis sebelum giliran. Jadi saya tidak setuju, tetapi tidak cukup untuk menjawabnya.
Glenn Plas

5
Saya hanya melihat petualangan menggunakan buffering, jadi mengapa itu tidak diaktifkan secara default di php?
Thomas Banderas

69

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.

  • Anda dapat menggunakan buffering output dalam situasi ketika Anda ingin memodifikasi header setelah mengirim konten.

Pertimbangkan contoh ini:

<?php
    ob_start( );
    echo "Hello World";
    if ( $some_error )
    {
        header( "Location: error.php" );
        exit( 0 );
    }
?>

Pertanyaan yang sama di sini seperti untuk Ax: tidak memulai buffering output tanpa mematikannya nanti, akan membuat skrip Anda mengalami semua jenis masalah?
Edward Stumperd

1
Buffer memerah ketika Anda memanggil salah satu metode flush (misalnya ob_flush()atau ob_end_flush()). Isi buffer juga memerah ketika skrip Anda berakhir, tiba-tiba atau sebaliknya sehingga seharusnya tidak ada masalah.
Salman A

17

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 echoakan segera mengirim data ke Browser.

masukkan deskripsi gambar di sini

Jika buffering output diaktifkan, maka echoakan mengirim data ke buffer output sebelum mengirimnya ke Browser.

masukkan deskripsi gambar di sini

phpinfo

Untuk melihat apakah buffering Output dihidupkan / dimatikan, silakan merujuk ke phpinfo di bagian inti. The output_bufferingdirektif akan memberitahu Anda jika output buffer adalah on / off.

masukkan deskripsi gambar di sini Dalam hal ini output_bufferingnilainya 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_bufferingdirektif. Cukup temukan php.ini, ubah ke pengaturan pilihan Anda, dan mulai ulang server Web. Anda dapat menemukan contoh di php.inibawah 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_bufferingbukan 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 echodan 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:

http://www.hackingwithphp.com/13/0/0/output-buffering


9

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:

Output Buffering Dengan PHP



1
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


0

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 :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.