Http sorğuları işlənir php. PHP istifadə edərək sorğuların işlənməsi. HTML forması vasitəsilə HTTP sorğu parametrlərinin müəyyən edilməsi
Brauzer müştəriləri məlumatı veb serverə göndərə bilərlər.
Brauzer məlumat göndərməzdən əvvəl onu URL kodlaşdırma adlı sxemdən istifadə edərək kodlayır. Bu sxemdə ad/dəyər cütləri bərabər işarələrlə birləşdirilir və müxtəlif cütlər ampersandla ayrılır.
Ad1=dəyər1&adı2=dəyər2&ad3=dəyər3
Boşluqlar silinir və + simvolu ilə əvəz olunur və hər hansı digər qeyri-rəqəm simvolları onaltılıq dəyərlərlə əvəz olunur. Məlumat kodlaşdırıldıqdan sonra serverə göndərilir.
GET üsulu
GET metodu səhifə sorğusuna əlavə edilmiş şifrələnmiş istifadəçi məlumatlarını göndərir. Səhifələr və kodlanmış məlumatlar bir-birindən ayrılıbmı? sual işarəsi.
http://www.test.com/index.htm?name1=value1&name2=value2
- GET metodu brauzerinizin "Yer" sahəsində server qeydlərində görünən uzun sətir yaradır.
- GET metodu yalnız 1024 simvol göndərməklə məhdudlaşır.
- Əgər serverə göndərmək üçün parolunuz və ya digər həssas məlumatınız varsa, heç vaxt GET metodundan istifadə etməyin.
- GET, şəkillər və ya mətn sənədləri kimi ikili məlumatları serverə ötürmək üçün istifadə edilə bilməz.
- GET metodu ilə göndərilən məlumatlara QUERY_STRING mühit dəyişənindən istifadə etməklə daxil olmaq olar.
- PHP GET metodundan istifadə edərək bütün göndərilən məlumatlara daxil olmaq üçün $_GET assosiativ massivini təmin edir.
if($_GET["ad"] || $_GET["yaş"]) ( "Xoş gəlmisiniz ". $_GET["ad"] əks-sədası; "Siz ". $_GET["yaş"]sınız. " yaş "; exit(); )
POST metodu
Metod POST HTTP başlıqları vasitəsilə məlumat ötürür. Məlumat metodun vəziyyətində təsvir edildiyi kimi kodlanır GET, və başlıqda yerləşdirilir QUERY_STRING.
- POST metodunda göndərilməli olan məlumatların ölçüsündə heç bir məhdudiyyət yoxdur.
- POST metodu həm ASCII, həm də ikili məlumatları göndərmək üçün istifadə edilə bilər.
- POST metodu ilə göndərilən məlumatlar HTTP başlığından keçir, ona görə də təhlükəsizlik HTTP protokolundan asılıdır. Təhlükəsiz HTTP-dən istifadə etməklə siz məlumatlarınızın təhlükəsiz olmasını təmin edə bilərsiniz.
- PHP POST metodundan istifadə edərək göndərilən bütün məlumatlara daxil olmaq üçün $_POST assosiativ massivini təmin edir.
Mənbə kodunu test.php skriptinə yerləşdirməklə aşağıdakı nümunəni sınayın.
if($_POST["ad"] || $_POST["yaş"]) ( əgər (preg_match("[^A-Za-z"-]",$_POST["ad"])) ( ölmək (" etibarsız ad və ad alfa olmalıdır"); ) echo "Xoş gəlmisiniz". $_POST["ad"]; əks-səda "Siz ". $_POST["yaş"]sınız. "yaşınız."; exit(); )
$_REQUEST dəyişəni
PHP dəyişəni $_REQUEST kimi məzmunu ehtiva edir $_GET, $_POST, belə ki $_COOKIE. Dəyişən haqqında danışacağıq $_COOKIE biz peçenye haqqında danışanda.
PHP $_REQUEST dəyişəni GET və POST metodlarından istifadə edərək təqdim edilmiş forma məlumatlarından nəticə əldə etmək üçün istifadə edilə bilər.
POST metodu üçün
Formanın məzmunu GET metodu ilə eyni şəkildə kodlaşdırılır (yuxarıya bax), lakin URL-ə sətir əlavə etmək əvəzinə sorğu məzmunu POST əməliyyatının bir hissəsi kimi verilənlər bloku kimi göndərilir. ACTION atributu mövcuddursa, orada tapılan URL dəyəri bu məlumat blokunun hara göndəriləcəyini müəyyən edir. Bu üsul, artıq qeyd edildiyi kimi, böyük məlumat bloklarının ötürülməsi üçün tövsiyə olunur.
İstifadəçi tərəfindən daxil edilmiş və POST metodundan istifadə edərək serverə göndərilən məlumat, fəaliyyət atributunun müəyyən etdiyi proqrama və ya bu atribut buraxılıbsa, cari skriptə standart girişdə xidmət göstərir. Göndərilən faylın uzunluğu CONTENT_LENGTH mühit dəyişəninə, məlumat növü isə CONTENT_TYPE dəyişəninə ötürülür.
Siz yalnız HTML formasından istifadə edərək POST metodundan istifadə edərək məlumatları göndərə bilərsiniz, çünki məlumatlar GET-də olduğu kimi başlıqda deyil, sorğunun mətnində göndərilir. Müvafiq olaraq, parametrlərin dəyərini yalnız formada daxil edilmiş dəyəri dəyişdirməklə dəyişə bilərsiniz. POST istifadə edərkən istifadəçi serverə göndərilən məlumatları görmür.
POST sorğularının əsas üstünlüyü onların GET sorğuları ilə müqayisədə daha yüksək təhlükəsizlik və funksionallıqdır. Buna görə də POST metodundan daha çox mühüm informasiyanın, eləcə də iri miqyaslı informasiyanın ötürülməsində istifadə olunur. Bununla belə, siz bu mexanizmin təhlükəsizliyinə tamamilə etibar etməməlisiniz, çünki POST sorğu məlumatları da saxtalaşdırıla bilər, məsələn, maşınınızda bir HTML faylı yaratmaq və lazımi məlumatlarla doldurmaqla. Bundan əlavə, bütün müştərilər POST metodundan istifadə edə bilməz, bu da onun istifadə hallarını məhdudlaşdırır.
Hər hansı üsulla serverə verilənlər göndərilərkən təkcə istifadəçinin daxil etdiyi məlumatlar deyil, həm də müştərini, onun iş tarixini, fayl yollarını xarakterizə edən mühit dəyişənləri adlanan bir sıra dəyişənlər ötürülür. Budur ətraf mühit dəyişənlərindən bəziləri:
- REMOTE_ADDR – sorğu göndərən hostun (kompüterin) IP ünvanı;
- REMOTE_HOST – sorğunun göndərildiyi host adı;
- HTTP_REFERER – cari skriptə keçid edən səhifənin ünvanı;
- REQUEST_METHOD – sorğu göndərilərkən istifadə olunan üsul;
- QUERY_STRING – sual işarəsindən sonra URL-də yerləşən məlumat;
- SCRIPT_NAME – icra edilməli olan proqrama virtual yol;
- HTTP_USER_AGENT – müştərinin istifadə etdiyi brauzer haqqında məlumat
Hələlik biz yalnız qeyd etmişik ki, müştəri sorğuları xüsusi proqram vasitəsilə serverdə işlənir. Əslində biz bu proqramı özümüz, o cümlədən PHP-də yaza bilərik və o, alınan məlumatlarla bizim istədiyimizi edəcək. Bu proqramı yazmaq üçün siz PHP-nin bu məqsədlə təklif etdiyi bəzi qaydalar və alətlərlə tanış olmalısınız.
PHP skriptində müştəri tərəfindən HTTP vasitəsilə göndərilən məlumatlara daxil olmağın bir neçə yolu var. PHP 4.1.0-dan əvvəl bu cür məlumatlara çıxış ötürülən dəyişənlərin adları ilə həyata keçirilirdi (yadda saxlayın ki, verilənlər “dəyişən adı, “=” simvolu, dəyişən dəyəri” cütləri şəklində ötürülür). Beləliklə, məsələn, first_name=Nina ötürülübsə, o zaman skriptin daxilində Nina dəyəri olan $first_name dəyişəni peyda oldu. Verilənlərin hansı üsulla ötürüldüyünü ayırd etmək lazım idisə, o zaman $HTTP_POST_VARS və $HTTP_GET_VARS assosiativ massivlərindən istifadə edildi, onların açarları ötürülən dəyişənlərin adları, dəyərlər isə müvafiq olaraq dəyərlər idi. bu dəyişənlərdən. Beləliklə, əgər first_name=Nina cütü GET metodu ilə ötürülürsə, onda $HTTP_GET_VARS["first_name"]="Nina".
Keçirilmiş dəyişənlərin adlarını birbaşa proqramda istifadə etmək təhlükəsiz deyil. Buna görə də, PHP 4.1.0-dan başlayaraq HTTP sorğuları vasitəsilə ötürülən dəyişənlərə daxil olmaq üçün xüsusi massivdən – $_REQUEST – istifadə etmək qərara alındı. Bu massiv POST və GET metodlarından, həmçinin HTTP kukilərindən istifadə etməklə ötürülən məlumatları ehtiva edir. Bu superqlobal assosiativ massivdir, yəni. onun dəyərləri proqramın istənilən yerindən müvafiq dəyişənin (forma elementi) adından açar kimi istifadə etməklə əldə edilə bilər.
Misal 4.2. Deyək ki, yuxarıdakı nümunədə olduğu kimi proqramlaşdırma üzrə qiyabi məktəb üçün iştirakçıları qeydiyyatdan keçirmək üçün forma yaratdıq. Sonra bu formanı emal edən 1.php faylında aşağıdakıları yaza bilərsiniz:
";$str .="Siz ".$_REQUEST["kurs"];echo $str;?> üzrə kurs öyrənməyi seçmisiniz.
Sonra formaya “Vasya” adını, “Petrov” soyadını daxil etdikdə və bütün kurslar arasından PHP kursunu seçsək, brauzer ekranında aşağıdakı mesajı alacağıq:
$_REQUEST massivinin tətbiqindən sonra ardıcıllıq üçün $HTTP_POST_VARS və $HTTP_GET_VARS massivlərinin adları müvafiq olaraq $_POST və $_GET adlandırıldı, lakin onlar özləri PHP-nin əvvəlki versiyaları ilə uyğunluq səbəbindən istifadədən itmədilər. Sələflərindən fərqli olaraq, $_POST və $_GET massivləri super qlobal oldu, yəni. birbaşa və daxili funksiya və üsullara əlçatandır.
Bu massivlərin istifadəsinə bir misal verək. Tutaq ki, ad_ad, soyad, kurs adlı daxiletmə elementləri olan formanı emal etməliyik (məsələn, yuxarıdakı form.html). Məlumat POST metodu ilə ötürülüb və biz başqa üsullarla ötürülən məlumatları emal etmək istəmirik. Bu aşağıdakı kimi edilə bilər:
";$str .= "Siz ". $_POST["kurs"];echo $str;?> üzrə kurs öyrənməyi seçmisiniz.
Sonra brauzer ekranında "Vasya" adını, "Petrov" soyadını daxil etdik və bütün kurslar arasında PHP kursunu seçsək, əvvəlki nümunədə olduğu kimi bir mesaj görəcəyik:
Salam, Vasya Petrov! Siz PHP kursunu öyrənməyi seçmisiniz
PHP 4.1.0-dan daha erkən skriptləri emal etmək qabiliyyətini qorumaq üçün, dəyişənlərə birbaşa adları ilə daxil olmağa icazə verən və ya rədd edən register_globals direktivi təqdim edildi. register_globals=On parametri PHP parametrləri faylındadırsa, GET və POST metodlarından istifadə etməklə serverə ötürülən dəyişənlərə sadəcə adları ilə daxil olmaq olar (yəni $first_name yaza bilərsiniz). register_globals=Deaktivdirsə, onda siz $_REQUEST["first_name"] və ya $_POST["first_name"], $_GET["first_name"], $HTTP_POST_VARS["first_name"], $HTTP_GET_VARS["first_name"] yazmalısınız. Təhlükəsizlik baxımından bu direktivi deaktiv etmək daha yaxşıdır (yəni register_globals=Off). register_globals direktivi aktiv olduqda, yuxarıda sadalanan massivlər həmçinin müştəri tərəfindən ötürülən məlumatları ehtiva edəcək.
Bəzən sorğunun göndərilməsi üçün istifadə olunan üsul və ya sorğunu göndərən kompüterin IP ünvanı kimi mühit dəyişəninin dəyərini bilməlisiniz. Bu məlumatı getenv() funksiyasından istifadə etməklə əldə edə bilərsiniz. Adı ona parametr kimi ötürülən mühit dəyişəninin dəyərini qaytarır.
Dediyimiz kimi, GET metodundan istifadə olunarsa, onda verilənlər resursun URL-inə dəyişən_adı=dəyər cütləri şəklində sorğu sətri əlavə edilməklə ötürülür. URL-də sual işarəsindən sonra hər şeyi əmrdən istifadə etməklə əldə etmək olar
Getenv("QUERY_STRING");
Bunun sayəsində GET metodundan istifadə edərək məlumatları başqa formada ötürmək mümkündür. Məsələn, siz plus işarəsindən istifadə edərək yalnız bir neçə parametrin dəyərlərini təyin edə bilərsiniz və skriptdə sorğu sətirini hissələrə ayıra bilərsiniz və ya yalnız bir parametrin dəyərini ötürə bilərsiniz. Bu halda, $_GET massivində açarı bu qiymətə bərabər olan boş element (bütün sorğu sətri) görünəcək və sorğu sətirində rast gəlinən “+” işarəsi “_” alt xətt işarəsi ilə əvəz olunacaq.
POST metodu ilə məlumatlar yalnız formalardan istifadə etməklə ötürülür və istifadəçi (müştəri) serverə hansı məlumatların göndərildiyini görmür. Onları görmək üçün haker bizim formanı özününkü ilə əvəz etməlidir. Sonra server səhv formanın işlənməsinin nəticələrini yanlış yerə göndərəcək. Bunun qarşısını almaq üçün məlumatların göndərildiyi səhifənin ünvanını yoxlaya bilərsiniz. Bu getenv() funksiyasından istifadə etməklə yenidən edilə bilər:
Getenv("HTTP_REFERER");
İndi mühazirənin əvvəlində tərtib edilmiş problemi həll etməyin vaxtıdır.
(Denver paylanması) və siz PHP-də sadə proqramlar yazmağı öyrəndiniz, o zaman brauzerin (müştərinin) serverə necə sorğu göndərə və müvafiq cavablar ala biləcəyini öyrənməyin vaxtı gəldi. Sadə HTML formasının yaradılması nümunəsindən istifadə edərək, bu cür qarşılıqlı əlaqənin əsas prinsiplərini öyrənəcəyik.
Əgər siz artıq Denver kataloqlarını yaxşı bilirsinizsə, sizin üçün əlverişli kataloqda istənilən PHP faylı yarada və kod yazmağa başlaya bilərsiniz. Hələ öz qabiliyyətlərinə əmin olmayanlar üçün sizə aşağıdakıları etməyi məsləhət görürəm: ev qovluğunda Denver (adətən Z) olan virtual diskdə dərslər qovluğu yaradın. Sonra, bu qovluqda başqa bir qovluq yaradın - www. Bu, brauzerinizin ünvan çubuğundan əldə edilə bilən iş layihə qovluğunuzdur. Denveri yenidən başladın ki, yaradılmış host sistemdə qeydiyyatdan keçsin. Nəhayət, www qovluğunda index.php faylı yaradın. Bu, kodunuz olan əsas fayl olacaq.
Gördüyünüz kimi, bu, adi HTML işarələməsidir, lakin biz faylı index.php adlandırdıq, bu o deməkdir ki, indi PHP-də istənilən təlimatı sənədə daxil edə bilərik.
İndi brauzerinizdə http://derslər/ səhifəsinə keçsəniz, aşağıdakı nəticəni görəcəksiniz:
Sahələri doldurun (məsələn: ad – Vasya, doğum ili – 1990) və “göndər” düyməsini sıxın. Nə görürsən? Heç nə! Yenə eyni forma, yalnız boş. Bununla belə, üzülməyə tələsməyin - brauzerinizin ünvan çubuğuna nəzər salın. Dəyişdi və indi belə görünür:
Http://lessons/index.php?user_name=Vasya&user_year=1990&submit_form=send
Bu o deməkdir ki, server nəhayət məlumatlarınızı qəbul edib!
İndi bunu anlayaq.
GET üsulu
Birincisi, hər halda HTML forması nədir? Bu, müştəri brauzerindən serverə istənilən məlumatı göndərməyə imkan verən interfeysdir. Formanızın atributlarına nəzər salın: