Cara menutup penimbal dalam PHP: 1. Buka direktori pemasangan PHP, cari dan buka fail konfigurasi "php.ini" 2. Dalam fail konfigurasi, cari item "output_buffering" dan tetapkan nilai item ini Hanya tetapkannya kepada "Mati".
Persekitaran pengendalian tutorial ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3
Penimbal PHP ( buffer)
Maklumat keluaran skrip mula-mula dimasukkan ke dalam penimbal Hanya apabila penimbal penuh atau skrip selesai dijalankan, data akan dipindahkan ke peringkat seterusnya. Anda boleh menemui item tetapan output_buffering
dalam fail konfigurasi php.ini konfigurasi lalai saya (Windows/XAMPP v3.2.2) ialah 4096
Jika ditetapkan kepada Hidup. penimbal Tersedia dan tiada had saiz; tersedia dan saiz Set, bait unit
Perlu diingat bahawa ini_set tidak boleh menetapkan saiz penimbal semasa memulakan persekitaran berjalan skrip, penimbal telah ditentukan dalam mod cli, output_buffering lalai . Jadi persoalannya, apakah perbezaan antara menutup dan membuka penimbal? Apakah yang dilakukan oleh saiz penimbal awal? Mod cli dimatikan secara lalai. Bolehkah ia dihidupkan jika perniagaan memerlukannya? Apakah faedah kawasan cache?
1. Apakah perbezaan antara menutup dan membuka penimbal?Lulus pemeriksaan kod
Apabila output_buffering dikonfigurasikan sebagai 4096, jalankan kod
Hasil output: Selepas menunggu 3 saat , keluaran bermula dan tamat pada masa yang samaApabila Output_buffering dikonfigurasikan sebagai Mati, jalankan kod yang samaHasil output: mula adalah output dahulu, dan selepas menunggu selama 3 saat, tamat
Melihat kepada keputusan sahaja, hasilnya adalah sama sahaja~ Tetapi memerhatikan proses operasi, saya mendapati perbezaan yang mengejutkan. Jika penimbalan dimatikan, "mula" ialah output dahulu, dan kemudian "tamat" adalah output selepas menunggu selama 3 saat. Apabila penimbal dihidupkan, ia akan menunggu pelaksanaan skrip untuk melengkapkan dan mengeluarkan keputusan bersama-sama
Dalam contoh ini, flush digunakan untuk menyegarkan penimbal apache, sama seperti membenarkan penimbal PHP untuk mewujudkan langsung sambungan dengan penyemak imbas, supaya perhatian kita Dapat memberi tumpuan kepada penimbal PHP itu sendiri.
Melalui contoh yang jelas, penimbal PHP adalah seperti rumah besar Setiap kali fungsi output seperti gema dilaksanakan, data dibuang ke rumah besar ini sehingga pelaksanaan skrip selesai atau fungsi ob_flush dilaksanakan. . Data dikeluarkan dari rumah besar dan dibuang ke dalam penimbal WebServer. Selepas menutup penimbal PHP, fungsi gema dilaksanakan Apakah yang perlu saya lakukan jika tiada rumah besar untuk meletakkannya saya perlu menyerahkannya terus kepada penimbal WebServer.
Melalui contoh dan hasil pelaksanaan kod, kita dapat memahami bahawa penimbal PHP yang dipanggil ialah hab storan data yang dibangunkan oleh PHP sendiri, dan satu siri fungsi ob beroperasi untuk tujuan ini. (Petik beberapa contoh fungsi)
ob_clean(); //Padamkan kandungan penimbal dalaman dan jangan tutup penimbal (tiada keluaran).
ob_end_clean(); //Padamkan kandungan penimbal dalaman dan tutup penimbal (tiada keluaran).
ob_get_contents(); //Mengembalikan kandungan penimbal, tidak mengeluarkan
ob_get_length(); //Mengembalikan panjang penimbal dalaman, ini fungsi mengembalikan FALSE .
2. Apakah peranan saiz penimbal awal?Tukar output_buffering daripada 4096 kepada 5 untuk memudahkan pelaksanaan ujian
Laksanakan kod
Penerangan output: Selepas menunggu selama 3 saat , output 1234endLaksanakan kod Output description: output 12345, tunggu selama 3 saat, output tamat melalui perbandingan output , Ia menerangkan perbezaan dengan baik. Penimbal hanya boleh menyimpan 5 bait data Jika data kurang daripada nilai maksimum, ia boleh disimpan terlebih dahulu Jika ia lebih besar daripada atau sama dengan nilai kritikal, data itu perlu ditendang keluar. Ini adalah sama seperti Kami melaksanakan kesan fungsi ob_flush secara manual. 3. Mod cli dimatikan secara lalai. Bolehkah ia dihidupkan jika perniagaan memerlukannya?
Soalan ini boleh ditambah dalam mod bukan cli, jika php.ini menetapkan penimbal untuk dimatikan, tetapi perniagaan perlu menggunakan penimbal, apakah yang perlu saya lakukan? untuk menukar konfigurasi? Sudah tentu ia tidak akan begitu sukar Pada masa ini, fungsi ob lain datang,
ob_start(); //Buka penimbal keluaran tidak lagi dihantar terus ke penyemak imbas di dalam penimbal keluaran.
Sekarang kita tahu bahawa penimbal PHP adalah serupa dengan konsep kawasan penyimpanan data sementara, mari kita kembali dan lihat kod sumber TP5.
Pertama lihat penjelasan fungsi ob_get_level dan ob_get_clean ob_get_level(): Mengembalikan tahap bersarang mekanisme penimbalan output. ob_get_clean(): Dapatkan kandungan penimbal semasa dan padamkan penimbal output semasa. Anda juga boleh mempelajari satu atau dua perkara daripada kod tersebut Jika tahap lebih besar daripada 0, dapatkan kandungan penimbal, padamkan penimbal dan kemudian buka yang baharu melalui ob_start Ini juga selaras dengan arahan dalam komen "reapply". Berikut ialah penjelasan tentang apa yang dipanggil bersarang Apabila nilai tahap akan menjadi 0, dan jika ia bukan 0, apakah itu? hasilnya. Selain itu, ob_start beberapa kali dan ob_get_level beberapa kali, mari cuba bandingkan hasil output. Mari kita lihat dua model dahulu Apabila ob_start membuka penimbal baharu beberapa kali , struktur data dibina sebagai jenis kedua, iaitu bersarang. ob_get_level mengembalikan tahap bersarang. Dari pemahaman peribadi saya, sarang boleh dibandingkan dengan mekanisme penstriman Java Data dalam satu penimbal adalah output kepada penimbal seterusnya, dan kemudian operasi tersuai boleh dilakukan pada data. Sekarang melihat kod sumber TP5, ideanya lebih jelas. Jika sistem memulakan penimbal, padamkannya dahulu dan kemudian buka semula kerana saiznya mungkin terhad. Saiz kawasan penimbal yang dibuka dengan melaksanakan ob_start adalah "cukup besar", tetapi tidak ada penerangan khusus tentang seberapa besarnya, saya hanya tahu bahawa tidak kira berapa besar data bertulis itu, ia tidak akan dihantar sehingga penghujung skrip 4. Apakah faedah kawasan cache? Data output PHP dihantar ke WebServer Jika gema dilaksanakan dan dihantar sekali, ini meningkatkan penggunaan sumber Adalah lebih baik untuk menyimpannya dalam memori dan menghantarnya secara seragam, yang lebih cekap. Permintaan web mengandungi pengepala HTTP dan mesti tiada output sebelum pengepala ditetapkan. Penimbal PHP melakukan kerja ini untuk kami, mengeluarkan pelbagai data sebelum menghantar pengepala Penimbal akan mula-mula menghantar maklumat pengepala ke WebSever, dan kemudian menghantar paket data secara seragam. Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Bagaimana untuk menutup penimbal dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!