Бафери на излез на ниво корисник
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Бафери на излез на ниво корисник
Референца за `outcontrol.user-level-output-buffers.php` со подобрена типографија и навигација.
Бафери на излез на ниво корисник
Содржина
- Што е бафериран излез?
- Вгнездување на бафери за излез
- Големина на бафер
- Операции дозволени на бафери
- Ракувачи со излез
- Работа со ракувачи со излез
- Знаменца предадени на ракувачи со излез
- Вредности на враќање на ракувачот со излез
Корисничките бафери за излез може да се стартуваат, манипулираат и завршуваат од PHP код. Секој од овие бафери вклучува бафер за излез и поврзана функција за ракување со излезот.
Корисничките бафери за излез може да се стартуваат, манипулираат и завршуваат од PHP код. Секој од овие бафери вклучува бафер за излез и поврзана функција за ракување со излезот.
Вклучување на баферирање на излезот ob_start() Баферирањето на излезот може да се вклучи со користење на output_buffering and output_handler php.ini функцијата или со поставување на ob_start() поставката. Додека и двете можат да создадат бафери за излез, ob_start() е пофлексибилна бидејќи прифаќа кориснички дефинирани функции како ракувачи со излез и операциите дозволени на баферот (исфрлање, чистење, отстранување) може да се постават исто така. Баферите стартувани со output_buffering ќе бидат активни од линијата каде што е повикана функцијата, додека оние стартувани со
ќе баферираат излез од првата линија на скриптата. "URL-Rewriter"
PHP исто така доаѓа со вграден output_add_rewrite_var() ракувач со излез кој стартува свој бафер за излез и дозволува само до две инстанци од него да работат во секое време (една за пренасочување на URL на корисничко ниво и една за транспарентна поддршка на ID на сесија). Овие бафери може да се стартуваат со повикување на
session.use_trans_sid
php.ini setting.
функцијата и/или со овозможување на zlib Вклучениот
zlib.output_compression
php.ini setting.
Забелешка: Додека
"URL-Rewriter"екстензија има свој бафер за излез кој може да се овозможи со користење на ob_start() е посебен по тоа што дозволува само до две инстанци од него да работат во едно време, сите бафери за излез на корисничко ниво ги користат истите основни бафери што ги користи
со нивната функционалност имплементирана од прилагодена функција за ракување со излез. Како такви, целата нивна функционалност може да се емулира од кориснички код.
Исфрлање, пристап и чистење на содржината на баферот ob_flush(), ob_end_flush() or ob_get_flush() се повикува.
Повикување ob_end_flush() or ob_get_flush() Исфрлањето испраќа и отфрла содржината на активниот бафер. Баферите за излез се исфрлаат кога големината на излезот ја надминува големината на баферот; скриптата завршува или
ќе го исклучи активниот бафер. ob_gzhandler() Исфрлањето на баферите ќе го исфрли вратената вредност на ракувачот со излез што може да се разликува од содржината на баферот. На пример, користењето на
Содржината на активниот бафер може да се добие со повикување на ob_get_contents(), ob_get_clean() or ob_get_flush().
Содржината на активниот бафер може да се добие со повикување ob_get_length() or ob_get_status() Ако е потребна само должината на содржината на баферот,
Повикување ob_get_clean() or ob_get_flush() ќе ја врати должината на содржината во бајти.
ќе го исклучи активниот бафер откако ќе ја врати неговата содржина. ob_clean(), ob_end_clean() or ob_get_clean().
Повикување ob_end_clean() or ob_get_clean() Исфрлањето испраќа и отфрла содржината на активниот бафер. Баферите за излез се исфрлаат кога големината на излезот ја надминува големината на баферот; скриптата завршува или
Содржината на активниот бафер може да се исчисти со повикување
Исклучување на баферите ob_end_clean(), ob_end_flush(), ob_get_flush() or ob_get_clean().
Баферите за излез може да се исклучат со повикување
PHP_OUTPUT_HANDLER_REMOVABLE Баферите за излез започнати без E_NOTICE.
знамето не може да се исклучат и може да генерираат exit() Секој излезен бафер што не е затворен до крајот на скриптата или кога
ќе се повика, ќе биде исфрлен и исклучен од процесот на исклучување на PHP. Баферите ќе бидат исфрлени и исклучени по обратен редослед од нивното стартување. Последниот започнат бафер ќе биде прв, а првиот започнат бафер ќе биде последен што ќе биде исфрлен и исклучен.
Ако исфрлањето на содржината на баферот не е пожелно, треба да се користи прилагоден ракувач за излез за да се спречи исфрлање при исклучување.
Исклучоци фрлени во ракувачи за излез "Uncaught Exception" Ако во ракувач за излез се фрли нефатен исклучок, програмата завршува и ракувачот се повикува од процесот на исклучување, по што
пораката за грешка се исфрла. ob_flush(), ob_end_flush() or ob_get_flush()Ако нефатен исклучок се фрли во ракувач повикан од
, содржината на баферот се исфрла пред пораката за грешка.
Забелешка: Ако во ракувач за излез за време на исклучување се фрли нефатен исклучок, ракувачот се прекинува и ниту содржината на баферот ниту пораката за грешка не се исфрлаат.
PHP_OUTPUT_HANDLER_DISABLEDАко ракувач фрли исклучок, неговиот
Грешки покренати во ракувачи со излез
Ако се покрене нефатална грешка во ракувач со излез, програмата продолжува со извршување.
Ако нефаталната грешка се покрене во ракувач повикан од
ob_flush(), ob_end_flush()
or ob_get_flush(), баферот испушта одредени податоци во зависност од вратената вредност на ракувачот. Ако ракувачот врати false баферот и пораката за грешка се испуштаат. Ако врати нешто друго, вратената вредност на ракувачот се испушта, но не и пораката за грешка.
Забелешка: Ако ракувачот врати
falseitsPHP_OUTPUT_HANDLER_DISABLEDАко ракувач фрли исклучок, неговиот
Ако се покрене фатална грешка во ракувач со излез, програмата завршува и ракувачот се повикува од процесот на исклучување по што се испушта пораката за грешка.
Ако фаталната грешка се покрене во ракувач повикан од ob_flush(), ob_end_flush() or ob_get_flush(), содржината на баферите се испушта пред пораката за грешка.
Ако фатална грешка се покрене во ракувач со излез за време на исклучување, програмата завршува без испуштање на баферот или пораката за грешка.
Излез во ракувачи со излез
Во одредени околности, излезот произведен во ракувачот се испушта заедно со содржината на баферот. Овој излез не се додава во баферот и не е дел од низата вратена од ob_get_flush().
За време на операциите на испуштање (повикување ob_flush(),
ob_end_flush(), ob_get_flush()
и за време на исклучување) ако вратената вредност на ракувачот е false
содржината на баферот се испушта проследена со излезот. Ако ракувачот не е повикан за време на исклучување, ракувачот што фрла исклучок или exit() се повикува резултира со исто однесување.
Забелешка: Ако ракувачот врати
falseitsPHP_OUTPUT_HANDLER_DISABLEDАко ракувач фрли исклучок, неговиот
Статус знаменца на ракувач со излез
На
статус знаменца на ракувач
на баферот flags битното поле се поставува секој пат кога се повикува ракувачот со излез и е дел од flags вратено од
ob_get_status(). Ако рачката успешно се изврши и не врати false,
PHP_OUTPUT_HANDLER_STARTED and
PHP_OUTPUT_HANDLER_PROCESSED се поставува. Ако рачката врати false или фрли исклучок при извршување,
PHP_OUTPUT_HANDLER_STARTED and
PHP_OUTPUT_HANDLER_DISABLED е поставено.
Забелешка: Ако
PHP_OUTPUT_HANDLER_DISABLEDна рачката е поставено, рачката нема да биде повикана со повикување ob_end_clean(), ob_end_flush(), ob_get_clean(), ob_get_flush(), ob_clean(), ob_flush() или за време на процесот на исклучување на PHP. Пред PHP 8.4.0, ова знаменце немаше ефект при повикување ob_clean() or ob_flush().