Ce este un clipboard și ce face? Ce este un buffer de ieșire? Buffere de ieșire personalizate

  • Traducere

În acest articol vreau să vorbesc despre cum este implementat stratul „buffering de ieșire” în PHP, cum funcționează și cum să interacționăm cu el din PHP. Nu este nimic complicat în acest strat, dar mulți dezvoltatori fie nu înțeleg deloc cum să-l gestioneze, fie nu au o claritate completă. Tot ce voi scrie despre se referă versiuni PHP 5.4 și mai sus. De atunci s-au schimbat multe lucruri legate de tamponul de ieșire (OB). De fapt, această funcționalitate a fost complet rescrisă, astfel încât compatibilitatea cu versiunea 5.3 a fost păstrată doar parțial.

Ce este un buffer de ieșire?

Fluxul de ieșire în PHP conține octeți, de obicei sub formă de text, pe care dezvoltatorul trebuie să îi afișeze pe ecran. Cel mai comun design folosit pentru aceasta este ecou sau printf() . În primul rând, trebuie să înțelegeți că orice funcție care scoate ceva va folosi BV din zona PHP. Dacă vorbim despre extensii pentru PHP, atunci puteți obține acces la funcții care scriu direct în SAPI, ocolind orice BV din amonte. API-ul C este documentat în lxr.php.net/xref/PHP_5_5/main/php_output.h și puteți obține o mulțime de informații de aici, cum ar fi dimensiunea implicită a bufferului.

Al doilea punct important: Stratul BV nu este singurul strat în care datele de ieșire sunt stocate în tampon.

Și al treilea: în funcție de SAPI-ul pe care îl utilizați (web sau cli), stratul BV se poate comporta diferit.

Mai jos este o diagramă care vă va ajuta să înțelegeți toate cele de mai sus:

Aici vedem că PHP folosește trei straturi logice de buffering pentru a controla ieșirea. Două dintre ele aparțin aceluiași „buffer de ieșire”, iar al treilea aparține SAPI. Când fluxul de ieșire părăsește regiunea PHP pentru a ajunge la nivelul inferior al arhitecturii, pe parcurs pot apărea noi buffere: buffer terminal, buffer FastCGI, buffer web server, buffer sistem de operare,Buffer-uri de stivă TCP/IP. Nu uita asta. Deși în scopul acestui articol vom vorbi doar despre PHP, vor exista o mulțime de alte software-uri în stiva pe calea datelor către stratul inferior și utilizator.

O notă importantă despre SAPI CLI: dezactivează orice buffer de ieșire implicit în PHP setând parametrul ini la output_buffering valoarea 0. Deci, până când scrieți manual funcții în CLI ob_() , în mod implicit, toate datele de ieșire vor merge direct la stratul SAPI. Mai mult, în CLI pentru parametru implicit_flush valoarea 1 este strict specificată Dezvoltatorii înțeleg întotdeauna greșit esența acestui parametru, deși codul spune absolut fără ambiguitate: când. implicit_flush este setat la 1, tamponul stratului SAPI este golit la fiecare scriere. Adică, de fiecare dată când scrieți date pentru ieșire folosind CLI SAPI, acestea sunt trimise imediat la nivelul inferior, unde sunt scrise în stdout și apoi șters.

Stratul standard de tamponare a ieșirii PHP

Dacă utilizați SAPI altul decât CLI, dar de exemplu PHP-FPM, puteți experimenta cu trei parametri ini legați de buffer:
  • output_buffering
  • implicit_flush
  • handler_ieșire
Vă rugăm să rețineți că utilizați cu ele ini_set() nu vor avea niciun efect deoarece valorile lor sunt citite când PHP pornește, înainte ca acesta să poată rula orice script. Dacă utilizați ini_set() cu oricare dintre acești parametri, schimbă valoarea, dar nu va mai fi folosit nicăieri. Este prea târziu - stratul BV este deja lansat și activ. Puteți modifica acești parametri editând php.ini sau folosind cheia –d la binarul PHP.

În mod implicit, în php.ini, care vine cu PHP, output_buffering a atribuit valoarea „4096” (octet). Dacă nu utilizați php.ini (sau rulați PHP cu cheia –n ), atunci valoarea implicită va fi „0”, adică dezactivată. Dacă codificați valoarea „On”, aceasta va fi atribuită marimea standard tampon de ieșire (16 KB).

După cum probabil ați ghicit, utilizarea unui buffer de ieșire într-un mediu web are un avantaj de performanță. Cei 4 KB inițiali sunt mulți, ceea ce înseamnă că puteți scrie până la 4096 de caractere ASCII înainte ca PHP să înceapă să comunice cu stratul SAPI de bază. Pe web, trimiterea datelor octet cu octet, dimpotrivă, nu îmbunătățește performanța. Este mult mai bine dacă serverul trimite tot conținutul în masă sau în părți mari. Cu cât straturile comunică mai puțin frecvent, cu atât mai bine din punct de vedere al performanței. Prin urmare, asigurați-vă că utilizați un buffer de ieșire. PHP își va trimite conținutul la sfârșitul solicitării și nu va trebui să faceți nimic pentru aceasta.

În capitolul anterior, am menționat implicit_flush în contextul CLI. În cazul oricărui alt SAPI implicit_flush inițial dezactivată. Acest lucru este bun, deoarece este puțin probabil să primiți o resetare SAPI imediat după ce ați scris-o. Pentru protocolul FastCGI, spălarea poate fi comparată cu completarea și trimiterea unui pachet după fiecare scriere. Cu toate acestea, este mai bine să umpleți mai întâi complet tamponul FastCGI și abia apoi să trimiteți pachete. Dacă trebuie să resetați manual tamponul SAPI, utilizați funcția PHP pentru a face acest lucru culoare() . Pentru a reseta după fiecare intrare, așa cum sa menționat mai sus, puteți utiliza parametrul implicit_flush în php.ini. Ca opțiune - un apel unic la funcția PHP ob_implicit_flush() .

Un apel invers poate fi aplicat conținutului tamponului înainte de a fi scos. handler_ieșire . În general, datorită extensiilor PHP, ne sunt disponibile multe apeluri inverse (utilizatorii le pot scrie și, despre asta voi vorbi în capitolul următor).

  • ob_gzhandler: compresie de ieșire folosind ext/zlib
  • mb_output_handler: traducerea codificării caracterelor folosind ext/mbstring
  • ob_iconv_handler: traducerea codării caracterelor folosind ext/iconv
  • ob_tidyhandler: dezinfectează ieșirea HTML cu ext/tidy
  • ob__handler: compresie de ieșire folosind ext/http
  • ob_etaghandler: generarea automată a antetelor ETag folosind ext/http

Puteți folosi un singur apel invers, care va primi conținutul buffer-ului și va face transformări utile pentru ieșire, ceea ce este o veste bună. Pentru a analiza datele pe care PHP le trimite către serverul web, care apoi le trimite utilizatorului, este util să folosiți callback-uri și buffer-uri de ieșire. Apropo, prin „ieșire” mă refer atât la antet, cât și la corp. Anteturile HTTP fac, de asemenea, parte din stratul de buffering de ieșire.

Corp și anteturi

Când utilizați un buffer de ieșire (fie unul personalizat sau unul dintre cele standard), puteți trimite anteturi HTTP și conținut după cum doriți. Orice protocol necesită trimiterea mai întâi a antetului și apoi a corpului, dar PHP însuși va face acest lucru pentru dvs. dacă utilizați stratul BV. Orice funcție PHP care funcționează cu anteturi ( header(), setcookie(), session_start() ), folosește de fapt funcție internă sapi_header_op(), care umple pur și simplu buffer-ul antetului. Dacă apoi scrieți datele de ieșire, de exemplu, folosind printf() , apoi vor fi scrise într-unul dintre bufferele de ieșire corespunzătoare. Și în timp ce trimitem mai întâi tamponul PHP

Trimite antetele și numai apoi corpul. Dacă nu vă place acest tip de îngrijire de la PHP, atunci va trebui să dezactivați complet stratul BV.

Buffere de ieșire personalizate

Să ne uităm la exemple despre cum funcționează acest lucru și ce puteți face. Rețineți că, dacă doriți să utilizați stratul standard de buffering PHP, nu veți putea folosi CLI deoarece este dezactivat ca strat.

Mai jos este un exemplu de lucru cu un nivel PHP standard folosind serverul web intern SAPI:

/* rulează astfel: php -doutput_buffering=32 -dimplicit_flush=1 -S127.0.0.1:8080 -t/var/www */ echo str_repeat("a", 31); somn(3); ecou „b”; somn(3); ecou „c”;

Am rulat PHP cu un buffer de ieșire standard de 32 de octeți și i-am scris imediat 31 de octeți înainte de a începe întârzierea de execuție. Ecranul este negru, nu a fost trimis încă nimic. Apoi acțiune dormi() se termină și scriem un alt octet, umplând astfel complet tamponul. După aceea, se aruncă imediat în tamponul stratului SAPI, care se aruncă în ieșire, de atunci implicit_flush are valoarea 1. Linia apare pe ecran aaaaaaaaaa(31 ori)b , după care începe să funcționeze din nou dormi() . Când se termină, tamponul gol de 31 de octeți este umplut cu un singur octet, după care PHP iese și resetează tamponul. apare pe ecran Cu .

Așa arată un buffer PHP standard fără a apela nicio funcție ob. Nu uitați că acesta este un buffer standard, adică este deja disponibil (pur și simplu nu puteți utiliza CLI-ul).

Acum cu ajutorul ob_start() puteți rula buffer-uri de utilizator și câte aveți nevoie până când memoria se epuizează. Fiecare buffer va fi plasat în spatele celui precedent și imediat aruncat în următorul, ceea ce va duce treptat la o revărsare.

Ob_start(funcție($ctc) ( static $a = 0; return $a++ . "- " . $ctc . "\n";), 10); ob_start(funcție($ctc) ( return ucfirst($ctc); ), 3); ecou „fo”; somn(2); ecou „o”; somn(2); ecou "barbazz"; somn(2); ecou „bună ziua”; /* 0- FooBarbazz\n 1- Bună ziua\n */

Dispozitiv tampon de ieșire

După cum am spus deja, începând cu versiunea 5.4, mecanismul de buffering de ieșire a fost complet rescris. Înainte de aceasta, codul era foarte neglijent, multe lucruri nu erau ușor de făcut și apăreau adesea erori. Puteți citi mai multe despre asta la link. Noua bază de cod este mult mai curată, mai bine organizată și are funcții noi. Adevărat, compatibilitatea cu versiunea 5.3 este asigurată doar parțial.

Poate că una dintre cele mai plăcute inovații este că extensiile își pot declara acum propriile callback-uri și buffer-uri de ieșire care intra în conflict cu callback-urile altor extensii. Anterior, era imposibil să se gestioneze pe deplin situațiile în care și alte extensii își puteau declara apelurile înapoi.

Iată un exemplu rapid care arată cum puteți înregistra un apel invers care convertește datele în majuscule:

#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "main/php_output.h" #include "php_myext.h" static int myext_output_handler(void **nimic , php_output_context *output_context) ( char *dup = NULL; dup = estrndup(output_context->in.data, output_context->in.used); php_strtoupper(dup, output_context->in.used); output_context->out.data = dup; output_context->out.used = output_context->in.used output_context->out.free = 1; ) -1, myext_output_handler, /* PHP_OUTPUT_HANDLER_DEFAULT_SIZE */ 128, PHP_OUTPUT_HANDLER_STDFLAGS; încearcă */ NULL, NULL, /* Modulul shutdown */ PHP_RINIT(myext), /* Solicitare init */ NULL, /* Solicitare oprire */ NULL, /* Informații despre modul */ "0.1", /* Înlocuire cu numărul versiunii pentru tine extensia */ STANDARD_MODULE_PROPERTIES ); #ifdef COMPILE_DL_MYEXT ZEND_GET_MODULE(myext) #endif

Stânci subacvatice

În cea mai mare parte sunt documentate, unele destul de evidente, iar altele nu atât de mult. Cele evidente includ, de exemplu, că nu ar trebui să apelați nicio funcție tampon din interiorul apelului BV, precum și să scrieți datele de ieșire de acolo.

Capcanele neevidente includ faptul că unele Funcții PHP folosesc BV-ul intern pentru ei înșiși, umplându-l și apoi aruncându-l sau returnându-l. În acest caz, următorul buffer este împins pe stivă. LA funcții similare raporta print_r(), highlight_file() Și SoapServer::handle() . Nu ar trebui să le utilizați din interiorul apelului BV - acest lucru poate duce la consecințe imprevizibile.

Concluzie

Stratul de ieșire poate fi comparat cu un fel de rețea care prinde orice posibile scurgeri de ieșire din PHP și le stochează într-un buffer de o dimensiune dată. Când tamponul este plin, acesta este spălat (scris) la nivelul de jos, dacă există unul. Cel puțin la cel mai mic disponibil - la tamponul SAPI. Utilizatorii pot controla numărul de buffere, dimensiunea acestora și operațiunile care pot fi permise în fiecare strat de buffer (spălare, spălare sau ștergere). Acesta este un instrument foarte flexibil care permite, de exemplu, creatorilor de biblioteci și cadre să controleze complet fluxul de ieșire, direcționându-l către un buffer global și procesându-l acolo. În acest caz, PHP însuși reglementează ordinea în care sunt trimise anteturile și fluxul de ieșire.

În mod implicit, există un buffer de ieșire, controlat de trei setări în fișierul ini. Este proiectat în așa fel încât să efectueze operațiuni de scriere mai rar și să nu acceseze prea des stratul SAPI și, prin urmare, rețeaua. Aceasta este pentru îmbunătățire performanța generală. De asemenea extensii PHP poate declara apeluri inverse care rulează în fiecare buffer - de exemplu, pentru compresia datelor, înlocuirea șirurilor, gestionarea antetului HTTP și multe alte operațiuni.

De ce este nevoie de buffering de ieșire în PHP? Ce este? Cum se implementează? Veți găsi răspunsuri la aceste întrebări în articolul nostru. Acum vom arunca o privire mai atentă la aplicarea practică a php buffering și vom vedea exemple reale. Ca în orice afacere, să ne stabilim obiective și să le atingem încetul cu încetul:

Cuvântul buffering vorbește de la sine, înseamnă că copiem ceva și îl plasăm într-un buffer. În php, tamponarea vă permite să copiați o anumită parte a conținutului de ieșire (html) în browser, să o procesați cu funcțiile de care avem nevoie și să o afișați utilizatorului. De ce avem nevoie de asta? De exemplu, puteți implementa sau înlocui unele entități cu altele sau orice altceva. Să ne uităm la utilizarea tamponării PHP mai detaliat în ultimul paragraf al articolului.

Implementarea buffering-ului de ieșire în PHP

Bufferingul începe cu funcția ob_start(); După declararea acestuia, tot ceea ce este afișat în fereastra browserului va fi stocat în tampon. Argumentul callback este o funcție definită de utilizator prin care textul de ieșire poate fi trecut și procesat, ar trebui să returneze un singur șir.

ob_end_clean(); - finalizează tamponarea și șterge tamponul, dar nimic nu este trimis către browser.

Există multe funcții pentru lucrul cu bufferingul de ieșire în php. Acum să-l vedem pe cel mic exemplu practic pentru o mai mare claritate a chestiunii. De exemplu, generați o pagină, dar trebuie să înlocuiți toate literele „е” din textul paginii cu literele „e”.

pagina este generată;

$pagina = ob_get_contents();

$pagina = str_inlocuire("е", "е", $pagina);

Aplicarea tamponării de ieșire

Să ne uităm la unele aspecte practice aplicarea tamponării de ieșire. După cum am menționat deja, probabil că avem o parte din rezultat cod htmlși sau tot codul de ieșire. Ce poți face cu ea?

Implementarea actualizării automate pe site-ul dvs.

Actualizare în sensul actualizării conținutului. După ce am urmărit prelegerile lui Kashirin, am învățat că pentru ca pagina de site să fie actualizată în ochi robot de căutare, este necesar ca 25% din continutul paginii sa se modifice radical. La început am creat pur și simplu un bloc de anunțuri care afișa 25% din caracterele din articol, blocul era același pe toate paginile, actualizat o dată pe zi, selectat aleatoriu din masa tuturor articolelor. Arăta așa:

Dar a fost o problemă, un articol avea 1500 de caractere, altul avea 10.000 de caractere, iar dacă cel cu 10.000 de caractere era selectat ca anunț, iar anunțul era afișat pe acel articol cu ​​1.500 de caractere, atunci s-a dovedit că Blocul de anunțuri avea 5.000 de caractere, acesta este mult mai mult decât articolul în sine. Poate credeți că a fost necesar să aflați numărul de caractere al articolului original și să afișați de 4 ori mai puțin în anunț. Și eu m-am gândit așa, dar sunt mult mai mulți factori, precum comentariile, știrile site-ului... În general, aveam nevoie să știu numărul de caractere din întreaga pagină, php buffering sau php output buffering, numiți-o cum doriți, m-a ajutat cu asta. Mai jos este codul cum l-am implementat.

// Textul paginii după ... in general, intreaga pagina pana in locul in care trebuie sa inserati un bloc de anunt

În fișierul anons.php, aflăm numărul de caractere din conținutul paginii fără etichete html folosind funcțiile strip_tags() și strlen(). În continuare, este o chestiune de tehnică, calculăm blocul de anunț, îi scriem codul html în $show_anons și îl atașăm după conținutul tamponat ($buffer). Acesta este modul în care m-a ajutat tamponarea ieșirii în php. Mai jos sunt capturi de ecran ale blocului de anunț scris folosind folosind php tamponare.

Blocuri de anunțuri destul de decente. Actualizarea automată a paginii este organizată, strig Ura pentru php buffering.

Comprimarea codului HTML

Am un articol separat scris despre asta: dar voi oferi exemplu php cod, folosește și tamponarea PHP.

[^S ]+/s","/[^S ]+","<","1"); return preg_replace($i, $ii, $compress); } ?>

Alte optiuni

După cum puteți vedea, nu există nicio limită pentru utilizarea tamponării de ieșire în PHP. Cu siguranță ai deja propriile tale idei despre cum să implementezi anumite lucruri pe site-ul tău. Vă mulțumesc pentru atenție, sper că articolul meu v-a fost de folos. Apropo, dacă aveți alte idei despre aplicații php tamponare, scrieți în comentariile de mai jos.

  • Blogul companiei Mail.ru Group
    • Traducere

    În acest articol vreau să vorbesc despre cum este implementat stratul „buffering de ieșire” în PHP, cum funcționează și cum să interacționăm cu el din PHP. Nu este nimic complicat în acest strat, dar mulți dezvoltatori fie nu înțeleg deloc cum să-l gestioneze, fie nu au o claritate completă. Tot ceea ce voi scrie se aplică pentru versiunea PHP 5.4 și superioară. De atunci s-au schimbat multe lucruri legate de tamponul de ieșire (OB). De fapt, această funcționalitate a fost complet rescrisă, astfel încât compatibilitatea cu versiunea 5.3 a fost păstrată doar parțial.

    Ce este un buffer de ieșire?

    Fluxul de ieșire în PHP conține octeți, de obicei sub formă de text, pe care dezvoltatorul trebuie să îi afișeze pe ecran. Cel mai comun design folosit pentru aceasta este ecou sau printf() . În primul rând, trebuie să înțelegeți că orice funcție care scoate ceva va folosi BV din zona PHP. Dacă vorbim despre extensii pentru PHP, atunci puteți obține acces la funcții care scriu direct în SAPI, ocolind orice BV din amonte. API-ul C este documentat în lxr.php.net/xref/PHP_5_5/main/php_output.h și puteți obține o mulțime de informații de aici, cum ar fi dimensiunea implicită a bufferului.

    Al doilea punct important: stratul BV nu este singurul strat în care datele de ieșire sunt stocate în tampon.

    Și al treilea: în funcție de SAPI-ul pe care îl utilizați (web sau cli), stratul BV se poate comporta diferit.

    Mai jos este o diagramă care vă va ajuta să înțelegeți toate cele de mai sus:

    Aici vedem că PHP folosește trei straturi logice de buffering pentru a controla ieșirea. Două dintre ele aparțin aceluiași „buffer de ieșire”, iar al treilea aparține SAPI. Când fluxul de ieșire părăsește domeniul PHP pentru a ajunge la nivelul inferior al arhitecturii, pe parcurs pot apărea noi buffere: buffer terminal, buffer FastCGI, buffer server web, buffer sistem de operare, tampon stivă TCP/IP. Nu uita asta. Deși în scopul acestui articol vom vorbi doar despre PHP, vor exista o mulțime de alte software-uri în stiva pe calea datelor către stratul inferior și utilizator.

    O notă importantă despre SAPI CLI: dezactivează orice buffer de ieșire implicit în PHP setând parametrul ini la output_buffering valoarea 0. Deci, până când scrieți manual funcții în CLI ob_() , în mod implicit, toate datele de ieșire vor merge direct la stratul SAPI. Mai mult, în CLI pentru parametru implicit_flush valoarea 1 este strict specificată Dezvoltatorii înțeleg întotdeauna greșit esența acestui parametru, deși codul spune absolut fără ambiguitate: când. implicit_flush este setat la 1, tamponul stratului SAPI este golit la fiecare scriere. Adică, de fiecare dată când scrieți date pentru ieșire folosind CLI SAPI, acestea sunt trimise imediat la nivelul inferior, unde sunt scrise în stdout și apoi șters.

    Stratul standard de tamponare a ieșirii PHP

    Dacă utilizați SAPI altul decât CLI, dar de exemplu PHP-FPM, puteți experimenta cu trei parametri ini legați de buffer:
    • output_buffering
    • implicit_flush
    • handler_ieșire
    Vă rugăm să rețineți că utilizați cu ele ini_set() nu vor avea niciun efect deoarece valorile lor sunt citite când PHP pornește, înainte ca acesta să poată rula orice script. Dacă utilizați ini_set() cu oricare dintre acești parametri, schimbă valoarea, dar nu va mai fi folosit nicăieri. Este prea târziu - stratul BV este deja lansat și activ. Puteți modifica acești parametri editând php.ini sau folosind cheia –d la binarul PHP.

    În mod implicit, în php.ini, care vine cu PHP, output_buffering a atribuit valoarea „4096” (octet). Dacă nu utilizați php.ini (sau rulați PHP cu cheia –n ), atunci valoarea implicită va fi „0”, adică dezactivată. Dacă codificați valoarea „On”, atunci se va atribui dimensiunea standard a bufferului de ieșire (16 KB).

    După cum probabil ați ghicit, utilizarea unui buffer de ieșire într-un mediu web are un avantaj de performanță. Cei 4 KB inițiali sunt mulți, ceea ce înseamnă că puteți scrie până la 4096 de caractere ASCII înainte ca PHP să înceapă să comunice cu stratul SAPI de bază. Pe web, trimiterea datelor octet cu octet, dimpotrivă, nu îmbunătățește performanța. Este mult mai bine dacă serverul trimite tot conținutul în masă sau în părți mari. Cu cât straturile comunică mai puțin frecvent, cu atât mai bine din punct de vedere al performanței. Prin urmare, asigurați-vă că utilizați un buffer de ieșire. PHP își va trimite conținutul la sfârșitul solicitării și nu va trebui să faceți nimic pentru aceasta.

    În capitolul anterior, am menționat implicit_flush în contextul CLI. În cazul oricărui alt SAPI implicit_flush inițial dezactivată. Acest lucru este bun, deoarece este puțin probabil să primiți o resetare SAPI imediat după ce ați scris-o. Pentru protocolul FastCGI, spălarea poate fi comparată cu completarea și trimiterea unui pachet după fiecare scriere. Cu toate acestea, este mai bine să umpleți mai întâi complet tamponul FastCGI și abia apoi să trimiteți pachete. Dacă trebuie să resetați manual tamponul SAPI, utilizați funcția PHP pentru a face acest lucru culoare() . Pentru a reseta după fiecare intrare, așa cum sa menționat mai sus, puteți utiliza parametrul implicit_flush în php.ini. Ca opțiune - un apel unic la funcția PHP ob_implicit_flush() .

    Un apel invers poate fi aplicat conținutului tamponului înainte de a fi scos. handler_ieșire . În general, datorită extensiilor PHP, ne sunt disponibile multe apeluri inverse (utilizatorii le pot scrie și, despre asta voi vorbi în capitolul următor).

    • ob_gzhandler: compresie de ieșire folosind ext/zlib
    • mb_output_handler: traducerea codificării caracterelor folosind ext/mbstring
    • ob_iconv_handler: traducerea codării caracterelor folosind ext/iconv
    • ob_tidyhandler: dezinfectează ieșirea HTML cu ext/tidy
    • ob__handler: compresie de ieșire folosind ext/http
    • ob_etaghandler: generarea automată a antetelor ETag folosind ext/http

    Puteți folosi un singur apel invers, care va primi conținutul buffer-ului și va face transformări utile pentru ieșire, ceea ce este o veste bună. Pentru a analiza datele pe care PHP le trimite către serverul web, care apoi le trimite utilizatorului, este util să folosiți callback-uri și buffer-uri de ieșire. Apropo, prin „ieșire” mă refer atât la antet, cât și la corp. Anteturile HTTP fac, de asemenea, parte din stratul de buffering de ieșire.

    Corp și anteturi

    Când utilizați un buffer de ieșire (fie unul personalizat sau unul dintre cele standard), puteți trimite anteturi HTTP și conținut după cum doriți. Orice protocol necesită trimiterea mai întâi a antetului și apoi a corpului, dar PHP însuși va face acest lucru pentru dvs. dacă utilizați stratul BV. Orice funcție PHP care funcționează cu anteturi ( header(), setcookie(), session_start() ), folosește de fapt funcția internă sapi_header_op(), care pur și simplu umple buffer-ul antetului. Dacă apoi scrieți datele de ieșire, de exemplu, folosind printf() , apoi vor fi scrise într-unul dintre bufferele de ieșire corespunzătoare. Și în timp ce trimitem mai întâi tamponul PHP

    Trimite antetele și numai apoi corpul. Dacă nu vă place acest tip de îngrijire de la PHP, atunci va trebui să dezactivați complet stratul BV.

    Buffere de ieșire personalizate

    Să ne uităm la exemple despre cum funcționează acest lucru și ce puteți face. Rețineți că, dacă doriți să utilizați stratul standard de buffering PHP, nu veți putea folosi CLI deoarece este dezactivat ca strat.

    Mai jos este un exemplu de lucru cu un nivel PHP standard folosind serverul web intern SAPI:

    /* rulează astfel: php -doutput_buffering=32 -dimplicit_flush=1 -S127.0.0.1:8080 -t/var/www */ echo str_repeat("a", 31); somn(3); ecou „b”; somn(3); ecou „c”;

    Am rulat PHP cu un buffer de ieșire standard de 32 de octeți și i-am scris imediat 31 de octeți înainte de a începe întârzierea de execuție. Ecranul este negru, nu a fost trimis încă nimic. Apoi acțiune dormi() se termină și scriem un alt octet, umplând astfel complet tamponul. După aceea, se aruncă imediat în tamponul stratului SAPI, care se aruncă în ieșire, de atunci implicit_flush are valoarea 1. Linia apare pe ecran aaaaaaaaaa(31 ori)b , după care începe să funcționeze din nou dormi() . Când se termină, tamponul gol de 31 de octeți este umplut cu un singur octet, după care PHP iese și resetează tamponul. apare pe ecran Cu .

    Așa arată un buffer PHP standard fără a apela nicio funcție ob. Nu uitați că acesta este un buffer standard, adică este deja disponibil (pur și simplu nu puteți utiliza CLI-ul).

    Acum cu ajutorul ob_start() puteți rula buffer-uri de utilizator și câte aveți nevoie până când memoria se epuizează. Fiecare buffer va fi plasat în spatele celui precedent și imediat aruncat în următorul, ceea ce va duce treptat la o revărsare.

    Ob_start(funcție($ctc) ( static $a = 0; return $a++ . "- " . $ctc . "\n";), 10); ob_start(funcție($ctc) ( return ucfirst($ctc); ), 3); ecou „fo”; somn(2); ecou „o”; somn(2); ecou "barbazz"; somn(2); ecou „bună ziua”; /* 0- FooBarbazz\n 1- Bună ziua\n */

    Dispozitiv tampon de ieșire

    După cum am spus deja, începând cu versiunea 5.4, mecanismul de buffering de ieșire a fost complet rescris. Înainte de aceasta, codul era foarte neglijent, multe lucruri nu erau ușor de făcut și apăreau adesea erori. Puteți citi mai multe despre asta la link. Noua bază de cod este mult mai curată, mai bine organizată și are funcții noi. Adevărat, compatibilitatea cu versiunea 5.3 este asigurată doar parțial.

    Poate că una dintre cele mai plăcute inovații este că extensiile își pot declara acum propriile callback-uri și buffer-uri de ieșire care intra în conflict cu callback-urile altor extensii. Anterior, era imposibil să se gestioneze pe deplin situațiile în care și alte extensii își puteau declara apelurile înapoi.

    Iată un exemplu rapid care arată cum puteți înregistra un apel invers care convertește datele în majuscule:

    #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_ini.h" #include "main/php_output.h" #include "php_myext.h" static int myext_output_handler(void **nimic , php_output_context *output_context) ( char *dup = NULL; dup = estrndup(output_context->in.data, output_context->in.used); php_strtoupper(dup, output_context->in.used); output_context->out.data = dup; output_context->out.used = output_context->in.used output_context->out.free = 1; ) -1, myext_output_handler, /* PHP_OUTPUT_HANDLER_DEFAULT_SIZE */ 128, PHP_OUTPUT_HANDLER_STDFLAGS; încearcă */ NULL, NULL, /* Modulul shutdown */ PHP_RINIT(myext), /* Request init */ NULL, /* Request shutdown */ NULL, /* Informații modul */ "0.1", /* Înlocuiește cu numărul versiunii pentru extensia ta */ STANDARD_MODULE_PROPERTIES ) ; #ifdef COMPILE_DL_MYEXT ZEND_GET_MODULE(myext) #endif

    Stânci subacvatice

    În cea mai mare parte sunt documentate, unele destul de evidente, iar altele nu atât de mult. Cele evidente includ, de exemplu, că nu ar trebui să apelați nicio funcție tampon din interiorul apelului BV, precum și să scrieți datele de ieșire de acolo.

    Unul dintre capcanele mai puțin evidente este că unele funcții PHP folosesc valoarea internă pentru ele însele, completând-o și apoi eliminând-o sau returnând-o. În acest caz, următorul buffer este împins pe stivă. Funcții similare includ print_r(), highlight_file() Și SoapServer::handle() . Nu ar trebui să le utilizați din interiorul apelului BV - acest lucru poate duce la consecințe imprevizibile.

    Concluzie

    Stratul de ieșire poate fi comparat cu un fel de rețea care prinde orice posibile scurgeri de ieșire din PHP și le stochează într-un buffer de o dimensiune dată. Când tamponul este plin, acesta este spălat (scris) la nivelul de jos, dacă există unul. Cel puțin la cel mai mic disponibil - la tamponul SAPI. Utilizatorii pot controla numărul de buffere, dimensiunea acestora și operațiunile care pot fi permise în fiecare strat de buffer (spălare, spălare sau ștergere). Acesta este un instrument foarte flexibil care permite, de exemplu, creatorilor de biblioteci și cadre să controleze complet fluxul de ieșire, direcționându-l către un buffer global și procesându-l acolo. În acest caz, PHP însuși reglementează ordinea în care sunt trimise anteturile și fluxul de ieșire.

    În mod implicit, există un buffer de ieșire, controlat de trei setări în fișierul ini. Este proiectat în așa fel încât să efectueze operațiuni de scriere mai rar și să nu acceseze prea des stratul SAPI și, prin urmare, rețeaua. Acest lucru se face pentru a îmbunătăți performanța generală. Extensiile PHP pot declara, de asemenea, apeluri inverse care rulează în fiecare buffer - de exemplu, pentru compresia datelor, înlocuirea șirurilor, gestionarea antetului HTTP și multe alte operațiuni.

    Tampon Windows Exchange vă permite să mutați fragmente de text sau date specifice între aplicații deschise. Cu toate acestea, poate fi făcut și mai eficient!

    Îți amintești de vechea glumă când un profesor a întrebat un student care era metoda de a o scrie? teza? „CTRL+C - CTRL+V”, a răspuns studentul. Dar, cu siguranță, el, ca mulți alți utilizatori de PC, nu s-a gândit la modul în care funcționează aceste comenzi rapide de la tastatură „magice”, permițându-vă să copiați și să lipiți aproape orice date...

    Și funcționează datorită unui lucru atât de minunat precum clipboard-ul. Și astăzi ne vom da seama ce este, unde să-l căutăm și cum să-ți optimizezi munca cu el!

    Ce este un clipboard

    Clipboard este o funcție a sistemului de operare (nu numai Windows) care vă permite să stocați temporar o anumită bucată de date (sau chiar un fișier întreg) într-o zonă special desemnată memorie cu acces aleator. Mai mult, dacă dimensiunea fișierului este mai mare decât memoria RAM de pe computer, atunci fișierul de paginare (dacă este activ) este folosit ca stocare temporară suplimentară.

    Mai întâi plasați câteva informații în clipboard evidenţierea se poate realiza prin operatii copierea sau tăiere. În acest caz, copierea nu afectează originalul, plasând doar o copie a acestuia în buffer, iar tăierea îndeplinește funcția de a muta originalul, ștergându-l. Puteți obține date din clipboard cu comanda inserții. Toate comenzile de mai sus pot fi apelate în mai multe moduri:

    1. Cu ajutor meniul contextual . Selectați obiectele de copiat și faceți clic pe ele Click dreapta soareci. În meniul care se deschide, puteți selecta „Copy” și „Cut” sau „Paste”.
    2. Folosind meniul „Editare”.. Majoritate programe Windows au o bară de meniu specială în partea de sus. În această linie, de regulă, există o secțiune „Editare”, care conține comenzile de care avem nevoie.
    3. Utilizarea tastelor rapide. Cel mai cale rapidă interacționarea cu clipboard - folosind comenzile rapide de la tastatură:
    • CTRL+X (SHIFT+DEL) - „Tăiați”;
    • CTRL+C (CTRL+Insert) - „Copiere”;
    • CTRL+V (SHIFT+Insert) - „Insert”.

    O altă caracteristică a clipboard-ului este că poate stoca același obiect copiat în mai multe formate simultanși oferă programului care l-a solicitat formatul care fie este asociat programului în mod implicit, fie are cea mai mare prioritate și conținut de informații.

    Să aducem cel mai simplu exemplu. Să presupunem că am copiat un șir de text formatat de pe un site web. Dacă lipiți acest text în procesor de cuvinte, ca Microsoft Office Cuvânt sau OpenOffice Writer atunci o vom lua copie originala păstrând în același timp toate caracteristicile de formatare (îndrăzneală text, spațiere între rânduri etc.).

    Dacă lipiți aceeași bucată de text în editor de text Clasa Notepad, textul în sine va fi salvat, dar formatarea acestuia nu, deoarece Notepad nu acceptă formatarea și va solicita versiunea neformatată din clipboard. În cele din urmă, dacă încercăm să inserăm textul nostru în unele editor grafic, atunci ori nu vor introduce absolut nimic, ori ne vor returna inscripția noastră în formă rasterizată!

    Astfel, vedem că o funcție simplă, la prima vedere, binecunoscută a sistemului nu este atât de simplă dacă aprofundezi! Deci hai sa aprofundam putin :)

    Caracteristici ale clipboard-ului în diferite versiuni de Windows

    În Windows 2000 și XP, a existat o modalitate de a vizualiza și gestiona conținutul clipboard-ului. Era un utilitar numit „Exchange Folder”. A fost lansat folosind fisier executabil la adresa C:\Windows\System32\clipbrd.exe (WIN+R - clipbrd.exe - ENTER):

    Acest utilitar permitea nu numai vizualizarea a ceea ce era în acest momentîn buffer, dar a făcut posibilă și salvarea datelor într-un fișier (format CLP), restaurarea acestuia dintr-un fișier salvat anterior, ștergerea tamponului și chiar schimbarea formatului de date pentru inserare (consultați meniul „Vizualizare” din captura de ecran de mai sus).

    Din versiunile ulterioare Utilitarul Windows, din anumite motive, a fost șters (deși, dacă doriți, puteți și programul va funcționa chiar și pe Windows 10). În schimb, tot ce rămâne este o mică aplicație de consolă la C:\Windows\System32\clip.exe. Nu îl puteți rula direct, dar îl puteți apela din linia de comandă (WIN+R - cmd - ENTER):

    Un mic ajutor cu comanda „clip” (sau „clip.exe”) ne va arăta că comanda nu are niciun parametru. Vă permite să redirecționați conținutul unui buffer către un fișier (de obicei format TXT) sau citiți-l dintr-un fișier creat anterior, specificând direcția de copiere folosind o paranteză triunghiulară ( clip > fișier- scrierea într-un fișier sau clamă< файл - citirea dintr-un fișier). Al doilea exemplu de utilizare a comenzii este copierea conținutului folderului specificat înainte de bara verticală ( adresa_dosarului | clamă).

    Cu toate acestea, există un secret care vă permite să utilizați doar ultimul exemplu clipboard clar(util dacă este stocat acolo dosar mare). Pentru a face acest lucru, introduceți următoarele pe linia de comandă: ecoul oprit | clamă. După cum puteți vedea, în loc de adresa folderului pentru copiere, am intrat în standard comanda consolei dezactivați ieșirea datelor și plasați-o într-un buffer. Deoarece comanda nu returnează date, pur și simplu șterge clipboard-ul:

    Ca să nu „cufundăm” în Linie de comanda Pentru a șterge tamponul, puteți crea o comandă rapidă specială care o va face automat! Pentru a face acest lucru, specificați ca obiect rândul următor: C:\Windows\System32\cmd.exe /c „echo off | clip”și salvați comanda rapidă creată. Vă rugăm să rețineți că exemplul de mai sus nu va funcționa pe Windows XP, deoarece în loc de utilitarul consolei CLIP este folosit discutat mai sus program de grafică Clipbrd.exe, care gestionează clipboard-ul!

    Programe pentru lucrul cu clipboard

    Clipboard-ul standard Windows este un lucru foarte util. Dar, din păcate, nu este lipsită de deficiențe. Principalul este că memoria tampon poate stoca doar un set de date, care este imediat suprascris informație nouă, dacă copiem altceva. De asemenea, uneori este necesar să inserați anumite bucăți de date și ar fi bine dacă buffer-ul le-ar putea salva chiar și după repornirea computerului.

    Mulți oameni au avut gânduri similare, așa că astăzi există destul de mulți specialiști și solutii integrate pentru a îmbunătăți performanța clipboard-ului. Și aș vrea să vorbesc mai detaliat despre unele dintre ele.

    Comutator Punto

    Cu siguranță mulți dintre voi cunoașteți (și poate chiar folosiți) un program minunat pentru comutare automată dispunerea tastaturii Comutator Punto. Cu toate acestea, pe lângă schimbarea tastaturii, are multe altele funcții utile, inclusiv pentru a extinde capacitățile clipboard-ului:

    În primul rând, programul poate fi implementat multitampon cu amintirea tuturor fragmentelor de text care au fost copiate mai devreme. În al doilea rând, are un modul Jurnal, care vă permite să salvați automat în timpul zilei tot ceea ce a fost introdus de la tastatură sau copiat prin clipboard. Jurnalul este activat într-o secțiune specială a setărilor destul de simplu, dar cu un multibuffer va fi puțin mai dificil...

    Mai întâi trebuie să activăm opțiunea „Monitorizare clipboard”în secțiunea de setări "Sunt comune" pe filă "Adiţional"(vezi captura de ecran de mai sus). Al doilea pas este să configurați o comandă rapidă de la tastatură care va deschide accesul la istoricul clipboard-ului. Pentru a face acest lucru, accesați secțiunea de setări „Taste rapide”și atribuiți o combinație funcției „Afișează istoricul clipboardului”:

    Acum, la apăsarea specificată Comanda rapidă de la tastatură va apărea o fereastră mică asemănătoare unui meniu contextual, care va stoca fragmente de text, copiat anterior în clipboard, precum și funcția de ștergere a tamponului. A introduce textul dorit doar faceți clic pe el:

    Utilizare Comutator Punto ca manager de clipboard este avantajos prin faptul că nu trebuie să instalați niciunul utilitati suplimentare. Personal, am configurat un multibuffer pe toate computerele cu care lucrez, pentru că este foarte convenabil. In orice caz, această decizie de asemenea este si o serie de dezavantaje...

    În primul rând, Punto Switcher nu poate salva fragmente de imagine. În al doilea rând, nu are un mecanism convenabil pentru restabilirea conținutului buffer-ului din sesiunile anterioare (tragerea înregistrările necesare din Jurnal nu contează). Și, în sfârșit, din când în când funcția de urmărire clipboard este pur și simplu dezactivată de din motive necunoscute... Așa că ar putea merita să te uiți și la unele utilități foarte specializate.

    CLCL

    În primul rând, vreau să vă atrag atenția asupra unui program de origine japoneză - CLCL:

    Acest manager de clipboard este considerat pe drept unul dintre cele mai bune, deoarece combină un set aproape ideal de caracteristici:

    • dimensiune mică (doar aproximativ 300 KB cu toate pluginurile!);
    • suport atât pentru text, cât și pentru date grafice;
    • prezența istoricului de copiere;
    • funcția de inserare a șabloanelor utilizate frecvent;
    • managementul tastelor rapide.

    În plus, CLCL este program portabilși nu necesită instalare pentru a funcționa. Acest lucru vă permite să îl configurați o singură dată și apoi să îl transferați pe orice computer cu care lucrați, menținând accesul la funcțiile familiare oriunde v-ați afla.

    De remarcat, totuși, CLCL are mai multe versiuni. Versiunea în limba rusă 1.1.2 (care se află pe site-ul nostru), din păcate, nu a fost actualizată din 2005. Noua ramură a programului (2.0 din 2015) există doar în limba engleză și japonez. Noul CLCL diferă de implementarea sa anterioară într-un set extins de formate acceptate (versiunea rusă a acceptat doar hărți de bit, text simplu și Unicode), precum și un meniu mai structurat. În caz contrar, nu există modificări speciale, așa că puteți utiliza cu succes versiune veche(până îl rusific pe cel nou :))).

    Idem

    Dacă nu vă este frică de o mulțime de setări și doriți să profitați la maximum de clipboard, atunci s-ar putea să vă placă programul:

    În ceea ce privește funcționalitatea, Ditto este aproape la egalitate cu CLCL. Ieșit din cutie, acceptă toate formatele posibile de clipboard (deși multe dintre ele sunt dezactivate implicit), are o funcție de memorare a fragmentelor copiate și un sistem de lipire șabloane personalizate. În plus, se mândrește cu:

    • prezența unei căutări pentru clipuri salvate (cum sunt numite fragmentele copiate aici);
    • gruparea clipurilor;
    • importul și exportul de copii salvate ale clipboard-ului;
    • sincronizarea conținutului buffer-ului prin rețea;
    • suport pentru lucrul cu mai multe clipboard-uri și comutarea între ele.

    Spre deosebire de CLCL, Ditto are în mod semnificativ dimensiuni mari(aproximativ 15 MB). Dar funcționalitatea este, în principiu, mult mai largă. În plus, Ditto este actualizat în mod regulat și are versiuni separate atât pentru sistemele pe 32 de biți, cât și pentru cele pe 64 de biți (inclusiv portabile). Singurul dezavantaj al programului pentru un utilizator vorbitor de limbă rusă este că interfața nu este complet rusificată, ceea ce, în combinație cu o cantitate mare setările pot fi oarecum confuze pentru un începător nepregătit. Prin urmare, putem recomanda mai degrabă Ditto utilizatori încrezători PC.

    Clipdiary

    Dacă sunteți în căutarea unui program ușor de utilizat utilizator simplu Interfață în limba rusăși funcționalitate puternică, ar trebui să acordați atenție Clipdiary:

    Programul este în general plătit, dar este disponibil pentru utilizatorii vorbitori de limbă rusă sub licență gratuită Pentru utilizare necomercială. Pentru a elimina limita de 30 de zile Perioada de probă accesați meniul „Ajutor” din fereastra principală și faceți clic pe „Activați gratuit”. Se va deschide o pagină web, în ​​partea de jos a căreia va trebui să faceți clic pe butonul „Obțineți cheia”, apoi copiați setul de caractere rezultat și lipiți-l în fereastra de înregistrare Clipdiary.

    După înregistrare, veți pierde numărătoarea inversă a zilelor din perioada de probă și veți putea folosi toate caracteristicile programului fără restricții:

    • caută în baza de date a clipurilor salvate;
    • alocarea de comenzi rapide la clipuri pentru acces rapid;
    • protecția cu parolă a bazei de date;
    • selectarea formatului de inserare;
    • Sortare și prezentare convenabilă a clipurilor.

    Clipdiary are un mod destul de simplu și interfață ușor de utilizat, care este combinat cu o funcționalitate foarte bună. De aceea acest program Potrivit la fel de bine atât pentru începători, cât și pentru utilizatorii avansați. Apropo, are și o versiune portabilă care poate funcționa fără instalare. Singurul dezavantaj este restricția de utilizare în organizațiile comerciale.

    ClipAngel

    În cele din urmă, aș dori să menționez o altă implementare națională demnă a unui manager de clipboard:

    Programul a fost creat abia la începutul anului 2017, dar în scurtul timp de dezvoltare a reușit deja să „crească” într-un mod complet serios și instrument convenabil, care poate concura cu analogi celebri! Arsenalul programului include:

    • salvarea automată a istoricului clipboard-ului;
    • ocazia de a sărbători utilizare rapidă clipurile cele mai des folosite;
    • funcție de comparare a fragmentelor de clip pentru a identifica inconsecvențele;
    • funcții convenabile pentru sortarea listei istorice și căutarea prin ea;
    • selectarea formatului de inserare a clipului, precum și a acestuia traducere rapidă pe net.

    ClipAngel acceptă nativ toate formatele de clipboard și are o interfață de configurare foarte simplă. În plus, programul are încorporat un mic editor de text care poate fi folosit pentru a edita rapid textul din clipurile salvate! Pentru a accesa cele mai populare funcții, puteți seta propriile taste rapide.

    ClipAngel nu necesită instalare, iar dimensiunea sa de 3 MB este semnificativ mai mică decât majoritatea analogilor. Singurul dezavantaj programul este că este scris în .NET Framework 4.5, prin urmare consumă relativ mai multe resurse PC decât aplicații similare, creat în limbi de nivel inferior.

    concluzii

    Clipboard - foarte funcție convenabilă sistem de operare. Cu toate acestea, după cum putem vedea, există suficiente modalități de a-l îmbunătăți, extinzând semnificativ funcționalitatea și confortul. Toate programele de gestionare a istoricului bufferului discutate mai sus sunt candidați demni pentru rolul de manager de clipboard, așa că alegerea oricăruia dintre ele va fi decizia corectă!

    Obțineți un mic „ajutor” pe computer și uitați de copierea și lipirea constantă. Asta este fragmente necesare textul și imaginile vă vor fi disponibile în doar două clicuri!

    P.S. Permisiune acordată pentru copiere și citare liberă. Acest articol cu condiția ca un link activ deschis către sursă să fie indicat și paternitatea lui Ruslan Tertyshny să fie păstrată.

    Aș dori să dedic acest articol unei întrebări care îngrijorează mulți utilizatori începători -

    Probabil că ați auzit foarte des în conversațiile unor informaticieni „cu experiență” că au copiat ceva în clipboard, sau în articole, sau în cărți, erau cuvinte despre chestia asta, dar nu s-a explicat ce era. Deci aceasta și unde este clipboard-ul , acum va spun.

    Ce este un clipboard, în limbaj normal?

    Mai întâi voi da definiția care este dată în toate dicționare de calculator. Clipboard este o stocare intermediară de date oferită de softwareși destinate transferului sau copierii între aplicații sau părți ale aceleiași aplicații. O aplicație poate folosi propriul buffer, accesibil doar în interiorul său, sau unul partajat furnizat de sistemul de operare sau alt mediu printr-o interfață specifică.

    Acum voi explica cu propriile mele cuvinte.

    Clipboard- aceasta este o parte invizibilă a memoriei în care informațiile pe care le-ați copiat sunt stocate temporar înainte de a le lipi în locația dorită. Adică, ați selectat orice fișier(e), folder(e), text sau altceva, ați făcut clic dreapta, apoi ați făcut clic pe elementul „Copiere” sau pur și simplu ați apăsat Ctrl+C ( tastă rapidă), citeşte mai mult.

    Au fost copiate în partea invizibilă

    După care, ați mers în locul dorit, ați făcut clic dreapta și selectați „Lipire” sau ați apăsat combinația Ctrl + V de pe tastatură.

    Și acum, ceea ce ați copiat este lipit acolo unde aveți nevoie. Asta e tot. Sper că înțelegeți unde este clipboardul - nicăieri :).

    Mai mult, puteți lipi informațiile copiate de mai multe ori. Este stocat în această parte cea mai invizibilă a memoriei până când copiați ceva nou.

    Adică ai copiat folderul, a fost salvat în clipboard, l-ai lipit într-un loc, în altul, în al cincilea, în al zecelea. Și apoi au copiat un alt folder și astfel, primul este șters automat din el.

    Și, de asemenea, în buffer, informațiile copiate sunt stocate până când reporniți sau opriți computerul. Acestea. Să presupunem că ai copiat ceva și ai fost distras, ai plecat de la computer, ai fost plecat pentru o oră, două, cinci, te întorci și poți lipi în siguranță informațiile copiate în locul potrivit. Doar cu condiția să nu opriți sau reporniți computerul.

    Apropo, uneori, clipboard Ei îl numesc pur și simplu un buffer, doar ca să știi.

    Cum să ștergeți clipboard-ul de fișierele copiate?

    Sincer, curățarea clipboard-ului, nu ar trebui să vă provoace dificultăți. Trebuie să curățați clipboard-ul deoarece spațiul invizibil în care sunt stocate informațiile copiate ocupă și memorie pe computer, iar această memorie este ocupată pe unitatea de sistem (pe unitatea C, puteți citi mai multe despre el în acest articol -). Și dacă ai copiat un fișier uriaș, de exemplu un film Rezoluție înaltă, apoi după copiere, este mai bine să ștergeți clipboard-ul, astfel încât să nu încarce memorie.

    Mulți maeștri oferă diverse programeîn acest scop, dar există o metodă mai simplă. După ce ați copiat o cantitate mare de informații din clipboard în locul în care aveți nevoie, pur și simplu selectați un text (puteți avea chiar și un cuvânt), faceți clic dreapta, apoi „Copiere” sau doar apăsați Ctrl+ C și gata. Acel fișier uriaș va dispărea și în locul lui va apărea o mică bucată de text care nu cântărește aproape nimic.

    Trebuie să ștergeți clipboard-ul doar când copiați ceva care cântărește mult, nu este nevoie să îl ștergeți de fiecare dată.

    Plus.

    În întregime, versiunea anterioara Articolul pe care l-ați citit mai sus a provocat un întreg război în comentarii, iar acum vă voi spune de ce.

    Am spus deja de multe ori, și repet regulat în articole, că acest site este pentru începători. Adică, pentru persoanele care fie nu știu deloc un computer, fie care nu știu să folosească un computer. Dar aproape de fiecare dată, în comentarii, sunt „băieți deștepți” care aruncă cu noroi în articol. Ei spun că nu este scris profesional. Domnilor, „băieți deștepți”, voi repeta încă o dată - acest site este pentru începători, iar sarcina mea este să dau un răspuns la întrebarea pe care o pun, astfel încât să o înțeleagă și să nu se încurce.

    Ți-aș spune unde să mergi oameni buni”, care sunt exprimate în comentarii, gândindu-mă că nu știu unde este clipboard-ul, dar trimiterea lor într-o călătorie erotică pe jos este puțin probabil să mă ridice în ochii oamenilor care sunt normali în privința acestui articol.

    Principalul subiect de dezbatere în comentariile articolului a fost răspunsul la întrebarea - unde este acesta clipboard? Și de când acolo a început un întreg război, am decis să răspund în detaliu această întrebare.

    Unde este clipboard-ul în Windows 7 și Vista?

    Voi începe să răspund la această întrebare nu cu Windows 7 și Vista, ci cu XP.

    În Windows XP, clipboard-ul a fost ușor de găsit. Tot ce ai copiat a fost stocat într-un fișier clipbrd.exe. Calea către aceasta a fost așa: Drive C ( disc de sistem) -> folder WINDOWS -> folder system32 -> clipbrd.exe. Și dacă l-ai deschide, ai găsi în el textul sau imaginea (sau orice altceva) pe care ai copiat-o .

    Cu privire la sisteme Windows 7 și Vista, atunci nu există deja niciun fișier clipbrd.exe, există un fișier clip.exe iar dacă încerci să-l deschizi, nu vei reuși. Deși când treci mouse-ul peste acest fișier, va apărea o fereastră explicativă cu o descriere și va spune „Clip - copierea datelor în clipboard”. Acest fișier este responsabil pentru clipboard în Windows 7 și Vista, dar nu există acces la el.

    Puteți, desigur, să copiați fișierul clipbrd.exe în folderul system32 al sistemelor Windows 7 și Vista, există multe instrucțiuni pe Internet, dar întrebarea este - de ce?

    În multe articole despre clipboard, este scris ceva de genul - în Windows XP a existat acest arc functie importanta, dar din anumite motive dezvoltatorii l-au eliminat. Întrebare celor care au făcut diverse plângeri despre asta în comentarii - de ce are nevoie un începător de această funcție? Întrebarea a derutat probabil mulți „oameni inteligenți”, deoarece răspunsul, cel mai probabil, va fi fără echivoc - nu este nevoie. Drept urmare, dacă aș răspunde la întrebarea unde se află clipboard-ul într-un mod similar, aș încurca și mai mult oamenii și, în loc să răspundă, ar avea mizerie în cap. Cu toate acestea, dacă dintr-o dată, dintr-un motiv oarecare, trebuie să luați intrări anterioare din clipboard, atunci această setare este disponibilă în Programul Punto Switcher, puteți citi mai multe despre asta în acest articol -

    Unii utilizatori începători ar putea întreba - de ce nu ne-ați spus imediat că în Windows XP, tampon, îl poți „atinge”? Răspunsul, am spus de mai multe ori, este că utilizatorii începători nu ar trebui să intre fișier Windows, deoarece totul și întregul sistem de operare se află acolo. Doamne ferește, decideți să „editați” ceva sau să ștergeți accidental ceva „inutil”, atunci întreaga funcționalitate a sistemului poate fi perturbată. Așa că de îndată ce te uiți la fișierul clipbrd.exe, lasă imediat de acolo pentru a nu face lucruri care, cel mai adesea, se întâmplă întâmplător.

    Ei bine, asta e tot, sper că acest articol vă va fi de folos. Succes tuturor, la revedere!

    P.S. Toate comentariile cu limbaj obscen au fost șterse.