Ohwow foydalanuvchining info PHP. Global $ _Server qatorida PHP Biz qanday funktsional imkoniyatlarni qo'llab-quvvatlaymiz

Superglobal $ _Server massivi

Oldindan belgilangan eng muhim qatorlardan biri bu $ _Server massividir - PHP tarjimon joylari serverdan olingan. Bunday o'zgaruvchilarsiz veb-ilovalarni to'liq qo'llab-quvvatlashda qiyin. Quyida Superglobal Arraning eng muhim elementlarining narxi - $ _Server.

Sharh

$ _Server massivining to'liq ro'yxatini ko'rish, PHP tarjimoni haqida ma'lumot ko'rsatadigan massiv axlati yoki phpinfo () funktsiyasini bosib chiqaradigan print_r () funktsiyasidan foydalanish mumkin.

Element $ _Server ["Hujjat_root"]

$ _Server elementi ["Hujjat_root"] Agar skript virtual mezbonlar bo'lgan bo'lsa, ushbu element Virtual xostning asosiy katalogiga yo'lni ko'rsatadi. Ular. Aciggratsiya faylida httpd.conf, virtual xost mavjud bo'lib, u "D: / asosiy" qiymatiga ega, u "D: Word_root" ning qiymati "D: asosiy" qiymatini o'z ichiga oladi.

Element $ _Server ["http_aftront"]

$ _Server elementi ["http_aftront"] Mijozlarning hujjatlariga nisbatan mijozning afzalliklarini tavsiflaydi. Ushbu elementning tarkibi mijozni serverga yuboradigan HTTP sarlavhasidan chiqariladi. Ushbu unvonning mazmuni quyidagicha ko'rinishi mumkin.

rasm / GIF, Rasm / X-XBITMAP, Image / JPEG, Image / PJPEG, ariza / X-Shockwire-Flash, dastur / VND.MS-Excel, ariza / MsSword, * / *

Qabul qilish sarlavhasi sizning so'rovingizga javoban mijozni olishni afzal ko'rgan media turini aniqlashtirishga imkon beradi. Ushbu sarlavha sizga javobning kichik to'plamlari tomonidan cheklanganligini serverga aytishga imkon beradi.

* Belgisi ommaviy axborot vositalarida guruh turlari uchun ishlatiladi. Masalan, barcha turlardan foydalanish uchun * / * belgisi o'rnatilgan va tur / * Belgilangan tipdagi turdagi pastki turdagi barcha pastki turlardan foydalanishni aniqlaydi.

Sharh

Media turlari bir-biridan verguldan ajratilgan.

Har bir media seriyasi qo'shimcha parametrlar to'plami bilan tavsiflanadi. Ulardan biri, nisbiy partiyument koeffitsienti deb ataladi Q, ya'ni 0 dan 1 gacha bo'lgan qiymatlarni tezroq afzal ko'radiganlar kamroq afzal ko'radi. Bir nechta parametrlardan foydalanish mijozga serverni ma'lum bir media turiga nisbatan ustunlik darajasiga ega bo'lishiga imkon beradi.

Sharh

Odatiy holga ko'ra, Q Qunduzi 1 qiymatni oladi 1. Bundan tashqari, memitalon tomonidan ajratilgan.

Sarlavha turiga misol:

Qabul qilish: Audio / *; Q \u003d 0.2, audio / bazasi

Ushbu sarlavhada birinchi audio / * ning barcha turi barcha musiqiy hujjatlarni o'z ichiga oladi va 0,2 ning afzallik nisbati bilan tavsiflanadi. VIKA orqali audio / bazaning turi belgilanadi, buning uchun afzallik koeffitsienti ko'rsatilmaydi va standart qiymat bittaga teng. RFS2616-dan iqtibos qilib, ushbu sarlavha quyidagicha talqin qilinishi mumkin: "Men audio / asosiy turini afzal ko'raman, agar ular mavjud bo'lsa, ular imtiyoz koeffitsichasini 80% dan ko'proq miqdorda kamaytirishdan keyin ham yuboraman."

Bunga misol yanada murakkab bo'lishi mumkin.

Qabul qilish: matn / tekis; q \u003d 0.5, matn / html,
Matn / X-DVI; Q \u003d 0.8, matn / x-C

Sharh

Bu shuni yodda tutish kerakki, $ _Server [HTTP_ACTTTTTTTED] Element bir xil ma'lumotni o'z ichiga oladi, ammo dastlabki qabul qiluvchisiz.

Ushbu sarlavha quyidagicha talqin qilinadi: matn / HTML va matnli hujjatlar afzalroq, lekin agar ular mavjud bo'lmasa, mijoz matn / DVI-ni afzal ko'radi va agar bo'lmasa, u emas matn / tekislik turini olishi mumkin.

Element $ _Server ["http_ccept_luage"]

$ _Server elementi ["http_ccept_luage"] Mijozning tilga nisbatan sozlamalarini tavsiflaydi. Ushbu ma'lumotlar mijozni serverga yuboradigan qabul qilish tilidan olingan. Siz quyidagi misolni berishingiz mumkin:

Qabul qiluvchi til: ru; Q \u003d 0.7.

Bu quyidagicha talqin qilinishi mumkin: mijoz rusni afzal ko'radi, ammo uning yo'qligida men hujjatlarni ingliz tilida qabul qilishga rozi bo'laman. Element $ _Server ["http_cactlect_lgangage"] aynan bir xil ma'lumotni o'z ichiga oladi, ammo qabul qiluvchi til sarlavhasisiz:

ru, en; Q \u003d 0.7.

$ _Server elementining tarkibi ["http_cact_ct_lusteaj"] Mehmonlarning milliy filialini aniqlash uchun ishlatilishi mumkin. Biroq, natijalar taxminiy bo'ladi, chunki ko'plab foydalanuvchilar tashrif buyuruvchini faqat bitta tilni afzal ko'radigan serverni xabardor qiladigan ingliz tilida brauzer versiyalaridan foydalanadilar.

Element $ _Server ["http_host"]

$ _Server elementi ["HTTP_HOST"] "Qoida tariqasida serverda joylashgan sayt domen nomiga to'g'ri keladi. Qoida tariqasida, ushbu parametrda ko'rsatilgan ism $ _Server ["Server_name"] nomiga to'g'ri keladi]. Parametri faqat domen nomini protokol nomisiz taqdim etadi (http: //), i.e.

www.soffTime.ru.

Element $ _Server ["http_referer"]

$ _Server elementi ["http_referer"] tashrif buyuruvchisi ushbu sahifaga kelgan sahifaning manziliga ega. O'tish moslama bilan amalga oshirilishi kerak. Ikkita indeks.php va sahifani tanlang.

Sahifa index.php.

aks sado. "PHP sahifasiga havola
"
;
Aks sado.
$ _Server ["http_referer"]
?>

Sahifa.php sahifa shunga o'xshash tarkib bo'ladi, ammo havola indeks.phx sahifasini ko'rsatadi.

Sahifa. Sahifa.php.

aks sado. "PHP sahifasiga havola
"
;
Aks sado. "Kontent $ _Server [" http_referer "] -".
$ _Server ["http_referer"]
?>

Bir sahifadan boshqasiga borganingizda, o'tish amalga oshirilgan sahifaning manzili ko'rsatiladi.

Element $ _Server ["HTTP_USER_AGENT"]

$ _Server ["HTTP_USER_AGENT"] Element brauzer va tashrif buyuruvchining turi va versiyasi haqida ma'lumotga ega.

Bu satrning odatiy mazmuni: "Mozilla / 4.0 (mos; Msie 6.0; Windows Nt 5.1)". "Msie 6.0" substratsiyasining mavjudligi shuni ko'rsatadiki, sahifani Internet Explorer 6.0-dan foydalangan holda ko'rib chiqadi. "Windows NT 5.1" qatoriga ko'ra, Windows XP operatsion tizim sifatida ishlatiladi.

Sharh

Windows 2000 uchun $ _Server ["HTTP_USER_AGENT"] Element quyidagicha ko'rinadi: "Mozilla / 4.0;" Mozilla / 4.0 (Mozilla / 4.0; Windows Nt 5.1) ".

Agar mehmon opera brauzeri bilan kelsa, unda $ ["http_usaer_gen" ning tarkibi ko'rinishi mumkin: "Mozp_User_0; MSIE 5.0; MSIE 5.0; MSIE 6.0 Sprstring, shuningdek, opera brauzeri Internet Explorer brauzeriga mos keladi va bir xil Windows dinamik kutubxonalaridan foydalanadi. Shuning uchun brauzer tomonidan qaytarilgan qatorni tahlil qilganda, Internet Explorer MSIE 6.0 MSIE 6.0 o'rnini o'z ichiga olgan va "opera" substratsiyasini o'z ichiga olmaydi. Bundan tashqari, ushbu qatordan foydalanuvchi Windows 98 operatsion tizimidan foydalanishi bilan yakunlanishi mumkin.

Sharh

Firefox brauzerining agenti Mozilla / 5.0 (Windows; Windows NT Windows NT 5.1; Windows NT 5.1; Gekefo / 20051111 Firefox / 1.5.

Netscape brauzeridan foydalanganda, $ ["HTTP_USER_AGENT"] Element quyidagicha ko'rinishda ko'rinishi mumkin: "Mozitilya / 5.0 (X11; Linux i686; gekka: 1,4) NetScape / 7.1" . Ushbu brauzerga tegishli, quyi "Netscape" substratsionerligi bilan belgilanishi mumkin. Bundan tashqari, siz mehmon Linuxning operatsion versiyasidan foydalanib Internetga kirganini bilib olishingiz mumkin, u yadro IV uchun X-oynada grafik qobig'ida. Ushbu mexanizm statistik ma'lumotlarni to'plash uchun qulaydir, bu dizaynerlarni eng keng tarqalgan brauzerlar uchun sahifalarni optimallashtirishga imkon beradi.

Element $ _Server ["Rimote_ADDR"]

Mijozning IP-manzili $ _Server ["Rimote_ADDDR"] elementga joylashtiriladi. Mahalliy mashinada sinovdan o'tish - Ushbu manzil 127.0.0.1 ga teng bo'ladi. Biroq, tarmoqni sinovdan o'tkazishda o'zgaruvchi mijozning IP-manzilini yoki mijoz serverni urgan oxirgi proksi-serverni qaytaradi. Agar mijoz proksi-serverdan foydalansa, IP manzilini u http_x_forwarded_oringiz o'zgaruvchisi yordamida, getENv () funktsiyasidan foydalanib olish mumkin.

Sharh

Proksi-serverlar maxsus xizmat turlarini taqdim etadigan maxsus vositachilar: trafik, ma'lumotlar kodlash, mobil qurilmalar bo'yicha moslashish va boshqalar. Bir nechta proksi-serverlar orasida mijozning haqiqiy IP-manzilini yashirishga imkon beradigan anonim proksist serverlarini ajratib turadi, bunday serverlar HTTP_x_forwarded_For o'zgaruvchisini qaytarishmaydi.

Http_x_forwarwewed_ingiz o'zgaruvchisini olib tashlash

echo getenv (http_x_forworded_for);
?>

Element $ _Server ["Scrip_Filename"]

$ _Server elementi ["Scrip_Filename"] diskning ildizidan faylga mutlaq yo'l qo'yiladi. Shunday qilib, agar server Windows operatsion tizimini ishga tushirsa, unda ushbu yo'l bu "D: asosiy estindex.ph" kabi ko'rinishi mumkin, i.e. Yo'l diskdan, ugix kabi operatsion tizimda ko'rsatilgan, buning uchun yo'l /, "/var/index.php".

Element $ _Server ["Server_name"]

$ _Server ["Server_name"] Element, server nomi, qoida tariqasida, bu erda joylashgan sayt domen nomi bilan to'g'ri keladi. Masalan,

www.sotoftime.ru.

$ _Server elementi tarkibidagi ["Server_name"] ko'pincha $ _Server elementining ["http_host" tarkibiga to'g'ri keladi. Server nomi bilan qo'shimcha ravishda, $ _Server $ Serverning IP-manzili, masalan, qaysi raqamni tinglash, portni tinglash, qaysi veb-serveringiz o'rnatilgan va HTTP protokolining versiyasi . Ushbu ma'lumot $ _Server ["Server_ADDDR"], $ _Server ["Server_softwordol"] va mos ravishda _Server ["Server_protokol"] joylashtiriladi. Quyida ma'lumotlar elementlaridan foydalangan holda misol keltirilgan.

Bir qator elementlardan foydalanish $ _Server

echo "Server nomi -". $ _Server ["Server_name"]. "
" ;
Aks sado. "Server IP manzili". $ _Server ["Server_ADDR"]. "
" ;
Echo "port serveri -". $ _Server ["Server_port"]. "
" ;
Echo "veb-server -". $ _Server ["Server_software"]. "
" ;
Aks sado. "HTTP protokoli versiyasi -". $ _Server ["Server_potoTol"]. "
" ;
?>

Element $ _Server ["So'rov_method"]

$ _Server [so'rov_method] element skriptni chaqirish uchun foydalaniladigan so'rovlar usuliga joylashtirilgan: oling yoki joylashtiring.

Mumkin bo'lgan hujumlar

THP yordamida ikkilik CGI dasturi sifatida PHP-ni veb-serverga (APEACH uchun) modul sifatida birlashtirish va xavfsiz muhitni tashkil qilish uchun bunday yordamchilardan foydalanish mumkin bo'lgan variantlardan biri hisoblanadi. ish paytida. Skriptlar. Ushbu o'rnatish odatda PHPning bajariladigan faylini veb-serverning CGI-bin ulamasiga nusxalash bilan birga keladi. CA-96.11 CA-96.11 CGI-bin katalogdagi biron bir tarjimonlarni joylashtirishni tavsiya qiladi. Agar PHP mustaqil tarjimon sifatida ishlatilsa ham, quyidagi hujumlar ehtimolini oldini olish uchun ishlab chiqilgan:

    Tizim fayllariga kirish: http://my.host/cgi-bin/php?/etc/ostwd

    Savol chizig'ida (URL) kiritilgan savollar jadvalga CGI protokoli bo'yicha buyruq satri sifatida tarjimonga uzatiladi. Odatda tarjimonlar birinchi dalil sifatida ko'rsatilgan faylni ochadi va bajaradi.

    CGI protokoli orqali PHP-dan foydalanilgan taqdirda, u buyruq satrining dalillarini izohlaydi.

    Serverda o'zboshimchalik bilan hujjatga kirish: http://my.host/cgi-bin/php/secret/doc.html

    Umumiy qabul qilingan kelishuvga ko'ra, PHP modulining nomi bilan ko'rsatilgan so'rov qilingan sahifada, /secret/oc.html, odatda CGI dasturi sifatida talqin qilinadigan faylni belgilash uchun ishlatiladi , masalan, veb-server uchun ba'zi konfiguratsiya variantlari (masalan, server Apache uchun harakat) Hujjatni boshqa raqamga yo'naltirish uchun foydalaniladi http://my.host/secret/script.php tarjimoni. Bunday holda, veb-server birinchi navbatda / maxfiy katalogga kirish huquqlarini tekshiradi va keyin qayta yo'naltirilgan so'rovni http://my.host/cgi-bin/script.phcript-ni yaratadi. Afsuski, agar so'rov dastlab to'liq shaklda o'rnatilgan bo'lsa, / / \u200b\u200bdispley-ni tekshirish amalga oshirilmaydi, bu faqat fayl / CGI-BIN / PHP uchun sodir bo'ladi. Shunday qilib, foydalanuvchiga / CGI-BIN / PHP-ga murojaat qilish qobiliyatiga ega va natijada serverdagi har qanday xavfsiz hujjatga.

    PHP-da kompilyatsiya variantini ko'rsatib SAVDO-CGI-RERIRECESSVa shunda va shu qadar variantlar Doc_root va User_dir skript davomida siz katalog uchun ushbu kirish joylariga shunga o'xshash hujumlarning oldini olishingiz mumkin. Batafsil variantlar, shuningdek ularning kombinatsiyalari quyida muhokama qilinadi.

1-variant: Faqat ommaviy ravishda mavjud fayllar xizmat ko'rsatadi.

Agar sizning serveringizda fayllar bo'lmasa, kirish yoki IP manzillari bilan filtr cheklangan bo'lsa, ushbu variantlardan foydalanishning hojati yo'q. Agar sizning veb-serveringizni qayta yo'naltirishlarga ruxsat bermasa yoki kerakli xavfsizlik darajasida bajariladigan PHP moduli bilan aloqada bo'lsa, siz variantdan foydalanishingiz mumkin SAVDO-CGI-RERIRECESS PHP yig'ilishi paytida. Ammo shu bilan birga, skriptni to'g'ridan-to'g'ri http://my.host/cgi-bin/pp/phpp/sir/spript.php: // mening boshqa raqamga yo'naltirish bilan ishonch hosil qilishingiz kerak. Xost / dir / skript .Php, mavjud emas.

Apache veb-serverida qayta yo'naltirish Adverlerler va harakat ko'rsatmalaridan foydalanib sozlash mumkin (quyida tavsiflangan).

2-variant: Force-CGI-Redirt-dan foydalanish

PHP montajida ko'rsatilgan ushbu parametr skriptlarni to'g'ridan-to'g'ri http://my.host/cgi-bin/smphpp/spreter.petcript manziliga kiritishiga to'sqinlik qiladi. Buning o'rniga PHP veb-server tomonidan qayta yo'naltirilgan bo'lsa, talab qilingan so'rovni faqat talab qilingan so'rovni bajaradi.

Odatda, Apache veb-serverida qayta yo'naltirish quyidagi variantlardan foydalangan holda sozlangan:

Amaliy PHP-scrict / CGI-BIN / PHP Adverhandler PHP-Screation .PP

Ushbu parametr faqat Apache veb-serveri uchun tasdiqlangan, u CGI muhitida joylashgan nostandart o'zgarmaydigan qayta yo'naltirilgan yo'naltirish_statusni qayta yo'naltirish holatida o'rnatilgan. Agar sizning veb-serveringiz ushbu so'rovga yo'naltirilganligini aniq bilmasa, ushbu bo'limda ko'rsatilgan variantdan foydalana olmaysiz va CGI dasturlari bilan ishlashning boshqa usullaridan foydalana olmaysiz.

3-variant: Doc_root va foydalanuvchi_da imkoniyatlaridan foydalanish

Veb-server katalogi kabi skriptlar yoki boshqa bajariladigan fayllar kabi dinamik tarkibni joylashtirish potentsial xavfli qiladi. Agar server konfiguratsiyasida xato amalga oshirilsa, skriptlar bajarilmasa, u maxfiy ma'lumotlarning oqishi (masalan, parollar) yoki ma'lumotlarga olib kelishi mumkin bo'lgan oddiy HTML hujjatlari sifatida namoyon bo'ladi. intellektual mulk. Bunday fikrlarga ko'ra ko'plab tizim ma'murlari skriptlarni saqlash uchun skriptlarni saqlash uchun, CGI interfeysi tomonidan o'rnatilgan barcha fayllar bilan ishlash uchun alohida katalogdan foydalanishni afzal ko'rishadi.

Agar so'rovlar qayta yo'naltirilmasligini ta'minlash imkonsiz bo'lsa, avvalgi bo'limda ko'rsatilgandek, siz veb-hujjatlar katalofilmasidan farq qiladigan dokt_root o'zgaruvchisini belgilashingiz kerak.

Siz konfiguratsiya faylidagi dots_root parametini sozlash orqali siz PHP skriptlari uchun PHP skriptlarini o'rnatishingiz yoki php_document_routni belgilash orqali o'rnatishingiz mumkin. Agar PHP CGI tomonidan ishlatilgan bo'lsa, ochiq faylning to'liq yo'li doc_rout o'zgaruvchisi va so'rovda ko'rsatilgan yo'l asosida yaratiladi. Shunday qilib, siz skriptlar faqat ko'rsatilgan katalog doirasida amalga oshiriladi (quyida tavsiflangan foydalanuvchi_dir katalogi bundan mustasno).

Xavfsizlik variantini sozlashda boshqa narsa - User_da. Agar user_da o'zgaruvchisi o'rnatilmagan bo'lsa, ochiq faylga yo'nalishi doc_rootga nisbatan yo'lga qo'yilgan. Http://my.host/~uSer/sac.php, tegishli foydalanuvchi ma'lumotiga ega bo'lmagan skriptni va ~ Foydalanuvchi / dots.phpct skript-dagi skriptni ijro etishga olib keladi (Ha, Katalog nomi belgisi bilan boshlanadi.

Ammo agar davlat_php o'zgaruvchisi qiymatiga ega bo'lsa, masalan, http://my.host/ ~iraer.php, keyin misolning misoli dots.php ssenariysi foydalanuvchining uy sahifasida joylashgan Davlat_php katalogi. Masalan, agar foydalanuvchi / uy / foydalanuvchi uy-joy katalogi bo'lsa, / /pome/user/pubcom_php/doc.php fayli bajariladi.

Foydalanuvchi_da option docs option "Doc_rout o'rnatilishi", shuning uchun siz veb-server va maxsus katalogning bir-biridan mustaqil ravishda boshqarishingiz mumkin.

4-variant: Web hujjatidan tashqarida PHP

Xavfsizlik darajasini sezilarli darajada oshirishning bir usuli - PHP bajariladigan modulini veb-hujjat daraxti tashqarisida, masalan, USR / mahalliy / bin. Ushbu yondashuvning yagona noqulayligi shundaki, har bir skriptning birinchi satri quyidagicha bo'lishi kerak:

#! / USR / Mahalliy / Bin / PHP

Siz shuningdek barcha skriptlarni bajariladigan fayllarni tayyorlashingiz kerak. Shunday qilib, skript, shuningdek, Perl, Sh yoki boshqa skriptda yozilgan boshqa har qanday CGI dasturi, shuningdek, # ni qo'shadigan boshqa har qanday CGI dasturi hisoblanadi! O'zingizni boshlash uchun faylning boshlanishiga.

Skript ichida nima bo'lar edingiz? PHP va Path_Translated tomonidan o'zgaruvchilarning to'g'ri qiymatlarini olishingiz mumkin, PHP tanlov bilan sozlanishi kerak - rad qilinadigan yo'l.



<<< Назад Tarkib Oldinga \u003e\u003e\u003e
Hali ham savollar mavjud yoki tushunarsiz narsamiz - o'zimizga xush kelibsiz

5 fevral. , 2017

Men bitta PHP-ni bilmayman. Bu achinarli va uyalgan, ammo qonun hali taqiqlanmagan. Va shu bilan birga o'zingiz xohlagan dam olish bilan o'zingizni o'ynang. Muammo shundaki, standartda PHP faqat $ _get va $ _post. Va tinchgina xizmat uchun, imkon qadar tezroq ishlash, o'chirish, o'chirish va yamoq bilan ishlash kerak. Va qanday qilib madaniy jihatdan ko'p turdagi turlarni qayta ishlash kerakligi aniq emas Http://itite.ru/users, http://site.ru/goods/5 ni o'chiring Va boshqa o'lchov. Qanday qilib barcha so'rovlarni bitta nuqtaga qanday taqsimlash kerak, ularni bir qismga ajratish va ma'lumotlarni qayta ishlash uchun kerakli kodni ishga tushirish kerakmi?

Deyarli har qanday php bazasi buni qutidan olib chiqishi mumkin. Masalan, marshrutlash va oson bo'lgan Laraer. Ammo yangi katta mavzuni o'rganish uchun hozirda o'qishimiz shart emas, lekin men shunchaki dam olish apiatsiyasini qo'llab-quvvatlash bilan tezda loyihani amalga oshirishni xohlaymanmi? Bu maqolada muhokama qilinadi.

Bizning xotirjam xizmatimizni bilishimiz kerak?

1. SAVOLLARNING ASOSIY HAMMA MAKTABLARINI QO'ShIMChA: oling, post, post, patch, o'chirish.
2. Turlarning turli yo'nalishlarini ishlab chiqing
Pochta / tovarlar.
Tovar / tovarlar / (hadya)
Olish / foydalanuvchilar / (userid) / info
Va boshqa vaqtlar uzoq vaqt zanjirlar.

Diqqat: Ushbu maqola dam olish api asoslari haqida emas
O'ylaymanki, siz allaqachon dam olish yondashuvi bilan tanish va bu qanday ishlashini tushunasiz. Agar yo'q bo'lsa, unda dam olish asoslari bo'yicha juda ko'p ajoyib maqolalar ko'p bo'lsa - men ularni ko'paytirishni xohlamayman, mening fikrimcha, dam olish bilan qanday ishlashni ko'rsatishdir.

Biz qanday funktsional imkoniyatlarni qo'llab-quvvatlaymiz?

2 ta ob'ekt - tovarlar va foydalanuvchilarni ko'rib chiqing.

Tovarlar uchun quyidagilar:

  • 1. Olish / tovarlar / (Xayr) - mahsulot haqida ma'lumot olish
  • 2. Pochta / tovarlar. - Yangi mahsulotni qo'shish
  • 3. Tovar / tovarlar / (hadya) - tovarlarni tahrirlash
  • 4. Yamoq / tovarlar / (xayr) - tovarlarning ba'zi parametrlarini tahrirlash
  • 5. O'chirish / tovarlar / (Xayr) - tovarlarni olib tashlash

Turli xil odamlar uchun foydalanuvchilar uchun bir nechta variantlarni ko'rib chiqing

  • 1. Olish / foydalanuvchilar / (Userid) - Foydalanuvchi haqida to'liq ma'lumot
  • 2. Olish / foydalanuvchilar / (userid) / info - faqat foydalanuvchi haqida faqat umumiy ma'lumotlar
  • 3. Olish / foydalanuvchilar / (foydalanuvchiid) / buyruqlar - Foydalanuvchi buyurtmalari ro'yxati

Qanday qilib u pheate phpasida ishlaydi?

Biz amalga oshiradigan birinchi narsa, barcha so'rovlar indeks.php fayliga yo'naltirilishi uchun o'rnatiladi. Ma'lumotni ajratib turadigan kishi.

Ikkinchisi - biz nima kerakligini aniqlaymiz va ularni olish uchun kodni yozamiz.
Biz 3 ta ma'lumot turiga qiziqamiz:

  • 1. Talab qilish usuli (olish, post, qo'yish, yamoq yoki o'chirish)
  • 2. URL-A URL-A ma'lumotlari, masalan, foydalanuvchilar / (Userid) / Info - 3 ta parametr kerak.
  • 3. So'rov jismlarining ma'lumotlari
Uchinchidan, biz kerakli funktsiyalarni bajaradigan kodni yozamiz. Funktsiyalar fayllar bilan bo'linadi, muxlislar bo'ylab, yangi xizmat ko'rsatish uchun yangi yo'llar va usullarni qo'shadi.

.htacccess.

Loyihaning ildizida fayl yarating.

Rewritunond% (so'rov_filename)-da qayta yozildi! ^ (. +) $ Index.php? Q \u003d $ 1

Biz bu sirli satrlarni bunga buyuramiz:
1 - Barcha so'rovlarni har qanday qirol fayllari indexent.php-ni yuboring
2 - Qabul qilish parametridagi index.php-da mavjud bo'lgan URL manziliga kiriting. Ya'ni URL ma'lumotlari / Foydalanuvchilar / (Userid) / INFO Biz $ [q "dan chiqamiz [q"].

index.php.

Har bir satrda index.php satrini ko'rib chiqing. Boshlamoq, biz so'rov usulini olamiz.

// $ cetal-ni talab qiling \u003d $ _Server ["so'rov_method"];

Keyin so'rov jismlarining ma'lumotlar

// so'rovning tanasidan ma'lumotlarni olish $ $ formati \u003d gotfortata ($ usul);

Tegishli massivlardan ma'lumotlarni olish va joylashtiring $ _get va $ _post. Ammo qolgan usullar uchun siz ozgina buzishingiz kerak. Ular uchun kod oqimdan chiqariladi pHP: // kirishKodni Google-ga oson, men shunchaki umumiy ramkni yozdim - Getformata funktsiyasi ($ usul)

// funktsiyadan ma'lumot olish ($ metati) (// METID) (// METER \u003d\u003d\u003d KIMYANING ») $ ($ cente \u003d\u003d\u003d POST») $ _Post; $ \u003d CAPRODE () ni o'chirish, yamoq yoki o'chirish ("&/ kirish") ("&/ kirish") ($ bandigor sifatida portlash) ($ bandiga) \u003d Portlash ("\u003d", $ juftligi); if ($ 1) \u003d\u003d 2) ($ 1. Urldekode ($ \u003d Urldekode);) ma'lumotni qaytaring;)

Ya'ni, bizda kerakli ma'lumotlarni oldik, barcha tafsilotlarni tanqis qiladi - va yaxshi. Eng qiziqarli yo'nalishga boring.

// URL manzilini qismlarga ajrating \u003d (Issiq ($ _ ["Q"])? $ _Get ["Q"]: "; $ Url \u003d rtim ($ url, ($ url,); $ Urls \u003d portlash ("/", $ url);

Yuqorida biz shuni bilib oldik ..htaccess parametrlarni URL-A URL-A masseymasining Q-parametridagi amallarni joylashtiradi. Ya'ni, $ ["Q"], taxminan bunday chiziq tushadi: foydalanuvchilar / 10.. Biz qanday usulni berishidan qat'i nazar.

Ammo portlash ("/", $ url) Bu satrni ushbu satrni allaqachon ishlayotgan qatorga aylantiradi. Shunday qilib, masalan, uzoq vaqtdan beri saqlang, masalan,
Olish / tovar / sahifa / 2 / Limit / 10 / Saralash / Narx_asc
Va qatorni olishingizga ishonch hosil qiling

$ Urls \u003d CASTY ("Tovarlar", "Sahifa", "2", "Limit", "Sort", "Saralash", "Saralash", "Narx_as");

Endi bizda barcha ma'lumotlar bor, ular ular bilan foydali narsani qilishingiz kerak. Va bu uni 4 qatorli kodni tashkil qiladi

// Router va URL ma'lumotlarini aniqlang $ Router \u003d $ urllar; $ urlade \u003d Array_slice ($ url va 1); // Router faylini ulang va asosiy funktsiyani o'z ichiga olishingiz kerak_once "sozlamalari" ni ishga tushiring. $ Yo'g'ier. ".pp"; Marshrut ($ metodi, $ urladda, $ format);

Ushlaysizmi? Biz muntazamlik papkasini boshlaymizki, biz bitta tashkilotni boshqaradigan fayllarni kataklamiz: tovarlar yoki foydalanuvchilar. Shu bilan birga, biz fayllarning nomi Urdatadagi birinchi parametr bilan to'g'ri kelishiga qo'shilamiz - bu yo'riqnoma, $ yo'g'ier bo'ladi. Va Urdlatadan ushbu yo'riqnomani olib tashlash kerak, endi kerak emas va faqat kerakli faylni ulash uchun ishlatiladi. array_slice ($ url, 1) Va bu bizga qatorning barcha elementlarini tortib oladi, avvalgisidan tashqari.

Endi u kerakli router faylini ulash va marshrut funktsiyasini uchta parametr bilan ishga tushirish. Ushbu funktsiya yo'nalishi nima? Biz har bir rouber faylida ushbu funktsiya aniqlanadi, chunki kirish parametrlari foydalanuvchi qaysi harakatni boshlash va kerakli kodni bajarishni aniqlaydi. Endi bu aniqroq bo'ladi. Birinchi so'rovni ko'rib chiqing - mahsulot haqida ma'lumot olish.

Olish / tovarlar / (Xayr)

Marshrutlar / tovarlar.php fayli

// Router funktsiyasi ($ metema, $ urladda, $ \u003d\u003d\u003d '($ \u003d\u003d\u003d' ($ select) && olish ($ urdata) \u003d\u003d\u003d 1-ni olish ($ urf) &\u003d 1 ($ cons /\u003d ($ \u003d\u003d\u003d / 1) bo'lsa ) (// mahsulot identifikatorini oling $ \u003d $ urlata; // tovarlarni asosdan chiqarib oling ... // echo Jon_encode Mijozga ("usul", "olish", "ID raqamiga javob berish". "\u003d\u003e $ yaxshi," Yaxshi "\u003d" "Telefon", "Narx" \u003d\u003e 10000. "Sarlavha xatosi (" Http / 1.0 400 BAZMAT SO'RISH "(" Massiv (» Xato "\u003d\u003e" yomon so'rov "));)

Fayl tarkibi bitta katta marshrut funktsiyasini, ya'ni parametrlarga qarab zarur harakatlarni amalga oshiradi. Agar olish usuli va Urdata "1 parametrni uzatsa (xayr), keyin bu mahsulot haqida ma'lumot olish so'rovi.

Diqqat: misol juda sodda
Haqiqiy hayotda, albatta, siz qo'shimcha parametrlarni tekshirishingiz kerak, masalan, bu juda ko'p. Bu erda kodni yozish o'rniga, ehtimol siz kerakli sinfni ulashingiz mumkin. Va buyumni olish, ushbu sinf ob'ektini yarating va uni qanday usulni keltiring.
Yoki, ehtimol, kerakli modellarni ishga tushirish bilan bog'liq ba'zi boshqaruvchini nazorat qilish. Ko'p variantlar mavjud, biz faqat kodning umumiy tuzilishini ko'rib chiqamiz.

Mijozga javoban biz kerakli ma'lumotlarni olamiz: tovarning nomi va uning narxi. Qori ilovada mahsulot identifikatori va usul mutlaqo majburiy emas. Biz ularga faqat kerakli usul to'g'ri parametrlar bilan deb nomlanganligiga ishonch hosil qilish uchun ko'rsatamiz.

Misolni sinab ko'raylik: brauzer konsolini oching va kodni bajaring.

$ .AJAX ((URL: Maydonlar / Sotish / Tovar / 10), usul: "Goson", Datapy: Funktsiya: "Javob" ("Javob:", javob berish))) )

Kod serverga so'rov yuboradi, u erda shunga o'xshash dasturni ochib, javobni ko'rsataman. Yo'nalishimizga ishonch hosil qiling / Tovarlar / 10 haqiqatan ham ishladi. Tarmoq yorlig'ida siz bir xil so'rovni sezasiz.
Ha, / misollar / dam olish - bu bizning Saytga sinovdan o'tishingizning ildiz yo'li

Agar konsolda kıvrılmadan foydalanishga tanish bo'lsangiz, uni terminalda ishga tushiring - javob bir xil va hatto serverdan sarlavhalar bilan ham.

Curl -x-ni oling https: // sayt / misollar / dam olish / tovarlar / 10 -i

Funktsiya oxirida biz bunday kodni yozdik.

// sarlavha xatosini qaytaring ("http / 1,0 400 BAZMAN"); Echo json_encrode yoki massiv ("Xato" \u003d\u003e "Yomon so'rov"));

Bu shuni anglatadiki, agar biz parametrlar bilan xato qilsak yoki so'ralgan marshrut aniqlanmasa, biz mijozni 400 metrga qaytaramiz. Masalan, URL manziliga o'xshash narsa qo'shing tovarlar / 10 / boshqasi_param Va siz konsolda xato va 400 javobni ko'rasiz - egri so'rov emas.

Serverda http-kodlar
Turli kodlarni olib qo'yish bilan, qolgan ishlarda bo'lsa-da, bu ishlashga arziydi. Mijoz xatolari juda ko'p. Bizning oddiy holatda ham, 405 noto'g'ri uzatiladigan usulda mos keladi. Men ataylab murakkablashni xohlamayman.
Muvaffaqiyat bo'lsa, server har doim 200 okni qaytaradi. Yaxshi, resursni yaratishda 201-yil yaratildi. Ammo yana, biz soddalashtirish nuqtai nazaridan, biz tashlaymiz va haqiqiy loyihada siz o'zlarini osongina amalga oshirasiz.

Vijdonga ko'ra maqola yakunlandi. O'ylaymanki, siz barcha yo'nalishlarning barchasi qanday yo'q qilinganligini allaqachon tushundingiz, ma'lumotlar qanday, qanday qilib yangi so'rovlar va hk. Ammo men ushbu maqola boshida topgan qolgan 7 ta so'rovning bajarilishini amalga oshiraman. Yo'l davomida men bir nechta qiziqarli sharhlarni olib kelaman va oxirida manba bilan arxiv yotardim.

Pochta / tovarlar.

Yangi mahsulot qo'shish

// yangi mahsulotni qo'shish // Post / Post ($ coste \u003d\u003d\u003d POST »&& Bo'sh joy" && Bo'sh ($ urdota) ga (/) ma'lumotni qo'shish uchun tovar qo'shing Massiv ("usul" \u003d\u003e "POST", "ID" \u003d\u003e RAND (1, 100), "FordData" \u003d\u003e $ formata)); Qaytish;)

urdata endi bo'sh, ammo forctata ishlatiladi - biz uni shunchaki mijozga olib kelamiz.

Qanday qilib "to'g'ri" ni tashkil etish kerak?
Qolgan kanonlarga ko'ra, ushbu tashkilot yoki URL manzilining identifikatorini qaytarib berishingiz kerak, muvofiq ushbu mantiqiy ob'ektni yoki URL manzilini berishingiz kerak. Ya'ni javob yoki shunchaki raqam bo'ladi - (Xayrli)yoki / Tovarlar / (Xayr).
Nega men iqtiboslarda "to'g'ri" yozdim? Ha, chunki dam olish qiyin qoidalar to'plamidir, ammo tavsiyalar. Va sizlarni amalga oshirganingizda, bu sizning xohishingizga yoki ma'lum bir loyihada allaqachon qabul qilingan shartnomalarga bog'liq.
Shunchaki yodda tutingki, boshqa dasturchi o'quv kodi va qolgan yondashuvni xabardor qilish Yaratilgan ob'ekt yoki URL manzilining so'rovini olish uchun ushbu ob'ekt haqidagi ma'lumotlarni olish uchun so'rovni olish uchun so'rovni olish uchun so'rovni olish mumkin bo'lgan so'rovnomani olish mumkin. .

Konsoldan test

$ .AJAX ((URL: Maydonlar / Oyatlar / tovarlar / tovarlar: "Post", Ma'lumotlar: "Jon", Muvaffaqiyat: Funktsiya: funktsiya (javob) Konsol.log ("Javob:", javob berish)))))

Curl -x post HTTPS: // Sayt / Misollar / Tovarcha / Tovarlar / Nargoo "Weareook - 20000"-Men

Tovar / tovarlar / (hadya)

Tovarlarni tahrirlash

// Barcha ma'lumotlar mahsulotlarini yangilash // ($ \u003d\u003d\u003d\u003d &\u003d &\u003d &\u003d &\u003d 1) if0it ($ urdota) \u003d\u003d\u003d 1) ($ urdota) \u003d\u003d 1) ni yangilang. Ma'lumotlar bazasida barcha tovarlarning barcha sohalarini yangilaymiz ... // echo json_encodece mijoziga javobni namoyish eting ("Maslahat", "Forcdata" \u003d\u003e $ formatta) ); Qaytish;)

Bu erda barcha ma'lumotlar to'liq ishlatiladi. Urldatadan, mahsulot identifikatori chiqariladi va fortata xususiyatlaridan.

Konsoldan test

$ .AJAX ((URL: Maydonlar / Oyatlar / tovarlar / 15), ma'lumotlar: "Stanbuk", Narxi: "JSON", Muvaffaqiyat: Funktsiya: Funktsiyalar (Konsol.log ("Javob:", javob)))))

Curl -x HTTPS: // Sayt / Sayt / Pul / The / Whuction / Weart \u003d Nargook \u003d 20000 "-Men

Yamoq / tovarlar / (xayr)

Tovarlarni qisman yangilash

// qisman xizmatni yangilash // yamoq / ($ sekund) && sarice ($ urdota) \u003d\u003d 1) ($ urdota) $ \u003d\u003d $ urdota oling; // Ma'lumotlar bazasida faqat tovarlarning ko'rsatilgan maydonlarini yangilaymiz ... // echo json_encodece mijoziga javobni namoyish eting ("MARTID", "FORTDATA" \u003d\u003e $ FormatiData)); qaytish;)

Konsoldan test

$ .AJAX ((URL: Maydonlar / Oyatlar / tovarlar / 15), ma'lumotlar: "Jon", "Jon", Funktsiya: Funktsiya: Funktsiya: "Funktsiyalar (Conse.log (» Javob: ", javob berish))))

Curl -x patch https: // Sayt / Misollar / Temirlar / tovarlar / 15 --Data "Narx \u003d 25000"

Bu ponte qo'yish va yamoq bilan nima?
Biri etarli emasmi? Ular bir xil harakatni bajarmaydilar - ob'ekt ma'lumotlarini yangilaysizmi?
Bir narsa bitta narsa. Uzatiladigan ma'lumotlardagi farq.
Server uzatilgan deb taxminlarni joylashtiring hamma narsa Ob'ekt va yamoq maydonlari - faqat o'zgartirilgan. So'rov tanasida uzatiladiganlar. E'tibor bering, avvalgi joylarda biz tovarlar va narx nomini o'tkazdik. Va yamoq bilan - faqat narx. Ya'ni biz faqat o'zgartirilmagan ma'lumotlarni serverga yubordik.
Sizga yamoq kerakmi - o'zingiz qaror qiling. Ammo yuqorida aytib o'tgan o'quv dasturchining kodini eslang.

O'chirish / tovarlar / (Xayr)

Tovarlarni olib tashlash

// delete tovarlar // delete / tovarlar /\u003d o'chirish ($ selece \u003d\u003d 1) ($ urdota) \u003d\u003d 1) asosdan tovarlar ... // echo json_encodece mijoziga javobni namoyish eting ("Dele" \u003d\u003e "Delete", "ID" \u003d\u003e $ "

Konsoldan test

$ .AJAX ((URL manzili: Misollar / Oyatlar / Mahsulotlar / 20 », usul:" Jon ", Funktsiya:" Javob "(" Javob: ", javob berish))) )

Curl -x Delete HTTPS: // Sayt / Misollar / Sotish / Mahsulotlar / 20-yil

Delete so'rovi bilan hamma narsa aniq. Endi foydalanuvchilar bilan ishlashni ko'rib chiqaylik - yo'riqnoma foydalanuvchilari va shunga mos ravishda foydalanuvchi.php fayli

Olish / foydalanuvchilar / (Userid)

Barcha foydalanuvchi ma'lumotlarini olish. Agar tipdagi so'rov bo'lsa / Foydalanuvchilar / (Userid), keyin qo'shimcha ravishda ko'rsatilgan bo'lsa, biz foydalanuvchining barcha ma'lumotlarni qaytaramiz / info. yoki / Buyurtmalar.Shunga ko'ra, faqat umumiy ma'lumot yoki buyurtmalar ro'yxati.

// Router funktsiyasi ($ METID, $ URLATA, $ URLATA, $ \u003d\u003d\u003d '($ centeD) if / comple-ni oling ($ ulangan) && hisobni oling ($ urladda) \u003d\u003d \u003d 1) (// mahsulot identifikatori foydalanuvchi identifikatori, Urdata; // Ma'lumotlar bazasidan barcha foydalanuvchi ma'lumotlarini chiqarib oling ... // echo Jon_encode Custri-ga javob bering ("Maslahat" ("META" \u003d "" Get "," ID "\u003d\u003e $ Userid," Ma'lumot "\u003d\u003e Massiya (" Elektron pochta "\u003d\u003e" [Elektron pochta bilan himoyalangan]"," Ism "\u003d\u003e" WebDevkin ")," Buyurtmalar "\u003d\u003e" Massiya ("Buyurtma" \u003d\u003e "Buyurtsion" \u003d "MARKASTAT" \u003d "" 01/12/2017 ") ("Bartid" \u003d\u003e 8, "Summa" \u003d "Orqagatdate" \u003d\u003e "Buyurtsiondate" \u003d\u003e "" Buyurtsiondate "\u003d\u003e" "MavrTDate" \u003d "" 03.02.2017 "yoki" Http / 1.0 400 noto'g'ri so'rov "ni qaytaring. Echo json_ence-kod ("xato" \u003d\u003e "Yomon so'rov");)

Konsoldan test

$ .AJAX ((URL manzili: Misollar / Dam olish / Foydalanuvchilar / 5 », usul:" Goson "," Jon "(" Javob: ", javob berish)))

Curl -x oling https: // sayt / misollar / dam olish / foydalanuvchilar / 5-yil

Olish / foydalanuvchilar / (userid) / info

Umumiy ma'lumot Foydalanuvchi haqida

// Umumiy foydalanuvchi ma'lumotlarini olish // Get / foydalanuvchi / INFO ifo ($ sme \u003d\u003d\u003d '($ urdota) \u003d\u003d\u003d 2 &\u003d' UserID mahsulotini oling $ \u003d $ urladda; // Ma'lumotlar bazasidan foydalanuvchi ma'lumotlarini chiqarib oling ... // echo Jon_encode Mijozga ("MECACE" \u003d "" Get "," ID raqamiga javob bering "\u003d\u003e $ Userid," Info "\u003d\u003e massiv (" Elektron pochta "\u003d\u003e" [Elektron pochta bilan himoyalangan]"," Ism "\u003d\u003e" WebDevkin "))))); qaytish;)

Konsoldan test

$ .AJAX ((URL: Maydonlar / Dam olish / Uy / Foydalanuvchilar / 5 / INFO "Datapy: Funktsiya:" Javob "(" Javob: ", javob berish) )))

Curl -x oling https: // sayt / misollar / dam olish / foydalanuvchilar / 5 / info

Olish / foydalanuvchilar / (foydalanuvchiid) / buyruqlar

Foydalanuvchi buyurtmalari ro'yxatini olish

// Foydalanuvchi buyurtmalarini qabul qilish // get / foydalanuvchilar / ($ cond) &\u003d & & & $ urlade \u003d\u003d\u003d &\u003d & "buyruqlar" ni qabul qilish ($ urdata) \u003d\u003d\u003d ' Mahsulot identifikatori $ \u003d $ urladeid; // Foydalanuvchi buyurtma ma'lumotlarini ma'lumotlar bazasidan chiqarib oling ... // foydalanuvchi ma'lumotlarini berish ma'lumotlarini chiqarib oling ("MECASI" ("MARKA", "ID", "ID" \u003d\u003e Userid, "Buyurtmalar" \u003d\u003e Massiya ("Buyurtma" \u003d\u003e 5, "Orktdate" \u003d\u003e "Orqagatid" \u003d\u003e 8. \u003e 5000, "Orktdate" \u003d\u003e "03.02.2017")))))))

Konsoldan test

$ .AJAX ((URL: Misollar / Dam olish / Foydalanuvchilar / 5 / buyruqlar », Datapy: Funktsiya: funktsiya (" Javob: ", javob berish) )))

Curl -x-ni oling HTTPS: // Sayt / Misollar / Damble / foydalanuvchilar / 5 / buyruqlar -

Natija va manbalar

Maqolaning misolidan manbalar -

Ko'rinib turibdiki, API-ning phpp-dagi yordamni qo'llab-quvvatlash unchalik qiyin emas va to'liq qonuniy emas. Asosiysi, marshrutlarni va nostandart PHP usullarini, yamoq va o'chirishdir.

Ushbu yordamni amalga oshiradigan asosiy kod 3 o'nlab indeks.php qatoriga o'rnatildi. Qolganlari allaqachon xohlaganingizdek amalga oshirilishi mumkin bo'lgan strener. Men buni router fayllari shaklida taklif qildim, ularning ismlari loyihangiz sub'ektlariga to'g'ri keladi. Ammo siz xayolotni ulashingiz va yanada qiziqarli echimni topishingiz mumkin.

Ikkinchi darsda biz yana ikkita darsni yozamiz va skriptning ichki qismini to'liq to'ldiramiz.

Rejalashtirmoq

Dars seriyasining maqsadi foydalanuvchilarga oddiy dasturni yaratish uchun foydalanuvchilarga sozlamalarni ro'yxatdan o'tkazishga, kirish, chiqish va o'zgartirishga imkon beradigan oddiy dasturni yaratish. Barcha ma'lumotlarni o'z ichiga olgan sinf foydalanuvchi deb ataladi va u foydalanuvchi.class.php fayliga aniqlanadi. Kirish uchun javobgar bo'lgan sinf \\ chiqish uchun USertocools (Usterool.Clas.php) deb ataladi.

Sinflarning nomi haqida ozgina

To'g'ri ohang, sinf tavsifi bo'lgan fayllarni sinfning o'zi kabi bir xil nom deb atashdir. Shunday qilib, har bir faylning papkasida sinflar bilan maqsadini aniqlash juda oson.

Shuningdek, sinf faylining oxirida, qo'shing.class yoki.ink. Shunday qilib, biz faylning maqsadini aniq belgilaymiz va ushbu fayllarga kirishni cheklash uchun.

Foydalanuvchilar soni (foydalanuvchi.class.php)

Bu sinf har bir foydalanuvchi aniqlanadi. Ushbu ilovaning o'sishi bilan "foydalanuvchi" ta'rifi sezilarli darajada o'zgarishi mumkin. Yaxshiyamki, oop dasturlash qo'shimcha foydalanuvchi atributlarini qo'shishni osonlashtiradi.

Konstruktor

Ushbu sinfda biz konstruktordan foydalanamiz - bu sinfning boshqa nusxasini yaratishda avtomatik ravishda qo'ng'iroq qiladigan funktsiya. Bu bizga loyihani yaratgandan so'ng avtomatik ravishda ba'zi sifatlarni nashr etishga imkon beradi. Ushbu sinfda dizayner yagona argumentni oladi: bu bizning ma'lumotlar bazamizning foydalanuvchilar jadvalidan bir qatordan iborat askar qatorini o'z ichiga oladi.

"Db.class.php" talab qiladigan_once talab qilinadi; Class foydalanuvchisi (AQShning $ id); AQSh dollari uchun foydalanuvchi nomi; ijtimoiy hashedpassword; $ email;
aQSh dollari yutish;
//Dizayner yangi ob'ektni yaratishda chaqiriladi // db satr bilan tortishuv sifatida assotsiativ qatorni oladi. Funktsiya __crodstroduct ($ ma'lumot) ($ (ID / ID raqami): ""; $ bu - $ ["Foydalanuvchi nomi" ])? $ Ma'lumot ["Foydalanuvchi nomi"]: "; $ bu - $ [" Parol "]:" " (Isšish ($ ["Elektron pochta])?" "Ma'lumot"])? "" Email "]:" "Djine \u003d" Ajro_Date] ")? "";)
Jamoat funktsiyasi ($ ISNEWUSER \u003d FALSE) (// yangi ma'lumotlar bazasi ob'ektini yarating. $ Db () Agar foydalanuvchi o'z ma'lumotlarini yangilasak. Agar (! $ Ism) ) (// Ma'lumotlar uchun Catray Comey ("Foydalanuvchi nomi" \u003d "" "" "" Foydalanuvchi nomi "" "" "" "" BUYUS -\u003e HashEdPassword "" ""
"Elektron pochta" \u003d\u003e "" Bu-\u003e elektron pochta "");
// Ma'lumotlar bazasida $ DB-\u003e Yangilanishini yangilash ($ ma'lumotlari, "foydalanuvchilar", "ID \u003d". $. $. ) Boshqa (// agar foydalanuvchi birinchi marta ro'yxatdan o'tilgan bo'lsa. $ \u003d Lavel ("Foydalanuvchi nomi" \u003d "" "" "" "BU -\u003e HashedPassword" "" "" , "Elektron pochta" \u003d\u003e "" "" -\u003e "Elektron pochta" "," Ajro_Date "\u003d" "" "" "" ""), Vaqt ()); $ bu-\u003e \u003d $ Db-\u003e Qo'shar ($ ma'lumotlar, "foydalanuvchilar"); $ bu-\u003e Juminto \u003d Vaqt ();) REAL; ))?\u003e

Tushuntirish

Kodeksning birinchi qismida, sinf zonasidan tashqarida sinfni ma'lumotlar bazasida ulanishni ta'minlaydi (foydalanuvchi sinfi ushbu sinfni talab qiladigan funktsiya mavjud).

Sinf o'zgaruvchilar o'rniga "himoyalangan" (1-darsda ishlatiladi), biz ularni "jamoat" deb ta'riflaymiz. Bu shuni anglatadiki, sinfdan tashqaridagi har qanday kod Foydalanuvchi ob'ekti bilan ishlashda ushbu o'zgaruvchilarga kirish huquqiga ega.

Dizayner stoldagi ustunlar kalitlar bo'lgan qatorni oladi. Biz $ bu-\u003e variante nomi yordamida sinf o'zgaruvchisini ko'rsatamiz. Ushbu sinf misolida, biz avval ma'lum bir muhim ahamiyatga egaligini tekshiramiz. Agar shunday bo'lsa, biz sinf o'zgaruvchisini ushbu qiymatga tenglashtiramiz. Aks holda, bo'sh satr. Kodni aylantirishning qisqa shaklidan foydalanadi:

$ Qiymat \u003d (3 \u003d\u003d 4)? "A": "B";

Ushbu misolda, biz 3 to'rtlik 3 ga tengmi yoki yo'qligini tekshiramiz! Ha bo'lsa, $ qiymat \u003d "a", yo'q $ \u003d "b". Bizning misolda, natija $ \u003d "b".

Biz ma'lumotlar bazasida foydalanuvchilar haqida ma'lumotni tejaymiz

Foydalanish xususiyati foydalanuvchi ob'ektidagi joriy qiymatlar bilan ma'lumotlar bazasi jadvalini o'zgartirish uchun ishlatiladi. Ushbu xususiyat birinchi darsda yaratgan BD sinfidan foydalanadi. Sinf o'zgaruvchilaridan foydalanish, $ ma'lumotlari o'rnatilgan. Agar foydalanuvchi ma'lumotlari birinchi marta saqlansa, $ eSgeweuser $ haqiqiy (standart noto'g'ri) uzatiladi. Agar $ ISNEWUSERER \u003d TRESE bo'lsa, uvers () DB sinf funktsiyasi deb nomlanadi. Aks holda, yangilanish () funktsiyasi deb nomlanadi. Ikkala holatda ham, foydalanuvchining ob'ekti to'g'risidagi ma'lumotlar ma'lumotlar bazasida saqlanadi.

Usterools.class.php sinfi

Ushbu sinf foydalanuvchilar bilan bog'liq bo'lgan funktsiyalarni o'z ichiga oladi: login (), log (), Chiqish () va olish (). Ammo ushbu dasturni kengaytirish bilan siz boshqalarni qo'shishingiz mumkin.

//Userterools.php talab qiling_once "User.class.php"; "Db.class.php" talab qiladigan_once talab qilinadi;
sinf Userfs (
// Foydalanuvchini yozib oling. Ma'lumotlar bazasida // foydalanuvchi nomi va paroli ko'rsatilganligini ko'rish uchun birinchi marta tekshiriladi. // Muvaffaqiyatli bo'lsa, seans o'zgaruvchilarini o'rnating // foydalanuvchi ob'ektini ichkarida saqlang.
jamoat funktsiyasi Kirish ($ Foydalanuvchi nomi, $ Parol)
{
$ hasheDpassword \u003d md5 (parol); $ natija \u003d mysql_quarery ("Foydalanuvchi nomi" yoki parolsiz "va parol \u003d" $ Xasezpassword "); Agar (mysql_num_rows ($ _Sisce ["foydalanuvchi"] \u003d "Logine_time" (MySQLL_Fetch_asc_ascect (MySQLL_TECHCHCHCHCHCHCHCHCHOCC) \u003d "Logine_time"] \u003d "Logine_Text"] ] \u003d 1; qaytish haqiqiy;) boshqa (qaytish noto'g'ri;))
// foydalanuvchi tashqarisiga kiring. Sessiya o'zgaruvchisini yo'q qiling. Jamoat funktsiyasi LOGOUT () (BUCET ($ _ sessiya)); "Kirish_time_im"]); "Logged_time_in"]); "Logged_time_in"]; "Logged_time_in"]; "Logged_time_in"]); "Logged_time_in"] foydalanuvchi nomi mavjud bo'lsa, uni ko'rish uchun. // bu barcha foydalanuvchilarning barcha nomlari noyob ekanligiga ishonch hosil qilish uchun chaqiriladi. Jamoat funktsiyasi tekshiruvi xodimlari ("" Foydalanuvchi nomi "(" "" MySQL_Num_Rows (MySQL_num_Rows ($ mysql_num_rows) ($ mysql_num_rows) (Qaytadan qaytish)
}
// foydalanuvchiga ega bo'lish // foydalanuvchi ob'ektini qaytaradi. Foydalanuvchi identifikatorini shaxsiy funktsiya sifatida oladi ($ db \u003d yangi db (Natija \u003d 'ID \u003d $ id)); Yangi foydalanuvchini ($ natija) qaytarish );)))
?>

Kirish () funktsiyasi

Login () funktsiyasi nomi bilan aniq. USERS foydalanuvchi nomi va $ parol foydalanuvchilari dalillarni oladi va ularni tekshiradi. Agar hamma narsa mos bo'lsa, foydalanuvchi ob'ektini barcha ma'lumotlar bilan yaratadi va seansda saqlaydi. E'tibor bering, biz faqat php seriyasi () funktsiyasidan foydalanamiz. Bu tanazzulga () yordamida osongina bekor qilinishi mumkin bo'lgan ob'ektning saqlangan versiyasini yaratadi. Shuningdek, kirish vaqti saqlanadi. Bu kelajakda foydalanuvchilarga saytda qolish muddati to'g'risida ma'lumot berish uchun foydalanilishi mumkin.

Shuningdek, siz $ ["tizimga kirgan_in"] ni o'rnatganligi haqida xabar berishingiz mumkin. 1. Bu bizga har bir sahifani mantiqan tizimga kirish uchun osonlikcha tekshirish imkonini beradi. Faqat bu o'zgaruvchini tekshirish kifoya.

Chiqish ()

Shuningdek, oddiy xususiyat. PHP-disksiz () funktsiyasi o'zgaruvchilarni xotirada tozalaydi, seans_destroy () Sessiyani o'chiradi.

Funktsiyalarni tekshirish ()

Ingliz tilini biladigan kim funktsiyani tushunadi. Ma'lumki, bu ma'lumotlar bazasini, shunga o'xshash login ishlatilsin yoki yo'qmi degan savolni so'raydi.

Olish () funktsiya

Ushbu xususiyat noyob foydalanuvchi identifikatorini oladi va db sinf sinfidan foydalangan holda ma'lumotlar bazasiga, ya'ni tanlangan () funktsiyalar mavjud. U bir nechta foydalanuvchi ma'lumotlari bilan assotsiatsiyani oladi va yangi foydalanuvchi ob'ektini yaratadi, dizaynerga qatorni uzatadi.

Uni qayerdan ishlatishim mumkin? Masalan, agar siz maxsus foydalanuvchi profillarini namoyish qiladigan sahifani yaratsangiz, bu ma'lumotni jadallashtirishingiz kerak bo'ladi. Shunday qilib, buni qila olasiz: (men aytaman, aytaman http://www.website.com/profile.php?userid\u003d3)

// Eslatma: Siz avval ma'lumotlar bazasi ulanishini ochishingiz kerak. // qo'shimcha ma'lumot uchun 1 qismga qarang. // Siz ham siz "sinf fayllarini o'z ichiga olganingizga ishonch hosil qilishingiz kerak.
$ Vositalar \u003d yangi Userts (); $ Foydalanuvchi \u003d $ Tools-\u003e oling ($ _ ["UserID"] "); Echo "Foydalanuvchi nomi:" $ Foydalanuvchi nomi. ""; Echo "yuyind:". $ Foydalanuvchi-\u003e Yashliqlar. "";

Oson! Haqiqatmi?

So'nggi zarba server qismi: Global.inc.php

global.inc.php saytning har bir sahifasi uchun talab qilinadi. Nima uchun? Shunday qilib, biz barcha odatiy operatsiyalarni sahifada kerak. Masalan, biz sessiya_startni () boshlaymiz. BD ulanish ham ochiladi.

"Sinflar / Userfolass.php" talab qiladigan_once talab qilinadi;
"Darslar" darslari / db.class.php "talab qilinadi;
// Ma'lumotlar bazasiga $ db \u003d yangi db () ga ulaning; $ Db-\u003e ulanish ();
// USerts Ob'ektini boshlang Atserals \u003d Yangi Userts (); // seansni boshlang
sessiya_start ();
// Agar ($ _ sessiya) bo'lsa, seans o'zgaruvchilari ($ _ Sectializatsiya) ($ _ Sessiya)) ($ _ Sessiya)) ($ _ Secial Seciale) ($ 'Uservers- \u003e Oling ($ foydalanuvchi-\u003e ID));)?\u003e

U nima qiladi?

Bu erda bir nechta narsalar mavjud. Birinchidan, biz bazaga ulanishni ochamiz.

Ulanishdan keyin biz sessiya_start () funktsiyasini boshlaymiz. Funktsiya seansni yaratadi yoki agar foydalanuvchi allaqachon tizimga kirgan bo'lsa, joriy holatni davom ettiradi. Bizning arizamiz foydalanuvchilar uchun \\ ni tugatish uchun mo'ljallanganligi sababli, ushbu xususiyat har bir sahifada majburiydir.

Keyingi, biz foydalanuvchi bloklanganligini tekshiramiz. Ha bo'lsa - biz foydalanuvchi haqidagi so'nggi ma'lumotlarni namoyish qilish uchun $ _Sress ["foydalanuvchi"] yangilaymiz. Masalan, agar foydalanuvchi elektron pochtasini o'zgartirsa, eskisi sessiyada saqlanadi. Ammo avtomatik yangilash yordamida bu sodir bo'lmaydi.

Bunda ikkinchi qism oxiriga keldi! Ertaga ushbu mavzu bo'yicha yakuniy darsni kuting.

Barcha ezgu tilaklarni tilayman!

Ko'rsatilgan foydalanuvchining barcha ma'lumotlarini o'z ichiga olgan WP_USER ob'ektini oladi.

Qayta qaytarilgan funktsiyalar ma'lumotlar bazasi jadvaliga to'liq mos keladi: WP_Users va WP_Uermeta (jadval tavsifi).

Bu unumdor funktsiya - i.e. Uni plagindan almashtirish mumkin. Bu shuni anglatadiki, u faqat barcha plaginlarni ulagandan so'ng ishlaydi va shu nuqtai nazardan, funktsiya hali aniqlanmagan ... Shuning uchun ushbu funktsiyani to'g'ridan-to'g'ri vilkadan to'g'ridan-to'g'ri deb atash mumkin emas . Ular kanca plaginlari_ yuklangan yoki undan keyinroq, masalan, kanca tashabbusi bilan chaqirish kerak.

Funktsiyani almashtirish (Redefinition) - plaginda siz xuddi shu nom bilan funktsiyani yaratishingiz mumkin, shunda u joriy funktsiyani o'zgartiradi.

✈ 1 Vaqt \u003d 0.000296C \u003d tez | 50000 marta \u003d 0.78c \u003d juda tez | PHP 7.1.2rc1, wp 4.7.2

Ilgaklar yo'q.

Qaytish

WP_USER / FALSE. Ma'lumot ob'ekti yoki noto'g'ri, agar ko'rsatilgan foydalanuvchini topmasa.

Ishlatish

get_userdata ($ userid); $ Foydalanuvchi eri. (raqam) (majburiy) Ma'lumotlar olish kerak bo'lgan foydalanuvchi identifikatori.
Odatiy: yo'q

Misollar

# 1 Ob'ekt ob'ekti olingan ma'lumotlarni qanday chiqaring

$ Foydalanuvchi_info \u003d get_userdata (1); Echo "Foydalanuvchi nomi:". $ Foydalanuvchi_info-\u003e user_login. "\\ n"; Echo "Kirish darajasi:". $ Foydalanuvchi_info-\u003e user_level. "\\ n"; Echo "ID:". $ Foydalanuvchi_info-\u003e id. "\\ n"; / * Bo'ladi: foydalanuvchi nomi: Ma'murga kirish darajasi: 10 ID: 1 * /

№ 1.2 ma'lumotlar o'zgaruvchida

Yana bir misol, men avval ma'lumotlarni o'zgaruvchilar ichiga yozaman va keyin ekrandan olib tashlayman:

$ Foydalanuvchi \u003d Conn_userData (1); $ Foydalanuvchi nomi \u003d $ foydalanuvchi-\u003e user_login; $ birinchi_name \u003d $ foydalanuvchi-\u003e birinchi_Name; $ Oxirgi_name \u003d $ foydalanuvchi-\u003e So'nggi_name; Echo "$ birinchi_name $ $ So'nggi_name login: $ Loginlik."; / * Ob'ekt $ Foydalanuvchi: WP_USER ob'ektlari (\u003d\u003e Starclass ob'ektlari (\u003d 80 \u003d\u003e Kian \u003d\u003e $ p $ bjfkjkyuwgnsq. \u003d\u003e Kian \u003d\u003e [Elektron pochta bilan himoyalangan] \u003d\u003e http://example.com/ \u003d 2016-09-01 00:34:42 \u003d\u003e \u003d\u003e KOGIAN) \u003d\u003e Co_CAPAPAPLES \u003d\u003e Abonent) \u003d\u003e Comray (\u003d\u003e 1 \u003d\u003e 1 \u003d\u003e 1) \u003d\u003e \u003d 1) * /

# 2 sinf usullari

Get_userData () bilan olingan ob'ekt () sinf namunasidir va undan foydalanish mumkin bo'lgan usullarga ega. Ba'zan u qulay bo'lishi mumkin. Bu erda $ foydalanuvchi-\u003e olish () usulidan foydalangan holda foydalanuvchi variantini olishning oddiy misolidir:

$ Foydalanuvchi \u003d Conn_userData (1); echo $ Foydalanuvchi nomi \u003d $ foydalanuvchi-\u003e oling ("User_login");

Ba'zi usullar ro'yxati:

    olish ($ tugmasi) - variantni qaytaring;

    has_PROP ($ tugma) - ko'rsatilgan variant o'rnatilganligini tekshiradi;

    iz_cap ($ cap) - foydalanuvchi belgilangan imkoniyat yoki rolga egaligini tekshiradi;

    get_Ro_Caps () - foydalanuvchining rolining barcha xususiyatlarini oladi va ularni alohida foydalanuvchi imkoniyatlari bilan birlashtiradi;

    qo'shish_ROL ($ roli) - foydalanuvchi uchun rol qo'shadi;

    emas_rol ($ roli) - foydalanuvchi rolini olib tashlaydi;

  • set_rot ($ roli) - foydalanuvchi rolini belgilaydi;

Qaydlar

Siz ma'lumot olish uchun foydalanishingiz mumkin bo'lgan WP_USERS va WP_Uermeta jadvallarining ba'zi foydali qadriyatlari:

  • ko'rsatiladigan ism.

foydalanuvchi_metta.

  • user_Desript.

    wP_CAPAPTUTS (massiv)

    admin_color (Ma'mur ma'muri paneli. Standart - yangi)

    yopiqPostboxes_page.

  • sochal_domain.

Shuni ham ta'kidlash kerakki, 3.2-versiyadan., Qaytarilgan ma'lumotlar biroz o'zgardi: WP_User ob'ektiga qaytariladi. Ob'ektdagi ma'lumotlar guruhlarga bo'linadi: ma'lumotlar, qopqoqlar, rollar (oldingi ma'lumotlar umumiy ro'yxatda qaytarildi).

Biroq, PHPning "Sehr" (xizmat ko'rsatish) usullari tufayli ma'lumotlarni avvalgidek olishingiz mumkin, masalan, ma'lumotlarga quyidagilar: get_usserdata (1) -\u003e Ma'lumot-bitation, lekin siz ularni xuddi shunday olishingiz mumkin Bu: Con_userData (1) -\u003e RoM_endata, Var_dump () bu munosabatlarni ko'rsatmaydi.

Kod foydalanuvchi foydalanuvchisi: WP-ni o'z ichiga oladi / plaginlar.php 5.2.2

document.write("");
Sizga maqola yoqdimi? Do'stlar bilan bo'lishish uchun: