Глобални масиви в PHP
Гениалността наPHP е лекотата, с която ви позволява да интегрирате променливи на формата във вашата програма. Това прави уеб програмирането приятно и лесно, от изпращане на формуляр и обработка на формуляр до изходни резултати. HTTP няма вграден механизъм, който да позволява запазване на информация при преминаване от една страница към друга. Причината за това е, чеHTTP не запазва състоянието си между заявките.
Обработката на информацията, получена от потребителя, е една от най-важните задачи.Никога не трябва да се доверявате на данни, предоставени от потребител, така че е наложително да потвърдите всички полета, дори скритите елементи на формуляр.
Има много начини за валидиране на данни, от проверка на информацията спрямо определени критерии до преобразуване на HTML обекти в екраниращи последователности, които позволяватбезопасно показване на въведеното от потребителя.
След това всички тези данни стават достъпни чрез достъп до следните масиви:$_GET, $_POST, $_FILES, $_COOKIE, $_SERVER и $_ENV. Те съдържат съответно всички променливи, зададени от GET заявки, POST заявки, качени файлове, бисквитки, уеб сървър и среда. Освен това има масив$_REQUEST, съдържащ данни, получени от потребителя - GET, POST и бисквитки.
Ако два масива съдържат ключ с едно и също име, тогава при поставяне на елементи в масива $_REQUEST PHP се държи според конфигурационния параметър variables_order. По подразбиране variables_order е "EGPCS" (околна среда, GET, POST, бисквитка, сървър). СледователноPHP първо добавя променливите на средата към масива $_REQUEST и след това добавя променливите GET, POST, бисквитката и уеб сървъра къмв посочения ред.
Например, ако C идва след P по подразбиране, тогава бисквитката с име потребителско име замества POST променливата с име потребителско име. Ако нямате достъп до конфигурационния файл на PHP, тогава можете дапроверите настройката на променливата с помощта на функцията ini_get() :
Може да се наложи да направите това, защото вашият интернет доставчик не ви позволява да видите опциите за конфигурация или защото вашият скрипт вероятно работи на друг сървър.
Масивите, съдържащи външни променливи като $_REQUEST, са суперглобални.
Това означава, че не е необходимо те да бъдат декларирани като глобални в рамките на функция или клас. Това също означава, че вероятно не трябва да присвоявате нищо на тези променливи или ще презапишете информацията, съхранена в тях. Преди PHP 4.1 тези суперглобали не съществуваха.
Вместо това имаше редовни масиви с имена:
- $HTTP_COOKIE_VARS,
- $HTTP_ENV_VARS,
- $HTTP_GET_VARS,
- $HTTP_POST_VARS,
- $HTTP_POST_FILES
- $HTTP_SER VER_VARS
Тези масиви все още са налични за целите на съвместимостта, но новите масиви са по-лесни за работа. Тези по-стари масиви се попълват само ако конфигурационният параметър track_vars е включен, но от PHP 4.0.3 тази функция винаги е активирана.
Ако конфигурационната опция register_globals е включена, всички тези променливи също са налични като глобални променливи на пространството от имена. Следователно $_GET['password'] е и двете просто $password.
Има значителни опасения за сигурността с това удобство, тъй като злонамерените потребители могат лесно да задават външни променливи и да презаписват вътрешни променливи, на които смятате, че трябва да се доверите. Започвайки сОт PHP 4.2 параметърът register_globals е изключен по подразбиране.
Въз основа на получените знания ще напишем сценарий, който комбинира всичко по-горе. Формата моли потребителя да въведе своето име и след това показва приветстващо съобщение. HTML документът за този формуляр може да изглежда така:
Обработка на информация, получена от формуляра
Параметърът име на входен текстов елемент във формуляр е first_name. Освен това формулярът използва метода post. Това означава, че след като формулярът бъде изпратен, елементът $_POST['first_name'] ще съдържа какъвто и низ да въведе потребителят. (Може също да е празно, освен ако, разбира се, нищо не е въведено.)
Но нека приемем за простота, че променливата съдържа валидна стойност. („Валиден“ може да означава, в зависимост от обстоятелствата, „не е празен“, „не е зададен в опит за хакване на системата“ и т.н.) Това ще ни позволи да пропуснем важната стъпка на проверка за грешки, но ще можем да предоставим този прост пример.
Така че по-долу е прост скрипт hello.php за обработка на формуляра:
Ако името на потребителя е Вася, тогава PHP отпечатва: Здравей Вася!
В бъдеще ще разгледамекак да защитим уеб сървъра, както и как да обработваме файлове, качени от потребителя. Когато обработва страница, PHP винаги задава наличието на променливи, които идват с GET или POST заявки, изтеглени файлове, валидни бисквитки и променливи на уеб сървър и среда.