Cheksiz PHP harakati. FP _ O'zining harakat shaklida atributda. PHP bilan bog'liq istalmagan lahzalar

Moslashuvchan jamg'arma jamg'armasining asosiy xususiyati WordPress kancalardan mohirona foydalanishdadir. Mavzular, plaginlar va yadrolarda ishlatiladigan ilgaklar keyingi WordPress versiyalari bilan moslikni saqlab, misli ko'rilmagan kengaytirishga erishishga imkon beradi. Bu erdan, ilgaklar tushunchasi ishlab chiqaruvchilarning "repertuar" ning majburiy qismi bo'lishi kerak. Bizga qo'shiling - bugun biz bu oddiy tomonlarni ko'rib chiqamiz, ammo shu bilan birga kuchli tizim. Nimalar muhokama qilinadi: biz ilgaklar va ulardan foydalanish kontseptsiyasida yuguramiz va albatta, ulardan foydalanishning misollarini ko'rsatishadi.

Kontseptsiya: ilgaklar nima va ular nima uchun ishlatilgan?

Har qanday sifatli yozma dasturlar uchun "Nima bo'lgan?" Va nega? ". Ilgaklar - istisno emas. Oddiy so'zlar bilan gaplashish, kanca harakat uchun joy egasi. Muayyan voqea sodir bo'lganida, masalan yozuvlar nashr etish kabi kanca, tegishli reaktsiyani amalga oshirishga imkon beradigan kanca faollashadi. Ishlab chiqaruvchilar nuqtai nazaridan ilgaklar tadbirlar bilan boshqariladigan tizimning namunasidir.

Ilovalar tushunchasi, atamaning oddiy ta'rifidan ko'ra ko'proq batafsil tushuntirishni talab qiladi - biz ularning foydali ekanligini tushunishimiz kerak. Ushbu tizimning uzluksiz rivojlanishi tufayli kancalar WordPress kalit rolida o'ynaydi. Yuzlab ishlab chiquvchilar tizimni doimo yangilab turishadi, bu har bir plagin yoki alohida sozlamalarning asosiy fayllarini tahrirlash uchun hech qanday imkoniyat yo'qligini anglatadi, chunki ular ko'pincha o'zgaradi. Buning o'rniga, ichki funktsional imkoniyatlarni ichki manipulyatsiya holatida, xuddi shu kuchli ta'sirga erishish uchun tashqi funktsiyalarni ulash imkonini beradigan tizimni kengaytirish uchun zamin talab qilinadi. Ilgaklar - ushbu bazaning asosiy xususiyati.

Ilgaklarni qanday qo'llash kerak?

Dasturchi sifatida siz nafaqat ilgaklar nima qilishini yoki nima uchun ular kiritilganligini, balki ularni qanday yaratishni bilishingiz kerak. Boshqacha qilib aytganda, ilgaklar tizimini to'liq tushunish uchun ular qanday qo'llanilishini aniqlashingiz kerak.

Yozma test bilan taqqoslaganda, javoblarning ko'rinishi har doim ham eng yaxshi g'oya emas. Sinovlarni o'tkazish bo'yicha ko'plab strategiyalarga ko'ra, avval savolni o'qish, javob haqida o'z fikrlaringizni shakllantirishingiz kerak, so'ngra eng yaqiningiz sizga eng yaqin bo'lgan qaror qabul qilishi kerak. Bunday usul dasturiy ta'minotni rivojlantirish jarayonida qo'llanilishi mumkin; Birovning kodiga qarashning o'rniga, qanday yoki boshqa xususiyatni amalga oshirayotganini tushunish o'rniga, avval uni o'zingiz yozing va qaytib keling. Shunday qilib biz qilamiz.

Hujjatlar bilan ishlash

Tizim amaliyotda qanday amalga oshirilganligini tushunish uchun ko'pincha hujjatlarga qarash foydali bo'ladi. Kodekada ko'rsatilgan ikkita asosiy funktsiyalar to'g'risidagi maqolani o'rganaylik:

  • qo'shimcha ($ ilgak, $ starti [, $, $, $, $, $ raqamlari])]) - agar biron bir kancacatical kancasi "Funktsiyani terish funktsiyasini belgilaydi. $ Ustuvorlik bu funktsiyani boshqa funktsiyalar yoki keyin boshqa funktsiyalar yoki undan keyin amalga oshirilishini belgilaydi (sukut bo'yicha, o'zgaruvchining 10). Ushbu ko'rsatkich qanchalik kichik bo'lsa, bu funktsiya paydo bo'ladi. $ Raqamlar - funktsiya ishlov beruvchi tomonidan olingan dalillar soni (standart 1).
  • do_a($ cog '1 [$ arg2 [, $ arg3 [, ... ..., FOYDALANADI AGR1, $ Arg2, $ Arg3 va boshqalar. ..

Endi, bir tomondan hujjatlashtirilganda, biz ushbu ikki funktsiya haqida ba'zi xulosalar chiqarishimiz mumkin. Qo'shimchalar shunchaki funktsiyani, ustuvor va dalillarni satr bilan bog'laydi. Bu PHP massivlari uchun ideal vazifani eslatadi, bu esa asosiy qiymatli juftlikni saqlaydigan hash kartalarida ishlaydi. Do_atication - bu ko'proq ahamiyatga ega funksiya - bu tartibni qidirib, funktsional ishchilar qidirib, ularni keyinchalik keltirib chiqaradi. Xotiradagi sxemamizni ushlab, ilgaklardan foydalanish vaqti keldi.

Amaliyotda olingan bilimlarni qo'llang

Biz buni WordPress HUK tizimi haqida bilim olish uchun biz ushbu ikkita funktsiyani hujjatlarga to'liq muvofiqlashtirishga hojat yo'q. Buning o'rniga, vaqtingizni tejash uchun keraksiz parametrlarsiz foydalanishga e'tibor qaratamiz.

Boshlashdan oldin, keling, harakatlar rejasini yaratamiz:

  • Biz ikkala funktsiya uchun biz uchun global qatorga muhtojmiz.
  • qo'shimcha Cancy nomi va kalit qiymati shaklida belgilangan kanca nomi va tegishli ishlov beruvchilarning to'plamiga qo'shing.
  • do_Actioncaction ishchi kanca uchun massivlar qatoridagi funktsiyalarni qabul qiladi va ularning har biriga sabab bo'ladi.

Kod quyidagicha ko'rinadi:

$ harakatlar \u003d massiv (); Funktsiya Qo'shimcha qo'shish ($ cokcacaticaticaticatication) (global $ funktsiya). Agar u allaqachon mavjud bo'lsa, u "Funktsiyalar [$ cococ]") (); // Funktsiyalari funktsiyasini qo'shish [$ ccact] funktsiyasini qo'shish [$ kancasi funktsiyasi;) funktsiya ($ COCC) funktsiyasi) Ushbu kanca bilan bog'liq ($ COCT] $ funktsiya sifatida $ [$ cack] ($ cance_func) ($ funktsiya);)

A'lo; Biz 20 qatorga yaqin kodlardan foydalangan holda biz universal ilgaklar tizimini yaratdik. Endi bizning gigeziklarimizni tasdiqlash uchun ilgaklar qanday ishlashi haqida tasavvurga egamiz, keling, bizning farzespel kodini tasdiqlashimiz uchun.

Siz turli xil vositalar yordamida kod bo'ylab tezda harakat qilishingiz mumkin - masalan, Yoastning PHP WordPress manbasining ma'lumotnomasiga mos keladi.

"Qo'shimcha" orqali qidirish quyidagi kodni beradi:

Funktsiya Qo'shimcha ($ teg, $ funktsiya, $ ustuvor, $ 1) ($ shang, $ funktsiya) ($ lent, $ funktsiya) , $ cent qabul qilingan_args \u003d 1) (global $ w.p_filter, $ merdor_filter_id, $ indx \u003d _wp_filter_id); $ CR_FILTER [$ id - funktsiyasi ["funktsiyasi" \u003d \u003e $ funktsiya_to_ADD, "qabul qilingan_args" \u003d\u003e $ centcy_args); buzilmagan ($ urish]); REAL;)

qo'shimcha funktsiyani qo'shing, o'z navbatida, $ CCCECK bilan bog'liq bo'lgan massivga belgilangan funktsiyani qo'shadi. Bu erda biz $ UCHUN UCHUN UCHUN UCHUN STANSIYA va $ Centhed_args parametrlaridan foydalanamiz, bu funk bizning taxminlarimizga to'liq javob beradi. Do_Action biroz uzoqroq va qiyinroq bo'ladi:

Funktsiya Whatcatiction ($ teg, $ (Forew_filter [$ teg]) joriy ($ _ funktsiyasi)), agar ($ _ funktunce_array) ($)). $ _ ["Funktsiyasi"], Comrey_slice ($ arg, 0, 0, (AGN) $ _ [$ teg])! \u003d\u003d FALSES];

Tegishli funktsiyalarning tsiklik o'tishi va ularning har birining qiyinchiliklari biz uchun g'alati narsa emas; Aslida, biz amalga oshirishda aynan shu narsani muhokama qilamiz. Shuning uchun, biz kodni tushunishimiz bilan boshlaganimiz, nafaqat buni yaxshiroq tushunishga yordam berdi, balki muammoni rivojlantirishda muhim ahamiyatga ega bo'lgan muammoni hal qilishga yordam berdi.

Misollar

Kanaklar ishini tushunishga ega bo'lish, keling, boshqa ikkita misolni ko'rib chiqaylik. Birinchi misol Rss bilan ishlash; Sindikatsiya orqali bildirishnoma yuborish o'rniga, nega bu uchun elektron pochta xabaridan foydalanmang?

Pochta xabarnomasi tizimi

Ushbu tizimni amalga oshirish uchun biz Yozuv sanasini olishimiz kerak. Biroq, buning uchun qanday ilgak ishlatishimiz kerak? API akt API tavsifi ular bilan bog'liq voqealar bilan bir qatorda, yuqoridagi savolga javob berishda yordam beradigan voqealar ro'yxatini taklif etadi. Kanctic Publish_post bizning talablarimiz uchun mos keladi, chunki bu funktsiyalarni boshqaruvchilarni qo'shamiz:

Qo'shish ("nashr_post", "notetifikatsiya_VIIA_EAIL");

Biz qoldirgan narsalarning barchasini xabardor qilish_Viaa_email funktsiyasida elektron pochta xabarini yuborish. E'tibor bering, nashr_post kancasi ariza identifikatorini bizning funktsiyaimizga dalil yuboradi. Bu, get_post funktsiyasi yordamida yozib olish ma'lumotlarini olishimizga imkon beradi:

Funktsiya Notif_ia_email ($ post_id) ($ Post \u003d Conn_post ($ post_id); $ \u003d " [Elektron pochta bilan himoyalangan]"; $ mavzusi \u003d" Post ". Get_bloginfo (" Ism ");" Nome "(" ism ")." Nome "(" Ism "). . ". Siz buni ko'rishingiz mumkin ". Get_permaink ($ Post_ID)." "WP_mail ($ ga, $, $ xabari);)

Yozuvni olgandan so'ng, biz uning sarlavhasi, sana va doimiy havolasi pochta xabarida. Keyin u WP_mail funktsiyasi yordamida yuboriladi, bu qabul qiluvchining manzilini, xat va xabarning parametrlari sifatida talab qiladi. Bularning barchasi bilan bizning pochta xabarlarini yuborish bizning tizimimiz tayyor. Shuni esda tutingki, bir vaqtning o'zida bir nechta WP_mail funktsiyasini chaqirish tavsiya etilmaydi, chunki yozib olishning nashr etilish tugmachasini bosgandan keyin sezilarli sahifa yuklash kechikishiga olib keladi.

Google Analytics-ni ulash

Bizning birinchi dasturimiz, biroz hissa qo'shing, ilgaklardan foydalanishga qisqacha tanishtirildi. Endi biz amaliyotda haqiqiy foydalanishga yaqinroq bo'lgan ikkinchi misolni beramiz. Biz Sahifa qayerga tayanib kuzatiladigan kod kodini avtomatik ravishda kiritadigan oddiy google analitikasi plaginini yaratamiz.

Avvaliga bu mavzu bunday kod uchun ko'proq mos muhit ekanligini uyg'otishi mumkin. Ammo bu faqat xayoliy o'yin, chunki sayt mavzusi versiyalar va o'zgarishlarga moyil bo'lgan. Bir mavzudan boshqasiga o'tishda tahlil qilish kodini osongina yo'q qilish mumkin. Plagin yaratish sizga ushbu muammoni oldini olishga imkon beradi, chunki ishlatilgan mavzudan qat'i nazar, faol bo'lib qoladi. O'zgartirilgandan keyin har safar mavzuda biron bir o'zgartirish kiritishingiz shart emas.

Ammo saytning pastki qismiga kodni qanday qo'shish mumkin? Barchasi bir xil - ilgaklar yordamida. Agar siz ilgari WordPress mavzularida ishlagan bo'lsangiz, ehtimol siz WP_HACE va WP_Footer ni, o'zingizning saytingizning oldidagi harflar va sizning saytingizning oldidagi fayllarni chaqiring. Ushbu ikkala funktsiyalar shunchaki plaginlarni sahifaning ushbu hayotiy hududlariga osongina qo'shishi uchun kancalarni faollashtiradi. Shuning uchun biz shunchaki harakatni WP_Footer-ga qo'shamiz:

Qo'shish ("WP_Footer", "Add_oGoogle_analytics_code");

Bizning Add_oogle_analytics_code xususiyati, uning ismini taxmin qilib, Google Analytics-ni bosib chiqaradi:

Saytga qarab, UA-XXXXX-X-ni shaxsiy identifikatoringizni o'zgartirishingizga ishonch hosil qiling. Natijada hamma narsa ishlaydi. Faqat belgilangan kodni faylga qo'shing va uni papka bilan yuklab oling. Plaginning sarlavhasini o'z ichiga olganligiga ishonch hosil qiling - masalan, bunday:

"Goto operatoridan foydalanmang" - Shunday qilib, biz akademiya o'qituvchilariga aytganda, bu operator kodni to'liq pyuresiga aylantiradi. PHP ishlab chiquvchilar muammoni keskin hal qildilar - bu shunchaki php3 va php4-da emas. Ular qanday qilib boshqargan? Ehtimol, siz to'g'ri dasturlash uslubimizni singdirmoqchimisiz? Xo'sh, biz buni amalga oshirishimiz mumkin - barchamiz allaqachon odatlanganmiz, ya'ni biz ushbu operatordan butunlay boshlanganligi, ehtimol u yaxshiroqdir, chunki men bir vaqtning o'zida men mantiqiy dizayn bilan shug'ullanishim kerak edi bu eng xayoliy uchun to'liq kompensatsiya qiladi goto..
Men hech kimni bilmayman va ayniqsa ko'pincha gotolardan foydalanish istagi bor, ular Shaklni yaratishda, phpc skript asta-sekin tekshirilishi kerak. Ushbu jarayon qoida tariqasida, bir necha bosqichda: shaklning o'zida chop etish, olingan ma'lumotni, oldindan ko'rsatish va, masalan, tejashni tekshiring. Bundan tashqari, ba'zi choralar takrorlanishi mumkin: agar ma'lumotlar tekshiruvi hech qanday shaklga ega bo'lmasa yoki "Ko'rsagi" foydalanuvchiga mos kelmasa, u ma'lumotga kirishiga qaytarilishi mumkin. Qisqasi, ba'zi kodlardan bir necha marta foydalanish mumkin. Ushbu shartlardagi funktsiyalardan foydalanish juda ko'p qulay emas - bu juda ko'p kirish va chiqish o'zgaruvchilar, umuman coreavo olinadi va kodning o'qilishi keskin pasayadi.
Va men bunday dizayn bilan keldim.

bajaring (

($ Harakat) (

odatiy:

sindirish;

"Print_form" holati:

Biz asosiy shaklni chop etamiz

sindirish;

"Chek_form" holati:

Ma'lumotlarning to'g'riligini tekshiring

sindirish;

"Oldindan ko'rish_form" holati:

Oldindan ko'rish

sindirish;

"Savol_FORT" holati:

Biz ma'lumotlarni saqlaymiz

sindirish;

) Whine (haqiqiy);

Mana bir nechta selektsion operatori kalit Cheksiz tsiklga o'ralgan biroz - Shunday qilib, biz seksiyalarda kerakli harakatlarni guruhlashamiz ish: tanaffus; Va biz bir qismdan boshqasiga o'tishni cheklashimiz mumkin. Bo'limda odatiy: Masalan, kirish imkoniyati bo'lmasa, dastlabki ma'lumotlarni tahlil qilish qulay $ Harakat \u003d 'Print_form' Biz namuna bo'lsa, biz shaklni chop etamiz $ _Post ['yuborish'] Keyin olingan ma'lumotlarni qayta ishlashga yuboring $ Harakat \u003d 'Chek_form'. O'zgaruvchini o'zgartirish orqali almashtirish bloklari orasidagi boshqarish $ Harakat., Shuningdek, tsikldan tashqarida sindirish 2; yoki chiqish.;
Masalan, asosiy shaklning bosib chiqarish blokida siz xavfsiz ravishda qo'yishingiz mumkin sindirish 2; Tuzoq skriptning oxirini o'z ichiga oladi.
Dizayn juda moslashuvchan va o'qiydi. Ammo bitta noqulaylik bor - agar ma'lumotlar noto'g'ri ishlangan bo'lsa, siz infinite pastadir va skript muzlatgichga kirishingiz mumkin - 30 soniya davomida kutish yoqimsiz.
Keling, cheklovni operator tsikllari soniga o'rnatamiz biroz, 20 boshingiz bilan etarli. Agar biron bir narsani uchib ketsak, skript yarasi 20 burilish, to'xtatish to'xtashi haqida ogohlantirishni to'xtating va ogohlantiradi.
Ushbu uyni o'chirish operatordan keyin juda qulaydir schit $ Harakat o'zgaruvchini chop eting va biz blokni bajarishning to'liq ketma-ketligini olamiz.

Har bir tsiklning boshida (// har bir tsiklning boshida chop eting Sarlavha // tugallangan bo'lim echo $ harakatlarini bekor qilish uchun juda qulay. ""; O'zgartirish ($ harakati) (Standart: "Chop etish; Case_Form": / * Tasdiqlash; / * Billekislikning to'g'riligini tekshirib ko'ring: / * holatida "oldindan ko'rish_form": / * * / Tanaffus qilish; "Saqlash_Force" da: / * Ma'lumot * / Tanish; (($ i ++)< 20) or die("Принудительный останов цикла"));

Bajaring (

// har bir tsiklning boshida ismini kiritish

// tugallangan bo'lim diskni tuzatish uchun juda qulaydir

echo $ harakat. "";< / strong >

($ Harakat) (

odatiy:

sindirish;

"Print_form" holati:

biz asosiy shaklni chop etamiz

sindirish;

Ushbu maqolada PHP-dan foydalanishni o'z ichiga oladi.

FP _ O'z o'zgaruvchanmi?

PHP _ O'z o'zgaruvchisi Joriy faylga ism va yo'lni (hujjatning ildiziga nisbatan) qaytaradi. Siz ushbu o'zgaruvchini harakat shaklida ushbu atributda ishlatishingiz mumkin. Siz ham bilishingiz kerak bo'lgan ba'zi nuances mavjud. Albatta, biz bu nuanslarni chetlab o'tmaymiz.

Keling, bir nechta misollarni ko'rib chiqaylik.

Echo $ _Server ["php_ o'z"];

1) Sizning php faylingiz quyidagi manzilda joylashgan:

Http://www.yourserver.com/orm- -ast.php.

Bunday holda, php _ O'z o'zgaruvchanligi quyidagicha bo'ladi:

"/ Form-Action.php"

2) Sizning php faylingiz ushbu manzilda joylashgan deylik:

Http://www.yourserver.com/dair1/forma- yoki -ast.php.

PHP _ O'z navbatida:

"/TIR1/FORM-AK-AKTHP"

FP _ O'zining harakat shaklida atributda. Nega u u erda unga kerak edi?

Odatda, php _ O'z o'zgaruvchan shakli tarkibida qo'llaniladi. Harakat atribut tasdiqlangandan keyin shaklning mazmuni yuboriladigan manzilni ko'rsatadi (turdagi tugmachani bosing \u003d 'yuborish »tugmasi). Qoida tariqasida, bu shakl chiqqan sahifadir.

Biroq, agar siz faylni o'zgartiradigan faylni o'zgartirsangiz, siz amaldagi atributlaridagi fayl nomini o'zgartirishingiz kerak, aks holda shakl ishlamaydi.

PHP _ O'z o'zgaruvchan sizni keraksiz tuzatishni tejashga yordam beradi, chunki sahifa manzili fayl nomi asosida avtomatik ravishda yaratiladi.

Aytaylik, sizda forma-aksiya bilan faylingiz bor, va siz tasdiqlashdan keyin siz shu faylga borishni xohlaysiz. Odatda shunday yozing:

Ammo siz FP-dan foydalanishingiz mumkin - Form-Action.php. Bunday holda, kod ko'rinadi:

" >

Forma-aksiya .Php

Biz skriptni shakl bilan birlashtiramiz:

$ Ism."; Echo"
Yangi nomni kiritish uchun yana siz yana siz yana kiring. " ">

HTML sahifasining yuqori qismida turgan kod birinchi navbatda amalga oshiriladi. Kodning birinchi qatorida u tekshiriladi: shakli yuboriladi yoki yo'q. Agar $ _post ["Yuborish"] bo'lsa, unda dizayn amalga oshiriladi (haqiqiy) va foydalanuvchi tomonidan kiritilgan ism ko'rsatiladi.

Agar o'zgaruvchan $ _post ["yuborish"] mavjud bo'lmasa, unda shakl yuborilmadi va shunga ko'ra, agar dizayn bajarilmasa (noto'g'ri). Shuning uchun foydalanuvchi nomi ko'rsatilmaydi.

PHP bilan bog'liq istalmagan lahzalar

PHP _ O'z o'zgaruvchisi Joriy faylga ism va yo'lni olish uchun ishlatiladi - yaxshi, ammo u ham xakerlardan foydalanish mumkin. Agar sizning sahifangiz php bo'lsa, foydalanuvchi zararli XXS skriptlarini buyurishi mumkin.

Misolni ko'rib chiqing:

"Usul \u003d" Post "\u003e

Endi, agar foydalanuvchi normal urldan kelgan bo'lsa, unda manzillar panelida bunday narsa bo'ladi.
http://www.yourdomain.com/form- -ast.php.
Yuqorida tavsiflangan kodni quyidagicha topish mumkin:

Bunday holda, ko'rib turganingizdek, hamma narsa yaxshi.

Endi foydalanuvchi manzil satri bilan "aldash" ni boshlaganda, vaziyatni ko'rib chiqaylik:
http://www.yourdomain.com/form-Actphph /calererert ("XSS")% 3C.C.
/ Scrict% 3e% 3cFoo% 22

Bunday holda, PHP ishidan so'ng, sizning kodingiz bunday bo'ladi:

Siz o'zingiz ko'rishingiz mumkin, skript yorlig'i va ogohlantirish jamoasi kodiga qo'shildi. Ushbu sahifa yuklanganda foydalanuvchi ogohlantirish oynasini ko'radi. Bu o'z-o'zidan php _ O'z o'zgaruvchan ishlov berishning oddiy namunasidir.

Skript teglari o'rtasida har qanday JavaScript kodi qo'shilishi mumkin. Xaker shuningdek, boshqa serverda joylashgan JavaScript fayliga murojaat qilishi mumkin. Ushbu faylda, ehtimol, xaker global o'zgaruvchini o'zgartirishi va foydalanuvchi kiritgan ma'lumotlarni ushlab turish uchun boshqa manzilga boshqa manzilga o'zgartirish mumkin.

FP _ o'z-o'zidan muammolarni qanday oldini olish mumkin

HTMLENTS () funktsiyasidan foydalanishda muammolardan qochish mumkin. HTMLENTS () funktsiyasi mavjud bo'lgan shakl kodini ko'rib chiqing.

"Usul \u003d" Post "\u003e

HTMLTENTS () xususiyati barcha mumkin bo'lgan belgilarni tegishli HTML manbalariga o'zgartiradi. Endi PHP-ni chetlab o'tishga urinish men o'zgaruvchini ishlamaydi va quyidagilarni ifoda etish uchun zararli kodni kiritish natijasi:

Sizga maqola yoqdimi? Do'stlar bilan bo'lishish uchun: