muzruno.com

PHP е глобална променлива във функция. Направете глобална променлива в PHP

За да създадете пълноправен сайт, който има широка функционалност, трябва да знаете много за него. Но това, което може да му даде истинска уникалност, е PHP. Глобалната променлива на този език за програмиране не се използва много често, но понякога е необходимо да се знае как работи. Чрез изучаване на това какво е и как работи, ще разгледаме тази статия.

обхват

php глобалната променливаТова е контекстът, в който се дефинира променливата. В повечето случаи те имат само един обхват. Когато в PHP глобалните променливи се зареждат от други файлове, то в тях те могат да включват (включват) и изискват (изискват).

По подразбиране те са ограничени от местния обхват на функцията. И как искате променливата да се вижда от файлове извън нейните граници и биха могли да бъдат използвани също така? За това PHP също така предоставя глобална променлива.

Ключовата дума "глобална"

php глобални променливиНо как да декларираме глобална PHP променлива? При постигането на тази цел думата "глобална" ще ни помогне. Трябва да я поставите пред променливата, която искате да направите глобална (например глобална "Променлива").

След като въведете такава инструкция, всеки файл може да работи с данните. Ако някъде има препратки към тази променлива, програмата винаги ще обръща внимание на глобалната версия.

Защо такава странна формула? Факт е, че едновременно с това може да има и локални версии. Но те ще бъдат достъпни само в тези файлове, където са декларирани. И за всички останали, глобалните променливи на PHP класа ще работят. Ето защо трябва да внимавате. И така, че няма съмнение, ето един пример за това как изглеждат: глобално a.

Защото ако даден файл има достъп до няколко променливи, това ще доведе до конфликт. Но тук не можем да кажем точно - ще се чете местна или глобална променлива или ще възникне грешка. Така че, ако е написана във функцията, тогава не би трябвало да има никакви проблеми. Но използването на променлива извън нейните граници ще бъде проблематично. Следователно е необходимо да се следи отблизо структурата на съставянето на програмния код и да се гарантира, че никъде няма дори предпоставка за възникване на конфликта.

Друга възможност за запис

декларира глобалната променлива phpМога ли да създам глобална променлива в PHP по друг начин? Да, и дори не един. Първо, нека да разгледаме $ GLOBALS. Това е асоциативен масив. Ключът в него е име. Стойността е съдържанието на глобалната променлива. Следва да се отбележи, че този масив след декларацията съществува във всеки обхват. Това дава основание да се счита за суперглобално. Тя изглежда така: $ GLOBALS [`Променлива`].

Предварително дефинирани / суперглобали

Във всеки програмен език има някои имена, които са наети за своите индивидуални функции. Следователно, не можете да създавате глобални променливи в PHP със същото име.

В този програмен език има специални функции. Така че, важно е, че предварително дефинираните променливи тук нямат "супер" настройка, т.е. те не са на разположение на всички места. Как мога да поправя това? За да може дадена предварителна променлива да бъде налична в някои локални пространства, тя трябва да бъде обявена както следва: глобална "Променлива". Изглежда, че е същото като преди, нали? Вярно, но не и наистина. Нека да разгледаме примера "бой":

  • глобални $ HTTP_POST_VARS;
  • echo $ HTTP_POST_VARS [`име`].

Чувствате ли разликата между тях? Имайте предвид, че в PHP глобалната променлива не трябва да се използва в дадена функция. Той обикновено може да се намира в файл, който е включен в него.

Връзки и сигурност направи глобална променлива php

Както можете да видите, в PHP, създаването на глобална променлива не е проблем. Но има ли някакви елементи за връзките? Да, може да има неочаквано поведение, когато се използва глобално. Но преди това малко фон.

Във версия 4.2.0 директивата register_globals бе променена по подразбиране от изключено на включено. За повечето потребители това не е много важно, но напразно. В крайна сметка това пряко засяга безопасността на разработвания продукт. Ако трябва да направите глобална променлива, директивата PHP за този параметър няма да го повлияе пряко. Но неправилната употреба вече може да създаде прецеденти за сигурност.

Така че, ако register_globals е включена, преди да изпълни писмения код, се инициализират различни променливи, които например са необходими за изпращане на HTML формуляри. Затова беше решено да го изключите.



Защо състоянието на тази директива в PHP е глобална променлива поради много? Факт е, че когато държавата е в ход, разработчиците не винаги са в състояние самостоятелно да отговорят на въпроса откъде идват. От една страна, тя улесни писането на кода. Но от друга - това създаде заплаха за сигурността. Следователно, за да се избегнат грешки, както и смесване на данни и директивата е забранена.

И сега нека разгледаме не-сигурен код, а също и как да открием случаи, когато декларирането на глобалната променлива на PHP е придружено от опити за заместване на данни. Това е необходимо, за да се създадат не само красиви, но и стабилни работни сайтове, които не пробиват първия човек, който се намира.

Опасен код

php глобални променливи във функция

Нека да установим, че променливата е вярна за онези, които са получили разрешение:

ако (authenticate_user ()) {
$ authorize = true-
}

ако ($ authorize) {
включват "/highly/sensitive/data.php"-
}

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

Ако промените стойността на директивата, този код може да работи правилно, тъй като се нуждаем. Но инициализирането на променливи е не само добър тон в програмирането, но и дава някои гаранции за стабилност на сценария.

Достоверна версия на кода

За да постигнете тази цел, можете или да изключите работата на директивата, или да регистрирате по-сложен код. Например, тук е следното:

ако (isset ($ _ SESSION [`username`]))) {

ехо "Здравейте {$ _SESSION [`потребителско име`]}"-

} else {

ехо "Здравейте гост
"-
ехо "Поздрави, потребител!" -

}

В този случай ще бъде трудно да се направи замяна. Но все пак е възможно. За тази цел трябва да се вземат мерки, за да се гарантира, че са осигурени инструменти за бърза реакция. Ако трябва да включите глобални променливи в PHP, тогава можете да използвате следния инструмент: ако знаем в какъв диапазон ще бъде намерена стойността, можем да го регистрираме, така че скриптът да провери това, като използва картографиране. Разбира се, това също не гарантира пълна защита срещу заместването на ценностите. Но тук търсенето на възможни варианти значително ще се усложни.

Намира опит за заместване

декларира глобална променлива php

Нека проверим как сте разбрали това, което сте написали по-рано. В PHP глобалните променливи във функцията, която ще бъде предоставена по-долу, ще трябва да декларирате себе си. Може да се каже, че това по някакъв начин е задача за домашна работа за овладяване на темата на урока. Ето кода:

ако (isset ($ _ COOKIE [`C_COOKIE`])) {
} elseif (isset ($ _GET [`C_COOKIE`]) || isset ($ _ POST [`C_COOKIE`])

поща ( "[email protected]", "Внимание, сценарият е записан опит от хакерски и фишинг данни", $ _SERVER [ `REMOTE_ADDR`]) -
echo "Сигурността е компрометирана или се опита да направи това." Администратор уведомява "-
exit-

} else {
}
?>

И сега е обяснение. Променливата C_COOKIE идва от надежден източник. За да проверим напълно очаквания резултат, проверяваме неговата стойност и в случай на проблеми уведомете администратора за него. Ако не е дошло нищо, не трябва да се предприемат никакви действия. Трябва да се разбере, че просто забраняването на директивата register_globals не прави вашия код сигурен. Следователно всяка променлива, която скриптът получава от потребителя, трябва да бъде проверена за очакваната стойност.

заключение

PHP създава глобална променлива

Това като цяло и всичко, което е необходимо да знаете за глобалните променливи, за да ги използвате успешно и безопасно в техните дейности. Разбира се, да се каже, че има пълна гаранция, че никой не може да я използва - бисквитите постоянно подобряват своите методи и умения. Ето защо е желателно да се ограничи използването на глобалните променливи в кода до максимума. За щастие структурата и особеностите на конструирането на този програмен език могат да постигнат тази цел. Успех!

Споделяне в социалните мрежи:

сроден