Apakah ob_start()
digunakan output buffering
agar tajuk buffer dan tidak dikirim ke browser? Apakah saya masuk akal di sini? Jika tidak maka mengapa kita harus menggunakan ob_start()
?
php
output-buffering
Aditya Shukla
sumber
sumber
ob_get_contents()
denganob_get_clean()
dan menghapusob_end_clean()
karenaob_get_clean()
pada dasarnya melakukan kedua fungsi. Referensi: php.net/manual/en/function.ob-get-clean.php (PHP 4> = 4.3.0, PHP 5)ob_start();
Apakah ini benar? Apa yang terjadi jika tidak diaktifkan?ob_end_clean
itu berfungsi seperti pesona! Terima kasih @Riley DuttonSaya menggunakan ini sehingga saya bisa keluar dari PHP dengan banyak HTML tetapi tidak membuatnya. Ini menyelamatkan saya dari menyimpannya sebagai string yang menonaktifkan pengkodean warna IDE.
Dari pada:
sumber
ob_get_clean()
, bukanob_end_clean()
Jawaban yang diterima di sini menjelaskan apa yang
ob_start()
dilakukan - bukan mengapa digunakan (yang merupakan pertanyaan yang diajukan).Seperti yang dinyatakan di tempat lain
ob_start()
membuat buffer yang outputnya ditulis untuk.Tetapi tidak ada yang menyebutkan bahwa mungkin untuk menumpuk banyak buffer dalam PHP. Lihat ob_get_level ().
Adapun alasannya ....
Mengirim HTML ke browser dalam potongan yang lebih besar memberikan manfaat kinerja dari pengurangan overhead jaringan.
Mengoper data keluar dari PHP dalam potongan yang lebih besar memberikan manfaat kinerja dan kapasitas dengan mengurangi jumlah sakelar konteks yang diperlukan
Melewatkan potongan data yang lebih besar ke mod_gzip / mod_deflate memberikan manfaat kinerja karena kompresi dapat lebih efisien.
buffering output berarti bahwa Anda masih dapat memanipulasi header HTTP di kemudian hari dalam kode
secara eksplisit membilas buffer setelah mengeluarkan [head] .... [/ head] dapat memungkinkan browser untuk mulai menyusun sumber daya lain untuk halaman sebelum aliran HTML selesai.
Menangkap output dalam buffer berarti dapat diarahkan ke fungsi lain seperti email, atau disalin ke file sebagai representasi konten yang di-cache
sumber
Anda memilikinya mundur. ob_start tidak buffer header, itu buffer konten. Menggunakan
ob_start
memungkinkan Anda untuk menyimpan konten di buffer sisi server sampai Anda siap untuk menampilkannya.Ini biasanya digunakan untuk sehingga halaman dapat mengirim header 'setelah' mereka telah 'mengirim' beberapa konten (yaitu, memutuskan untuk mengarahkan setengah jalan melalui rendering halaman).
sumber
Saya lebih memilih:
sumber
ini untuk lebih memperjelas jawaban JD Isaaks ...
Masalah yang sering Anda temui adalah Anda menggunakan php untuk meng-output html dari berbagai sumber php, dan sumber-sumber itu seringkali, untuk alasan apa pun, menghasilkan melalui berbagai cara.
Terkadang Anda memiliki konten html literal yang ingin Anda hasilkan langsung ke browser; lain kali output sedang dibuat secara dinamis (sisi server).
Konten dinamis selalu (?) Akan menjadi string. Sekarang Anda harus menggabungkan html dinamis yang dirangkai ini dengan html literal, langsung-ke-tampilan apa pun ... menjadi satu struktur simpul html yang berarti.
Ini biasanya memaksa pengembang untuk membungkus semua konten yang langsung ditampilkan menjadi string (seperti yang sedang dibahas JD Isaak) sehingga dapat dikirim / dimasukkan dengan benar bersama dengan html dinamis ... meskipun Anda tidak benar-benar ingin dibungkus.
Tetapi dengan menggunakan metode ob _ ## Anda dapat menghindari kekacauan pembungkus string. Konten literal, sebaliknya, output ke buffer. Kemudian dalam satu langkah mudah seluruh isi buffer (semua html literal Anda), disatukan ke string dinamis-html Anda.
(Contoh saya menunjukkan html literal menjadi output ke buffer, yang kemudian ditambahkan ke html-string ... lihat juga contoh JD Isaaks untuk melihat string-wrapping-of-html).
sumber
Fungsi ini bukan hanya untuk header. Anda dapat melakukan banyak hal menarik dengan ini. Contoh: Anda dapat membagi halaman Anda menjadi beberapa bagian dan menggunakannya seperti ini:
Anda dapat menangkap output yang dihasilkan di sini dan menambahkannya di dua tempat yang sangat berbeda dalam tata letak Anda.
sumber
Hal-hal berikut tidak disebutkan dalam jawaban yang ada: Konfigurasi ukuran penyangga HTTP Header dan Nesting.
Konfigurasi ukuran penyangga untuk ob_start:
Kode di atas meningkatkan kinerja server karena PHP akan mengirim potongan data yang lebih besar, misalnya, 4KB (tanpa panggilan ob_start, php akan mengirim setiap gema ke browser).
Jika Anda mulai buffering tanpa ukuran chunk (mis. Ob_start sederhana ()), maka halaman tersebut akan dikirim satu kali di akhir skrip.
Output buffering tidak mempengaruhi header HTTP, mereka diproses dengan cara yang berbeda. Namun, karena buffering Anda dapat mengirim header bahkan setelah output dikirim, karena masih dalam buffer.
Dijelaskan dengan baik di sini: https://phpfashion.com/everything-about-output-buffering-in-php
sumber
Tidak, Anda salah, tetapi arahnya cocok;)
Buffer-Output menyangga output skrip. Thats (singkatnya) everthing setelah
echo
atauprint
. Masalahnya dengan header adalah, bahwa mereka hanya dapat dikirim, jika mereka belum dikirim. Tetapi HTTP mengatakan, header itu adalah yang pertama dari transmisi. Jadi, jika Anda menampilkan sesuatu untuk pertama kalinya (dalam permintaan) tajuk dikirim dan Anda tidak dapat mengatur tajuk lainnya.sumber