ПредишенСледващото

В тази уводна статия ще разгледаме стандартните функции на PHP за работа с HTTP заглавки. Ние считаме, че подробно плюсовете и минусите на тези функции.

глава () функция

глава () функция пише на заглавната част на масив на ток заглавката на HTTP-отговор веднъж. Функцията има един задължителен аргумент низ низ, който трябва да съдържа глава ред.
Втората опция аргумент Булева замени активира или деактивира пренаписване стойност заглавна режим. Ако аргументът е вярно, тогава новите заглавия ще замени вече се съхраняват в масив от заглавията със същото име. Ако аргументът е лъжа, тогава новата стойност на съществуваща заглавна се добавя към предишното заглавието със запетая. Например: PHP В резултат на заглавията на отговор ще бъде един удар с глава с две HTTP стойности, обаче, ако просто знаят всичко изпратено от стойността на това заглавие, че е по-лесно да го напиша на един ред: PHP

Евентуален трети вътр http_response_code може да съдържа състояние (код на отговор) код, според която лентата на състоянието ще се промени.

Все пак, въпреки факта, че функцията за хедър () приема заглавната лента в суров вид, това не е толкова либерален да пишат заглавия в каквото и да го преминат. Има определени ограничения по отношение на формата на записани заглавия. Ако не са изпълнени изискванията, тя е в най-добрия, да доведе до липса на очакваната линия, която заглавия прехвърлени към клиента. В най-лошия случай, клиентът получава отговор с код за състоянието на 500 Вътрешна грешка в сървъра.
глава () функция са могат да се прехвърлят два вида линии: линия статус и HTTP-глава.
С предадените HTTP-заглавията следните ограничения: Те трябва да съдържа името и стойността на глава, разделени от дебелото черво. Ако няма име или стойност липсва на дебелото черво, а след това тази линия не се счита за една и съща позиция и игнорирани. Освен името на заглавната трябва да съдържа само ASCII символи. Няма други ограничения по отношение на имената и ценности не са налице. Можете да измислите свои собствени заглавия и да ги изпращате на някой те харесва. Според стандартната HTTP протокол, непознати заглавия трябва да бъдат изпратени до всички части на веригата, и браузъри в тълкуването на позиции трябва да ги игнорирате.

Един неоспорими предимства функция глава () е, че тя може да променя HTTP-отговор статус линия. В лентата за състоянието е винаги на първа линия в масива на заглавията и има следния формат: HTTP

протокол версия може да бъде определена например 1.0 или 1.1, а общият като 1.x. Въпреки това, когато се опитват да се напише специален протокол версия, открих, че клиентът продължава да излиза глобален шаблон 1.x. Може би тук не е виновен PHP и Apache сървър, който по някакъв начин се отнася към заглавията преди изпращане.
Статус кодекс - цифров код свързва с определен тип реакция. Обработка на кодове несъществуващи статус зависи от версията на сървъра Apache. По-старите версии не позволяват да изпращате невалиден код на състоянието. Когато се опитате да премине неизвестен статус код (например 430 или 600), клиентът получава отговор с грешка: HTTP

Въпреки това, в новата версия на Apache 2 се допуска за изпращане на кодове несъществуващи статус. "OK", добавя обяснителен фраза, за да несъществуващ код за състоянието на Apache 2.

Разясняване на фразата не може да бъде да се показват. Ако не е преминала, а след това се Apache го dopishet, въз основа на държавния код. Ако премине на някакъв деспотичен обяснителен фраза, той все още ще бъде пренаписана в стандартната фраза на базата на предаден код на състоянието.

В функцията глава () има специална поведение при добавяне глава местоположение. В допълнение към добавянето на тази промяна се отразява заглавие лентата на състоянието на HTTP / 1.x 302 Намерени. Но ако трябва да зададете различен код на състоянието, като 307 Временно пренасочване, а след това ще се наложи допълнителен удар с глава на извикване на функция (), за да промените лентата на състоянието. Няма значение, ще бъде направено, преди да добавите заглавието на място или след - промените ще бъдат запазени и се изпраща на клиента. Но има и по-елегантен начин за използване на третия аргумент вътр http_response_code. Заглавие място с код на състоянието 307, можете да добавите един ред, както следва: PHP

В светлината на промените в PHP 4.3.0, които направиха възможно да се промени в лентата на състоянието по този начин, тя става доста безсмислена промяна в лентата на състоянието изрично (с изключение на по-голяма яснота). В края на краищата, в действителност, както видяхме по-горе, функцията за хедър () реагира единствено на код на състоянието, което е посочено, че в лентата на състоянието. А версия на протокола и обяснителен фраза Apache все още поставя на негово усмотрение. Невалиден държавни кодове http_response_code аргумент обработват по същия начин, както когато ги изпратите на лентата на състоянието. За повече информация за кодовете на състоянието без позоваване на PHP може да се прочете в кодовете статия за състоянието на HTTP.

При използване на заглавната част () функция е важно да се помни, че записът на заглавията за реакция е възможна само толкова дълго, тъй като няма данни за ранно изтегляне на изходен поток. Веднага след като изход на екрана (дизайн ехо, печат print_f и др., Или просто текста или пространствата извън тагове ), Заедно с тези, изпратени по първите данни и реагиране заглавията. Ако след това се опитате да запишете заглавието на отговор, ще получите следното предупреждение:

Внимание: Не мога да променя информацията в заглавието - заглавията вече изпратени от

и след това да докладва на файла с PHP-скрипт и ред код, която е създадена от изходните данни на изходен поток.

headers_list () функция

headers_list () функция е налична само с петата версия на PHP. Той се връща само онези заглавия, които са били добавени от PHP-скрипт. Ако не сте регистрирали никакви титли, функцията ще върне само заглавната X-Powered-By: PHP / 5.2.10. и дори тогава не винаги. Разбира се, не може да бъде по друг начин, защото всички други заглавия сървърни регистри след изпълнение на PHP скриптове.
Освен това, тази функция не се връща лентата на състоянието, дори ако тя е била променена от PHP-скрипт.

headers_sent () функция

Функцията за отстраняване на грешки, който казва дали клиентът заглавията на текущата HTTP-отговор изпратени. Два избираеми параметри позволяват да се пишат в името на променливите предадени на PHP скриптове (първият аргумент) и номер на ред (вторият аргумент), която започна производство в изходен поток, към който са били изпратени заглавия.

getallheaders () функция

Тази функция работи само ако PHP работи като модул на Apache. Към този факт е по-ясно, като се излиза от PHP 4.3.0, тази функция е получил прякор apache_request_headers ()

както и всички променливи на обкръжението с имена "HTTP_IMYA_ZAGOLOVKA", които създават на сървъра на базата на заглавията на текущата HTTP-заявка. Примери за други променливи на обкръжението, съдържащи заглавията на заявка: $ _SERVER [ 'HTTP_KEEP_ALIVE']. $ _SERVER [ 'HTTP_CACHE_CONTROL']. $ _SERVER [ 'HTTP_REFERER']. Тези елементи могат да отсъстват в масива, ако клиентът не е прехвърлил съответните заглавките.

За съжаление, не е възможно да се знае, е клиент версията на HTTP протокол, който се съдържа в низа на заявката.

Едно от предимствата getallheaders () функция за масив $ _SERVER е, че тя осигурява заглавията имена в оригиналната си форма, а "HTTP_" префикс добавен $ _SERVER масива на името на заглавната част. Въпреки това, предвид факта, че имената на заглавията са на буквите, клиентът може да прехвърли имената с малки букви и главни букви могат да бъдат с или, в изключителни случаи, по какъвто и екзотична регистри версия. Това се усложнява от търсенето на интересни заглавия в масива, който доставя getallheaders (функция). С масив $ _SERVER за това не е проблем - има всички ключове на масив е винаги с главна буква.

get_headers () функция

Преди версия PHP 5.3.0, тази функция има и недостатък, който ограничава прилагането му изключително отстраняване на грешки цели. Според логиката на протокола HTTP, тази функция ще бъде да се реализира метод заявка HEAD, защото го интересува само от колекторите. Въпреки това, когато се обаждате на функцията PHP отдалечен сървър изпраща заявка до следното: HTTP

Естествено, тази заявка връща на отдалечения сървър е не само заглавията, но съдържанието на ресурса, който е в сравнение със заглавието заема обем понякога стотици пъти по-голям. По този начин, то не представлява явна рационално разследване безсмислен повлияе сървъри, така и мрежови маршрутизатори и шлюзове между тях. разработчиците HTTP протокол силно борят за облекчаване на увеличаване на тежестта върху решенията за мрежови и софтуерни като get_headers () функция, или по-скоро тяхната лекомислена употреба намаляване на тези усилия за нищо.

Въпреки това, в версии на PHP 5.3.0 тази недостатък е бил елиминиран с функцията идване stream_context_set_default (). Дори като се започне с версия 5.1.3 get_headers () функция използва контекста на поток подразбиране. Но промяната на конфигурацията контекстното поток е станало възможно само с версия 5.3.0, например, за да промените метода на заявката. PHP

Разбира се, това трябва да се направи преди да се обадите get_headers (функция).

метод HTTP-HEAD искане е въведена още през HTTP / 1.0 Този метод е разработен за точно такива случаи. 1945 спецификации RFC подчертаха, че този метод е идентичен с метода GET, с изключение на това, че не се връща съдържанието на ресурса. Истината в RFC 2616 за HTTP / 1.1 състояние на връщането на еднакви заглавия в сравнение с метода на GET има изисквания трябва да ниво, т.е. за предпочитане, но не задължително storogo (виж интересен метод главата.). Най-популярната Apache сървърът поддържа това изискване. Ще приемем, че много други сървъри също го подкрепят.

Вижте също:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!