Php-fig rasm nima? "FAULIYAT" BIRINChI SASTA FAQAT BIRINChI KONSA SHAXSIY QANDAY QANDAY QANDAY QANDAY QANDAY QANDAY QANDAY QANDAY QANDAY QANDAY QANDAY QANDAY QANDAY QILIB BERADI

16.09.2016

PHP-Fpm ma'lumotlar bazasidagi dastur serverining ishlashini qanday kuchaytirishingiz, shuningdek FPM jarayonining konfiguratsiyasini tekshirish uchun tekshiruvlar ro'yxatini tuzishingiz mumkinligini aniqlashga harakat qilaylik.

Birinchidan, basseyn konfiguratsiya faylining joylashuvini aniqlashga arziydi. Agar siz PHP-Fpmni tizim omboridan, keyin basseyn konfiguratsiyasidan o'rnatgan bo'lsangiz www. U taxminan bu erda /etc/php5/fpm/pool.d/www.conf. Agar sizning qurilishingiz ishlatilsa yoki boshqa OS (Debian emas) bo'lsa, siz hujjatdagi faylning manzilini qidirishingiz yoki uni qo'lda belgilashingiz kerak.

Keling, konfiguratsiyani batafsil ko'rib chiqishga harakat qilaylik.

Unix rozetkalariga boring

Ehtimol, veb-serveringizdan PHP jarayonlariga qanday ma'lumotlar haqida e'tibor berishdir. Bu tinglash tartibida aks etadi:

ting \u003d 127.0.0.1:9000

Agar manzil o'rnatilgan bo'lsa: Port TCP Stack orqali o'rnatiladi va bu ehtimol unchalik yaxshi emas. Agar rozetkaga yo'l bo'lsa, masalan:

ting \u003d /var/run/php5-Fm.Sock.

ma'lumotlar UNIK rozetkasidan o'tadi va siz ushbu bo'limni o'tkazib yuborishingiz mumkin.

Nima uchun u Unix rozetkasida harakat qilish kerak? Uds (Unix domen rozetka), TCP Stack-ga qarama-qarshi, katta afzalliklarga ega:

  • kontekstni almashtirishni talab qilmang, Uds Netisrdan foydalaning)
  • uds Datagram to'g'ridan-to'g'ri belgilangan rozetkaga yozildi
  • datagram Uds-ni yuborish kamroq operatsiyalarni talab qiladi (cheksiz, hech qanday TCP-Izlash emas, marshrut chiqarmaslik)

TCP o'rtacha kechikish: 6 AQShning o'rtacha kechikish: 2 AQSh TCP o'rtacha o'rtacha quvvat: 253702 MSG / Sning o'rtacha tarmoqli: 1733874 msg / s stubn o'rtacha: 1682796 msg / s

Shunday qilib, Udd kechikishi ~ 66% kamroq va keng tarqalgan 7 baravar ko'proq TCP. Shuning uchun, ehtimol, u Uds-ga o'tish kerak. Mening ishimda rozetkada rozetkada /vat/run/php5-fm.Sock-da joylashgan bo'ladi.

; Bu haqda bu - tinglang \u003d 127.0.0.1:91 tinglang \u003d /var/run/php5-FPM.Sock

Shuningdek, siz veb-server (yoki aloqa kerak bo'lgan boshqa jarayonga kerak bo'lgan har qanday boshqa jarayonlar) rozetkaga kirish huquqini berishingiz kerak. Buning uchun sozlamalar mavjud. ting.grup. va ting.matode. Bizning php-FPM va veb-serverdan, bizning guruhingiz bilan bitta foydalanuvchi yoki guruhdan ham ishlov berishdir. www-ma'lumot.:

ting.Uz.Uner \u003d www-ma'lumot tinglash.group \u003d www-ma'lumot tinglash.Mode \u003d 0660

Tanlangan tadbirni qayta ishlash mexanizmini tekshiring

I / O (kirish-chiqish, fayllarni / asboblar / panjara) bilan samarali ishlash bilan ishlash uchun sozlama to'g'ri ko'rsatilganmi yoki yo'qligini tekshirish kerak. tadbirlar.Manexizm. Agar php-fpm tizim omboridan o'rnatilgan bo'lsa, ehtimol hamma narsada bo'lishi mumkin - u ko'rsatilmaydi (avtomatik ravishda o'rnatilgan) yoki to'g'ri ko'rsatilgan yoki to'g'ri ko'rsatilgan.

Uning ahamiyati OSga bog'liq, buning uchun hujjatlarda ishora bor:

; - Epol (Linux\u003e \u003d 2.5.44); - bokue (FreeBSD\u003e \u003d 4.1, Opelbsd\u003e \u003d 2.9, NetBSD\u003e \u003d 2.0); - / de / so'rov (Solaris\u003e \u003d 7); - port (Solaris\u003e \u003d 10)

Masalan, agar biz zamonaviy Linux tarqalishi ustida ishlayotgan bo'lsak, bizda Epul kerak bo'ladi:

voqealar.Manexing \u003d Epol

Hovuz turi - dinamik / statik / ondemand

Shuningdek, jarayon menejeri Sozlamalar (Bosh vazir) ga e'tibor berishga arziydi. Aslida, bu barcha filiallarni boshqaradigan asosiy jarayon (dastur kodini ijro etuvchi) konfiguratsiya faylida ko'rsatilgan ma'lum bir mantiq bilan boshqaradi.

Umuman olganda, 3 jarayonni boshqarish sxemalari mavjud:

  • dinamik
  • statik.
  • so'rov bo'yicha; talabda.

Eng sodda statik.. Uning ishining sxemasi quyidagicha: Bolalarning belgilangan miqdordagi jarayonlarini ishga tushiring va ularni ish holatiga saqlang. Ushbu operatsiyaning sxemasi juda samarali emas, chunki so'rovlar soni va ularning yuklanishi vaqti-vaqti bilan farq qilishi mumkin, chunki ular har doim ma'lum miqdordagi xotirani egallab olishadi va navbat buyrug'iga har doim cho'qqilarni qayta ishlay olmaydilar .

dinamik Basseyn bu muammoni hal qiladi, u yuklash faylining qiymatlariga qarab, ularni katta yoki kichik tomonga o'zgartiradi, ularni katta yoki kichik tomonga o'zgartiradi. Ushbu basseyn ilk server uchun eng mos keladi, bu so'rovga tezkor javob berishni talab qiladi, cho'qqini tejash bilan ishlash kerak (oddiy bo'lsa, filiallarni kamaytirish bilan).

so'rov bo'yicha; talabda. basseyn juda o'xshash statik.Ammo bu asosiy jarayon boshida bola jarayonlarini boshlamaydi. Faqat birinchi so'rov kelib chiqqanda - birinchi bola jarayoni yaratiladi va ma'lum kutish vaqti tugagandan so'ng (konfiguratsiyada ko'rsatilgan) u yo'q qilinadi. Shuning uchun, cheklangan resurslar yoki tezkor javob talab etmaydigan mantiqli serverlar uchun u dolzarbdir.

Xotira oqimi va oom qotili

Diqqat bolalar uchun amalga oshiriladigan talabnomalarning sifatiga to'lanishi kerak. Agar dastur sifati juda yuqori bo'lmasa yoki uchinchi tomon kutubxonalari qo'llanilsa, unda siz mumkin bo'lgan xotira etishmovchiligi haqida o'ylashingiz kerak va bunday o'zgaruvchini belgilashingiz kerak:

  • pm.max_requonlar.
  • so'rov_terminate_tionute.

pm.max_requonlar. Bu bolalarni jarayonlar yo'q qilinishidan oldin so'raladigan so'rovlarning maksimal sonidir. Jarayonni majburiy ravishda yo'q qilish, bolalar jarayoni xotirasi oqish tufayli "shishish" holatidan qochadi (chunki jarayon so'rov so'rab murojaat qilgandan keyin ishlash davom etmoqda). Boshqa tomondan, juda kichik qiymat tez-tez qayta boshlanadigan vaqtni tez-tez qayta boshlashga olib keladi, bu esa ishlashda yo'qotishlarga olib keladi. 1000 qiymatdan boshlab, ushbu qiymatni kamaytirish yoki oshirish kerak.

so'rov_terminate_tionute. Bola jarayonining maksimal harakatlanish vaqtini yo'q qilishdan oldin belgilaydi. Bu sizga uzoq so'rovlardan qochishga imkon beradi, agar biron bir sababga ko'ra Max_Excection_TeThertime-ning tarjimon sozlamalarida o'zgartirilgan bo'lsa. Qiymat ishlov berilgan dasturlar mantig'iga asoslanib, aytiladi 60-yillar. (1 daqiqa).

Dinamik pulani o'rnatish.

Asosiy server arizasi uchun, aniq afzalliklar tufayli dinamik basseyn ko'pincha tanlanadi. Uning ishi quyidagi sozlamalar bilan tavsiflanadi:

  • pm.max_grenild. - Maksiardlarning maksimal soni
  • pm.start_servers. - boshidagi jarayonlar soni
  • pm.min_sce_servers - ulanishlarni kutayotganda minimal miqdordagi jarayonlar soni (ishlov berish uchun)
  • pm.Max_Scare_servers - ulanishlarni kutayotgan harakatlarning maksimal soni (qayta ishlash uchun so'rovlar)

Ushbu qadriyatlarni to'g'ri belgilash uchun quyidagilarni ko'rib chiqish kerak:

  • bola jarayonini qancha xotira qancha miqdorda iste'mol qiladi
  • kiritish mumkin bo'lgan Operation hajmi

O'rtacha xotira qiymatini avvalgi ish jadvalidan foydalanib, bitta php-fpm jarayoni uchun birinchi php-fpm jarayonini bilib oling:

# PS -CC PHP-FPM --Sort: RSS S uid Pit Ppid C PRI Ni Rss sz winch Cmd s 0 1445 1 0 8088888885888 00:00:00 PHP5-FPM

Biz RSS ustunidagi o'rtacha qiymatga (yashash joyi) kilobi o'lchamida). Mening holatimda u ~ 20MB. Agar dasturda yuklar bo'lmasa, siz PHP-FPM-dagi eng oddiy yukni yaratish uchun Apache-ning benchmark-dan foydalanishingiz mumkin.

Kerakli umumiy / qulay / xotiradan foydalanish mumkin ozod.:

# Free -M Umumiy ishlatilgan bepul ... Xotira: 4096 600 3496

Jami maksimal jarayonlar \u003d (jami RAM - Operativ Ram + bufer) / (1000MB xotira uchun xotira) Umumiy RAM: 4000MB Xavfsizlik Temir: 1000MB Xemis uchun php-fpm jarayonlar \u003d (4096 - (1000 + 400)) / 30 \u003d 89 Hatto soni: 89 80 ga qadar kichikroq tomonga yaxlitlanadi

Qolgan ko'rsatmalarning qiymati Ilovada kutilayotgan yuk asosida va shuningdek PHP-FPM operatsiyasidan tashqari boshqa serverni hisobga olish va boshqa serverni hisobga olish (DBMS shuningdek resurslarni talab qiladi). Agar serverda ko'plab vazifalar mavjud bo'lsa - K-ichida boshlang'ich / maksimal jarayonlar sifatida kamaytirish kerak.

Masalan, biz 2 ta basseynni www1, www1, www12 (masalan, 2 veb resurslari), so'ngra har birining konfiguratsiyasi quyidagicha ko'rinishi mumkinligini hisobga olamiz:

pm.Max_children \u003d 40; 80/2 pm.start_serers \u003d 15.min_sce_servers \u003d 15 Pm.mx_sce_servers \u003d 25

PHP dasturlash tili Shaxsiy sahifalarni umumiy maqsadlarga yaratish vositasining katta usuli edi. Bugungi kunda u butun dunyo bo'ylab millionlab serverlar o'rnatildi, ular ko'plab loyihalarni yaratadigan millionlab ishlab chiqaruvchilar tomonidan qo'llaniladi.

O'qish va juda mashhur, ayniqsa yangi kelganlar orasida. Shuning uchun tilning rivojlanganidan keyin uning atrofidagi jamoaning kuchli rivojlanishi kuzatildi. Barcha holatlar, turli xil kutubxonalar, doiralari uchun juda ko'p skriptlar. Ro'yxatdan o'tish va yozish kodeksining etishmasligi ushbu mahsulot ishlab chiqaruvchisi ishlab chiqaruvchisi o'z printsiplariga binoan qurilgan katta miqdordagi suv ombori paydo bo'lishiga olib keldi. Bu, ayniqsa, har xil bilan ishlashda sezilarli edi PHP tizimlariUzoq vaqt davomida ular ko'pincha ular tomonidan hal qilingan vazifalar ko'pincha o'xshashligiga qaramay, boshqa asoslarga mos kelmaydigan yopiq ekotizim.

2009 yilda bir nechta doirani ishlab chiquvchilar jamoani yaratishga rozi bo'lishdi PHP-ning o'zaro interzi guruhi (PHP-Fun)Bu ishlab chiquvchilar uchun tavsiyalar keltirib chiqaradi. Bu muhim emasligini ta'kidlash juda muhimdir ISO standartlari, tavsiyalar haqida ko'proq to'g'ri gapiring. Ammo yaratilganidan beri Php-anjir Hamjamiyat ishlab chiqaruvchilari asosiy doiralar, tavsiyalari og'ir vaznga ega. Qo'llab-quvvatlash PSR (PHP standartlari tavsiyasi) standartlari Yakuniy mahsulotni rivojlantirishni osonlashtiradigan va tezlashtiradigan moslikni ta'minlashga imkon beradi.

Umuman olganda, ushbu yozuv paytida 17 ta standart mavjud va ulardan 9 tasi tasdiqlangan, 8 loyiha bosqichida faol muhokama qilinadi, foydalanish uchun 1 standart tavsiya etilmaydi.

Endi har bir standartning tavsifiga bevosita o'taylik. E'tibor bering, men bu erda biron bir standartni ajratmayman, aksincha bu ozgina kirishdir. Shuningdek, har bir moddada faqat ko'rib chiqiladi pSR standartlariRasmiy ravishda qabul qilingan, men.e. joylashgan qabul qilingan holatda..

PSR-1. Asosiy kodlash standarti

Bu eng keng umumiy qoidalar, masalan, foydalanish teglar PHP., Funktsiyalar, sinf va foydalanish joyi joyini ajratib turadigan fayllarni kodlash, sinflar, usullar.

PSR-2. Kod uslubidagi qo'llanma

Bu birinchi standartning davomi bo'lib, Tab kodeksi, qatorlar pul o'tkazmalarini, kod satrlari, boshqaruv tuzilmalarini ro'yxatdan o'tkazish va boshqalarni amalga oshirish.

PSR-3. Tizirish interfeysi.

Ushbu standart yozma ravishda yozilgan ilovalarga kirishni (jurnallashtirish) tizimga taqdim etish uchun mo'ljallangan PHP..

PSR-4. Standart Autoad

Bu, ehtimol, alohida maqolaga bag'ishlangan eng muhim va zarurdir. Amalga oshiradigan sinflar PSR-4.bitta dastur va komponentlardan boshqa loyihalarda foydalanish uchun ehtiyot qismlar va komponentlarga ega bo'lgan bitta avtoulogi tomonidan yuklab olinishi mumkin.

PSR-6. Keshlash interfeysi

Kaching tizimning ishlashini oshirish uchun ishlatiladi. Va PSR-6. Yulduzli interfeys yordamida keshdan ma'lumotlarni saqlash va ajratish imkonini beradi.

PSR-7. Http-xabarlar interfeysi

Bir oz qiyinligini yozayotganda pHP saytlari., deyarli har doim ishlashi kerak HTTP sarlavhalari. Albatta, pHP tili bizga ular bilan tayyor imkoniyatlar bilan ta'minlaydi, masalan superglobal $ _Server massiviVazifalar sarlavha (), setcookie () Ammo, ammo va boshqalar, ularning qo'lda tahlili xatolarga duch keladi va ular bilan ishlashning barcha nuanslarini hisobga olish har doim ham mumkin emas. Va shuning uchun ishlab chiqaruvchining ishini engillashtirish, shuningdek, o'zaro ta'sirning yagona interfeysini yarating Http protokoli Ushbu standart qabul qilindi. Ushbu standart haqida batafsilroq, men quyidagi maqolalarning birida aytib beraman.

PRR-11. Konteyner interfeysi

Yozish paytida PHP dasturlari Ko'pincha siz uchinchi tomon komponentlaridan foydalanishingiz kerak. Va bu o'rmonda bunday bog'liqlikni yo'qotmaslik uchun, kod qaramliklarining turli xil usullari, ko'pincha standart va umumiy denominatorga olib keladi.

PRR-13. Gipermedia havolalari

Ushbu interfeys dasturiy interfeyslarni ishlab chiqish va ulardan foydalanishni osonlashtirish uchun mo'ljallangan ( API.).

PRR-14. Oddiy keshlash interfeysi

Standartning davomi va yaxshilanishi PSR-6.

Shunday qilib, bugun biz ko'rib chiqdik PSR standartlari. Standart holatlari to'g'risidagi hozirgi ma'lumot uchun iltimos, murojaat qiling

PHP "Veb dasturlash tilini" to'liq deb atash mumkin, ular bilan mashhurligi nuqtai nazaridan u bilan raqobatlashishi mumkin bo'lgan boshqa bir tilni topish juda qiyin. Men o'z rivojlanishidan qanday qilib odamlarni o'rganishni o'rganishni o'rganishga qaror qildim, keskin savollarga javob bering, so'nggi yangi elementlarni muhokama qiling va hatto Internetning kelajagiga qarashga harakat qiling. Buning uchun biz afsonaviy ishtirokchilar bilan uchrashdik PHP yadrosi jamoasibu ushbu tilning rivojlanishini bevosita nazorat qiladi va veb-texnologiyalar sohasidagi taniqli jahon mutaxassislari sifatida obro'ga ega bo'ldi.

Shunday qilib, bugungi kunda etakchi ishlab chiquvchilar PHP yadrosi jamoasi - (Andrey ZMievski), (Stas Malishev), (Ilia Alshanetskiy).

Boshlash uchun, iltimos, o'zingiz haqingizda bir oz gapirib bering - hozir nima qilyapsiz va qayerda ishlaysiz. Dasturing olamiga qanday kelganligingiz haqidagi voqeani eslang.

SM: Endi men AQShda yashayman va firmada ishlayman, men ushbu mahsulot infratuzilmasi bilan shug'ullanaman - I.E. Umumiy funktsiya uchun ma'lumotlar bazasini taqdim etadigan va ma'lum bir modullarni ishlab chiqish uchun interfeysga taqdim etadigan tizimning ba'zi qismlari.

Agar biz dasturlashda kelganim haqida gapiradigan bo'lsak, men maktabda va jurnalda e'lon qilingan dasturlar bilan boshlanganman " Texnik - Yoshlar" Avvaliga dasturlashni chaqirishning iloji yo'qligi sababli, men asosan jurnalda chop etilgan dasturlarni, mashinada chop etilgan va olgan narsalarini tomosha qilaman. Ammo keyin men bu qiyin narsani (o'sha paytda) xohlagan narsani bajarishni o'rganishni xohladim va men o'zimning va oqsoqollarning yordami bilan tushuna boshladim - bularning hammasi qanday ishlaydi. U aylanalarda qatnashib, chet el jurnallarini o'qishni kutayotganda soatni yig'ib, keyinchalik va pul topish uchun dasturlarni yozdi. Ma'lum bo'lishicha, men kompyuterlarni foyda olishni va katta omad tilashni yaxshi ko'raman, bu mahorat bugungi kunda mehnat bozorida talab katta.

Bu yo'lda menga ta'sir qilgan barcha narsalarni sanab bering, lekin menga eng katta ta'sir, ehtimol kitoblar, xususan, kitoblar, xususan, "Afsuski tarjimada" boshpanalanmoqda " bemorlarning qo'lida ruhiy kasalxona).

AZ: 5 yil davomida men San-Frantsiskoda yashayman va bu Amerikadagi eng go'zal shahar ekanligiga ishonaman. Men kompaniyada ishlayman. Bu nisbatan yosh startap bo'lsa-da, 110-120 xodimimiz bor. Dunyo bo'ylab turli xil firma bizning mahsulot tizimlarini kuzatish va muammolarni tezda aniqlash uchun bizning mahsulotimizdan foydalanadi. Bizda netflix, prokelin va boshqalar kabi katta mijozlar bor.

Dasturlash bilan romanim haqida ... Menimcha, bu kasb sizdan ko'ra sizni tanlaydi. Men 9 yoshda bo'lganimda eslayman, men birinchi dasturlashtiradigan kalkulyatorimni oldim, ammo men eslaganimdek, matematika, mantiq va texnik narsalarga sezilarli darajada omonatlarim bor edi, chunki eslaganimdek, bu qobiliyatlar dastlab.

Hammasi qanday boshlanishining yorqin namunasi sifatida men bolaligidan hikoya qilaman. Keyin, men ham Sovet bolalari kabi uyda emasman, uyda uyda emas edi, shuning uchun men bir soatlik mashinani ijaraga olishingiz va asosiy va paskalda ishlashingiz mumkin bo'lgan kompyuter markaziga boraman. Men bir necha marta bir necha marta bir necha marta bordim, ammo bir vaqtlar mendan bir vaqtlar men uchun qiziqarli dasturga kirib borardim, men o'zimning vaqtini yo'qotib qo'ydim va borish vaqti keldi uy.

Ushbu markaz allaqachon yopilganda, soat 10 da uyg'ondim. Bu vaqtga kelib, ota-onalar mening barcha do'stlarim, o'qituvchilarim va boshqalarga qo'ng'iroq qilishgan edi. Meni qidirishda, lekin xayriyatki, ular markazdan qaytib kelishga xalaqit berishdi. Keyin men juda ko'p narsa bor, men o'zimni eslayman: men har doim dasturlarni yozyapman va bu qisman virtual dunyoda yashayman, shuning uchun mening hozirgi kasbim bolaligida boshlangan.

IA: Men Toronto, Kanadada yashayman va ishlayman.

Dastlab kelganimga kelsak, bu men uchun juda hayratlanarli. Mening yo'limning boshida dasturlash - bu tasodifiy ishlardan tashqari, yozda men yozgan bitta tasodifiy ishdan tashqari, yozgi va C. dagi past darajadagi rivojlanishdan tashqari. Ongli ravishda yosh bo'lib, men hech qachon vazifalarni bajara olmadim va buni professional tarzda amalga oshirishni rejalashtirmoqdaman. Si-dagi dasturlarini havaskorlar to'plash fonida, men PerL tilida qilingan birinchi shaxsiy veb-chiqishiga aralashdim. Bu erda u Internetga boradigan yo'lni va Internetda ixtisoslashuvim boshlanadi.

Afsuski, ushbu loyiha perlda o'sib borar ekan, men hali ham ushbu tilning nomuvofiqligi menga yoqmadi va o'sha erda men o'sha paytda xizmat qilgan xosting kompaniyasini yoqib yubordi. Men darhol bu tilni yoqtirardim, chunki bu mening sevimli Siga sintaktikada va uning sintaksisida yaqinroq edi. A'lo onlayn hujjatlar - mening tez va yakuniy o'tishimni tugatdi.


Ilya Alshanetskiy (Xiliya Alshanetskiy)

Men 3 marta php 3-dan foydalanib, asta-sekin o'z taraqqiyotini namoyish eta boshladim, ARM kanalida muntazam ravishda Rasmusni yaratuvchisini taklif etadigan imkoniyatlarini kengaytira boshladi. Mendan tuzatishlar va tuzatishlar shunchalik charchagan edi va u menga ushbu loyihaning omboriga to'g'ridan-to'g'ri rezervlar kirdi. O'shandan beri yozgan va bajarilgan narsalar juda ko'p bo'lgan, men hatto 4,3, 5.1 va 5,2 versiyalari uchun ozod qilish menejeri (PHP-Rely Master) bo'lish imkoniyatiga ega bo'ldim.

Aytgancha, ushbu faoliyat bilan parallel ravishda tashqi tijorat mijozlari uchun juda ko'p konsalting ishi bo'lib, ular uchun php-da yaratilgan o'z loyihalarining mahsuldorligi, miqdori, miqdori va xavfsizligi xavfsizligi bilan bog'liq juda ko'p muammolar hal qilindi. Ushbu maslahatlashuvlardan birida men ularning loyihasiga juda chuqur tarqalib, oxir-oqibat ushbu kompaniyaning sherigi bo'ldi va unda men hozirda ishlayapman.

Siz PHP yadrosiga qanday kirdingiz, bunga qanday bordi?

AZ: Masalan, siz bir oz tarixga javob bering. Men 1998 yilda PHP bilan ishlashni boshladim, shundan oldin birinchi versiyalardan biri bo'lgan phpp edi. Biz boshqa tildan PHP-ga boshqa tilni qayta yozamiz va men deyarli unutilgan yordamni topishim kerak edi. Men bunday kutubxonani topmadim, lekin men juda yoqdi, chunki PHP juda yaxshi hujjatlar va APIga ega edi, shuning uchun mening kengayishimni yozishga qaror qildim. Tugatganimda, uni darhol PHP yuborish uchun yubordi. Ular kutilmaganda uni tilning keyingi bo'shlig'iga qo'shishga qaror qilishdi.

Keyinchalik menga rezyumelarga kirish huquqi berildi va men xatolarni tuzatishni boshladim, turli xil funktsiyalarni yozishni va boshqa funktsiyalarni yozishni boshladim. 1999 yil oxiriga kelib, men guruhning eng faol a'zolaridan biri edim va keyinchalik PHP ishlab chiqaruvchilarining Isroilda birinchi Kongressini tilning kelajagini muhokama qilish uchun va bu yangilikni o'z ichiga olgan. Shunday qilib, hech qanday ovoz berilmadi, men darhol kirganim ro'y berdi PHP yadrosi jamoasi.


Rasmus Lerdorf (Rasmus Lerdorf), Yaratuvchi PHP

Bunday ishonch va ochiqlik meni PHP kodidan ko'proq va ko'proq ishlashga undadi. WDDX-dan keyin men sessiyada ishladim, so'ngra qatorlar bilan ishlash uchun bir nechta funktsiyalarni yozdim, keyin PHP-ni perl kabi oddiy iboralarga ega bo'lishiga qaror qildim, shuning uchun PCRE modulini yaratishga qaror qildim. O'sha vaqtga kelib, PHP 4 uzoq davom etdi, ammo men qanday qilib ba'zi muammolar, men qanday ishlaganman (yoki aksincha ishlamadim) narsalar va darslar. Shu munosabat bilan men yaratdim va yaratgan va undan tubdan yangi yordam paydo bo'ldi Ob'ektga yo'naltirilgan dasturlash Keyin yangi PHP 5.

Shundan so'ng, men asosan Zend dvigatelining o'zi uchun yaratdim, shuningdek yangi tobener modulini yaratdim. 2003 yildan beri Rasmus bilan bir qatorda, men u erda PHP-da Unicode-ni qo'llab-quvvatlash uchun loyihani ishga tushirdim, ammo bu boshqa paytlarda ...

Sizningcha, bu PHP-da nima deb o'ylaysiz, uni shunchalik mashhurmi?

AZ: Shunday qilib, men hozir C ++ va Python loyihasini yozyapman, shuning uchun men ushbu "boshqa qo'ng'iroq minorasi" ga o'xshab, ushbu qiyosiy tajribaning asosida javob beraman.

Men uchun asosiysi, PHP boy va keng qamrovli APIga ega, u erda siz ko'pchilik, hatto ba'zida kutilmagan yo'nalishlar. Boshqa tomondan, men odamlardan php-dan foydalanishni boshlash, ular qanday qilib bir necha soat ichida veb-sayt yoki dastur yozishingiz mumkinligini qanday yoqtirishlari kerakligi haqida tez-tez eshitaman. Bu erda PHP ning mohiyati: u bir vaqtning o'zida murakkab va sodda, eski uslubdagi va zamonaviy, asl nusxadan tashqari g'oyalarni tashqi tomondan - bu juda ko'p qirrali.

Xavfsizlik bilan bog'liq xatolar veb-dasturchilar va ularning mahsulotlaridan ko'plab foydalanuvchilarning asosiy bosh og'rig'i hisoblanadi. Sizning boy tajribangizga nazar tashlasangiz, PHP xavfsizligi va uning ishlab chiquvchilari bilan qanday muhim va odatiy muammolar mavjud? Yosh PHP dasturlari tahririda ba'zi maslahatlar bera olasizmi?

SM: Asosiy darslardan biri, bu kodning qolgan qismidan qat'i nazar, kodning xavfsizligi, kodning qolgan qismidan qat'i nazar, bu sifat emas. Xavfsizlik uchun g'amxo'rlik ishning kunlik qismi, birinchi daqiqada, dizayndan va tayyor mahsulotni chiqarishni boshlashi kerak. PHP-da "Tashqardan" xavfsizlik vositalarini qo'shish uchun bir nechta urinishlar amalga oshirildi - ammo tajriba shuni ko'rsatadiki, bu urinishlar amalga oshirilmagan holda hushyor bo'lib, muvaffaqiyatsizlikka uchraydi. Platforma unga faqat kodning xavfsizligiga rioya qilishga yordam beradi, ammo ushbu xavfsizlikni o'z navbatida kuchsiz kafolat berolmaydi.

Shuning uchun, asosiy maslahat quyidagi bo'ladi - hech qachon tashqi ma'lumotlar yoki ma'lumotlarga ishonmang, mumkin bo'lgan nazoratni nazorat qiling. Xavfsizlik masalalarining 99 foizi amalga oshishi haqida taxminlar noto'g'ri, keyinchalik hujum keyinchalik, kod ishlab chiqaruvchi o'zi homilador bo'lganida, kod o'zini tutmaydi. Shuning uchun, har doim o'zingizga savol berish odatini rivojlantiring - "Agar ushbu parametr kutilmagan tarzda o'zgaradimi? Agar bu dalil o'z taxmin qilinmasa nima bo'ladi? Va tegishli ravishda kodingizni sinab ko'ring.

Keyingi tavsiyadir, "biror narsa ruxsatsiz biron bir muammo yo'q" deb tekshirish o'rniga, ma'lumotlarni zarurati bilan kafolatlash uchun ma'lumotlarni qayta o'zgartiradi. Xatolardan qochish juda oson bo'ladi. Shuningdek, kodning boshqa qismlari xavfsizlikni davom ettirishiga ishonmang - masalan, dinamik ma'lumotlar bazasini talab qilsangiz, parametrlar va so'rovni shunday yaratganligiga ishonch hosil qiling va shu tarzda bunday tarzda filtrlanadi sql in'ektsiya Bu mumkin emas - agar siz ma'lumotlarning hali ham filtrlanganligiga amin bo'lsangiz (masalan, ramka darajasida). Keyin, agar tashqi kod bunday tarzda o'zgartirilsa, filtrlanmagan ma'lumotlar to'satdan tartibda tushib ketsa, zaifliklar baribir paydo bo'lmaydi.

Mobil dasturlarning tez o'sishi davom etishi mumkin, ammo ularning aksariyati HTML5-ga universal platforma sifatida o'tadi. Shu munosabat bilan ma'lumotlar sinxronlashtirish protokollarini ishlab chiqish, shuningdek, ko'pincha har xil xususiyatlarga ega bo'lgan an'anaviy brauzerlar va turli xil mijozlar bilan bir vaqtda ishlashga imkon beradigan modellarni ishlab chiqishda.

Umuman olganda, brauzer, nihoyat veb infratuzilmasining to'liq qismiga aylanishi va shuning uchun endi server tomonidan bajariladigan majburiyatlarning bir qismi mijoz tomoniga aylanadi. Shuning uchun, men hozir php bilan ishlayotgan odamlarga maslahat berardim, shu bilan birga JavaScript, HTML5, CSS3 va boshqalardagi so'nggi yutuqlarga amal qiling.

Men a'zolarga minnatdorman PHP yadrosi jamoasiKim katta ish bilan bandlikka qaramay, o'quvchilarimiz uchun savollarga javob berish vaqtini juda yaxshi ko'rdi.

Belgilar:


Andrey Zmeievskiy, murabbiylardan biri PHP loyihasi., ishlab chiqaruvchi Zend dvigateli, loyihalarni yaratuvchisi va ommabop darslikning hammuallifi, PHP-dagi Unicode va OOP dasturlari muallifi. Bo'sh vaqtlarida u sportni yaxshi ko'radi, uyda pishiradi, pishiradi. O'qish va sayohat qilish uchun ko'p narsalarni yaxshi ko'radi.

Stas Malyshev, ishtirokchi PHP loyihasi. 2000 yildan boshlab PHP 5.4, ko'plab Opensurce loyihalari a'zosi. Bo'sh vaqtlarida intellektual o'yinlar (sport versiyasi? Qaerda? Qachon? », - Aikido.

Ilya alschenetskiy, Xavfsizlik bo'yicha ekspert va eng qadimgi ishlab chiqaruvchilardan biri, PHP, 5.1, 5.2 versiyalari, Forum dvigatelini yaratuvchisi, Forum dvigatelini yaratuvchisi, Opensurce loyihasining faol a'zosi. Va veb-dasturlash xavfsizligi bo'yicha.

p.S.: Yangi 2013 yilda men yangi Jahon ishlab chiqaruvchilari bilan ko'plab VIP so'rovlarini o'tkazaman, ba'zi bir belgilar sir bo'lishi mumkinligini va'da qilaman.

1. Bitta kalit tomonidan guruh

Ushbu funktsiyalar qator uchun guruh sifatida ishlaydi, ammo bitta muhim cheklov: bitta bitta guruh "ustun" ($ identifikator) mumkin.

Aclayiqiqki AclayiqiqkiOUGIONFICIFER ($ $ CACT_COLEN) ($ ID raqamlari) ) Foydalanish ($ id) ($ in_5Rey ($ qiymat, massiv_keylar);) massiv_filter_bote); $ massila;

2. Jadval uchun noyob satrlarni aniqlash (Twrdiksiyalital qator)

Ushbu funktsiya "qatorlar" filtrlash uchun. Agar aytsak, ikki tomonlama massiv, keyin har bir element qator bo'ladi. Shunday qilib, biz ushbu funktsiya bilan takrorlangan qatorlarni olib tashlashimiz mumkin. Ikki qator (birinchi o'lchamdagi elementlar) teng bo'lsa, agar ularning barcha ustunlari (ikkinchi o'lchov elementlari) teng bo'lsa. "Ustun" qadriyatlarining rahm-shafqatiga qo'llaniladi: agar qiymat oddiy turga ega bo'lsa, taqqoslashda qiymatning o'zi ishlatilishi mumkin; agar qiymat taqqoslashda foyda keltirsa; Aks holda uning turi (massiv, ob'ekt, resurs, noma'lum tip) qo'llaniladi.

Strategiya oddiy: asl massivning asl massivining "ustunlari" bo'lgan plandet massividan asl qatordan foydalaning; Keyin massiv_unik (...) ni qo'llang; Va oxirgi marta asl qatorni filtrlash uchun aniqlangan identifikatorlardan foydalaning.

Funktsiya ArrauniqiqkiuniqueeDrow ($ ElementstersePorter) ($ ni qayta yuborish). $ ($ Dasturiy) ($ dasturiy) ($ dasturi) ($ dasturiy) ($ dasturiy) ($ dasturiy) ($ ($ ($) (Maydoni) (Mayk) (Maydoni) (Funktsiya) (Funktsiya ($) (Maydoni) $ Qimmat \u003d gettype ($ $ maydon: $ bJaho turi; $ satr ($ ElementlarPore); $ ElementSreartorePilyuniue \u003d $ ElementlarPrigicePlode \u003d $ elementlariPrigieM_ki ($ copaye_intersect_key); $ Stolni qaytaring;)

Bu, shuningdek, agar uning turi ob'ekt bo'lsa, "ustun" qiymatining qiymatini aniqlash, taqqoslash, taqqoslashni yaxshilash mumkin.

$ Chetereparator ko'proq yoki kamroq murakkab bo'lishi kerak, Z.B. Sp_obje_hash ($ bu).

3. Jadval uchun noyob identifikator ustunlari bilan qatorlarni aniqlash (Twrdikental qator)

Ushbu echim 2-chi bilan bog'liq. Endi to'liq "qator" noyob bo'lishi kerak emas. Ikki "qator" (birinchi o'lchov elementlari) hozirda teng bo'ladi mUVOFIQ. "Bitta" qator maydonlari "da" maydonlar "ga teng (bir xil kalitli elementlar).

"Tegishli" "yo'nalishlar" - "Ikkinchi o'lchov elementlari" (ikkinchi o'lchov elementlari), bu o'tgan "identifikatorlar" elementlaridan biriga teng bo'lgan.

AstrayeoneeBymiltlemoditiviciersifionsFions (Casma $ Compyeparator ($ scheparatpatorue, $ CRAYFOGEASELOVER \u003d $ CRAYROGEASESTOROVENTRYOW ($ CRAYFODEAPUNTROWN. ($ stol, $ Cortaunionuw); CompyunieeAluclitlityfiersifiers;) Funktsiya RemovyeVirpleFickiers; Count $ Sountleist \u003d Forecey \u003d\u003e $ ($) ))) (Foreware \u003d\u003e $ \u003d\u003e $ ($ yoki ColorName) ($ COLENNAMEAM) [$ [$ Runname]]) ($. $ maydon \u003d\u003e $ ($ ($ ColorName) ($ ($ 3 / ColorTyames) [$ [$ Runname] [$ 33 RAPREYAMES]

Texnologiyalar rivojlanganidan beri, har bir dasturchi hozirda yon ta'siri sifatida o'z kompyuteriga ega ekanligi sababli, bizda minglab turli xil kutubxonalar, ramka, xizmatlar, apis va boshqalar mavjud. barcha holatlar uchun. Ammo hayotning bu holati kelganda, muammo shundan va ular unchalik mos emas - qayta yozish yoki turli xil foydalanish imkoniyatlari uchun bir nechta echimlarni mahkamlash.

O'ylaymanki, ko'pchilik ko'pincha bir nechta tayyor echimlarning birlashishi uchun kodni yozishni unutish uchun juda zarur deb o'ylashdi. Ba'zida bunday kombinatsiyalar keyingi vazifalarda bir necha marta ishlatiladigan yangi echimlarga aylanadi.

Biz ma'lum bir "yugurish" vazifasiga murojaat qilamiz - PHP ma'lumotlar bazalari bilan ishlash uchun ob'ekt qatlami. Solutionlar postdan tortib, ko'p darajada (va menimcha, PHP) orm dvigatellari bilan emas.

Ushbu echimlarning aksariyati boshqa platformalardan PHP-ga o'tdi. Ammo ko'pincha mualliflar PHP xususiyatlarini hisobga olmaydilar, ular ham imlo va ko'chma tuzilmalardan foydalanishni keskin soddalashtiradi.
Ushbu vazifa klassi uchun umumiy arxitektsiyalardan biri faol yozuv namunasidir. Xususan, ushbu shaklda (sub'ektiv) ushbu shaklda yoki boshqa bir platformalarda, EFB3 bilan tugaydigan doimiy bo'laklarda ishlatilgan.

Shunday qilib, biz PHP uchun shunga o'xshash dizaynni tuzdik. Ikki salqin bo'lakni bir-biriga bog'lab, Tayyor Adodb kutubxonasi va PHP ob'ektlarining engil va jikri va dinamik xususiyatlari.
Ko'p sonli Adodb xususiyatlaridan biri bu ma'lumotlar bilan assotsiatativ massivlar asosida (qo'shish) va yangilanishlar (yangilash) uchun SQL avtomatik avlod haqidagi so'rovlardan biri.
Aslida, batafsil joylar dalalarning ismlari va qiymatlar nomlari - mos ravishda, ma'lumotlar, ma'lumotlar, ma'lumotlar, ma'lumotlar va SQL-ga maslahatlashadigan satrni yaratadigan massivlar mavjud. Ammo Adodb buni ko'proq intellektual qiladi. Ushbu so'rov avval ma'lumotlar bazasi sxemasidan o'qilgan jadval tuzilishiga asoslanadi. Natijada, birinchi navbatda, faqat mavjud maydonlar hammasi qulab tushmoqda, ikkinchidan, maydon turi hisob raqamlariga kiradi - tirsaklar agar Adodbning o'rniga, agar a "o'rniga ko'rsatiladi uzatiladigan qiymatdagi satr va boshqalar.

Endi PHP-dan o'ting.
Bunday sinfni tasavvur qiling (soddalashtirilgan).

Sinf muassasasi (himoyalangan $ \u003d Caslay (); Jamzuning yakuniy funktsiyasi __set ($ ism, $ \u003d $) ($ ism) ($ ism) \u003e Maydonlar [$ ism];)))

Adodb kutubxonasining ichki qatorini avtomatik ravishda amalga oshirish orqali biz ushbu ob'ekt bilan ma'lumotlar bazasida ma'lumotlarni yangilash uchun avtomatik ravishda SQL so'rovlarini qayta ishlab chiqarishimiz mumkin, ammo ularda XML va The-ga asoslangan ma'lumotlar bazasidagi jadvallar maydonining katta dizaynlari kerak emas kabi. Faqat dala nomi ob'ektning mulkiga to'g'ri kelishi kerak. Ma'lumotlar bazasi va ob'ekt sohalarida ko'rsatilganligi sababli, qiymat kompyuter uchun qiymatga ega emas, shuning uchun ular bir-biriga to'g'ri kelmasligining sababi yo'q.

Uning yakuniy versiyasida qanday ishlashini ko'rsating.
To'ldirilgan sinf kodigi Gistda joylashgan. Bu ma'lumotlar bazasi bilan ishlash uchun zarur bo'lgan minimal miqdordagi mavhum sinf. Ta'kidlaymanki, bu sinf bir necha o'nlab loyihalarda o'tkazilgan echimning soddalashtirilgan versiyasidir.

Tasavvur qiling, bizda bunday belgi bor:

"Foydalanuvchilar" ("Foydalanuvchi nomi" (255), "Yaratilgan sana", "User_Id" int (11) Null_Increment, birlamchi tugma ('foydalanuvchi_id')
Ma'lumotlar bazasi turi muhim emas - Adodb barcha umumiy ma'lumotlar bazasi serverlari uchun ko'chma bo'ladi.

Korxonaning sinfiga qarab foydalanuvchi foydalanuvchi sinfini yarating

/ ** @ jadval \u003d Foydalanuvchilar * @ klaviatillo \u003d user_id * / class foydalanuvchisi

Aslida, barchasi.
Odatda:

$ Foydalanuvchi \u003d yangi foydalanuvchi (); $ Foydalanuvchi-\u003e Foydalanuvchi nomi \u003d "Vasya Pupkin"; $ Foydalanuvchi-\u003e Yaratilgan \u003d Vaqt (); $ Foydalanuvchi-\u003e Savol (); // omborga saqlang // yuklash uchun yana $ TheSAMUser \u003d Foydalanuvchi :: Yuk ($ Foydalanuvchi_id); Echo $ TheSAMUser -\u003e Foydalanuvchi nomi;

Stol va asosiy maydon soxtalashtirishni anglatadi.
Taqdimotni ham ko'rsatishimiz mumkin (masalan, versiya \u003d foydalanuvchiSview) Agar tez-tez sodir bo'lsa, ob'ektning janubi yoki hisoblangan maydonlar bilan jadvali asosida tanlangan. Bunday holda, ma'lumotlar ko'rinishdan tanlanadi va jadval yangilanadi. Bunday izohlarni yoqtirmaydigan kimsa getmetmatada () usulini bekor qilishi va qaytarilgan massivda jadval parametrlarini belgilashi mumkin.

Ushbu amalga oshirishdagi tashkilot sinfida yana nima foydalanadi?

Masalan, biz tashkilotga yoki standart yaratilish sanasini boshlash uchun tashkilotga kiritilgan tashabbus () usulini bekor qilishimiz mumkin.
Yoki ortiqcha yuklash usuli () usulini yuklab olinadi, bu esa mandalni vaqtni vaqtincha ishlatish uchun vaqtni vaqtincha ishlatish uchun avtomatik ravishda chaqiriladi.
Natijada biz yanada murakkab dizayn olamiz.

/ ** * @ jadval \u003d Foydalanuvchilar * @ FiectFild \u003d User_Id * / Class Foydalanuvchisi ($ bu-\u003e Yaratilgan \u003d vaqti ().) Himoyalangan funktsiya () -\u003e Yaratilgan \u003d Strtoti ($ bu-\u003e yaratilgan);))

Siz, masalan, siz haddan tashqari yuklashingiz mumkin bo'lgan voqealar, masalan, saqlashdan oldin yoki boshqa harakatlar qilishdan oldin o'zingizni haddan tashqari yuklashingiz mumkin - masalan, foydalanuvchini yo'q qilishda rasmlarni olib tashlashingiz mumkin.

Biz korxonalar ro'yxatini mezon bo'yicha yuklaymiz (aslida bu shart).
$ $ \u003d Foydalanuvchi :: yuklash ("Pupkin" kabi "Kopkin" kabi;
Shuningdek, korxona sinfi SQL so'rovini gapirish uchun o'zboshimchalik bilan, "tubjoy" ni amalga oshirishga imkon beradi. Masalan, ba'zi statik guruhlar bo'lgan foydalanuvchilar ro'yxatini qaytarib berishni istaymiz. Xususan, dalalarning qaytishi muhim emas (asosiy narsa bu foydalanuvchi_Id bo'lishi kerak, agar u foydalanuvchi / chetda bo'lish kerak bo'lsa, siz tanlangan maydonlarga murojaat qilish uchun ularning ismlarini bilishingiz kerak. Korxona saqlanib qolganda, yuqorida aytilganlardan ko'rinib turibdiki, ushbu ob'ekt ob'ektida mavjud bo'lgan barcha maydonlarni to'ldirish kerak emas, ular ma'lumotlar bazasiga o'tadi. Ya'ni, biz o'zboshimchalik bilan namunalar uchun qo'shimcha sinflarni yaratishimiz shart emas. Taxminan anonim tuzilmalar sifatida EFni tanlab olish paytida faqat bu erda barcha biznes mantiqiy usullariga ega bo'lgan tashkilotning bir xil sinfi.

Qattiq gapirish, yuqorida ko'rsatilgan ro'yxatlarni olishning usullari Ar naqsh chegarasidan oshadi. Aslida, bu zavod usullari. Ammo Okkamning keksa odami qanday qilib vasiyatsiyani keltirib chiqaramiz, biz zarur bo'lgan va alohida tashkilot menejeri yoki boshqa turdagi mohiyatni keltirib chiqarmaymiz.

Yuqorida qayd etilgan yuqoridagi PHP darslari va ularni o'zgartirish va o'zgartirish mumkin, ularning mohiyati (yoki asosiy tashkilot sinfi) xususiyatlari va biznes mantig'ining usullarini qo'shish mumkin. Ya'ni biz shunchaki ma'lumotlar bazasi qatorlarining nusxasini, ya'ni ob'ekt arxitekturasi doirasida tadbirkorlik subyektlarini olamiz.

Kim foydali bo'lishi mumkin? Albatta, biror narsadan foydalanish osonroq emas, bu esa doktrinlar oson emas, balki bir soniya davomida bir milliard ma'lumot bazasiga bir milliard murojaatni qaytarmasa, bu hal qilinmaydi. Forumlar tomonidan, ko'plab an'anaviy ishlab chiqaruvchilar, ko'p yoki keyinchalik ular ma'lumotlar bazasiga kirish uchun oddiy va qulay ob'ektni topish muammosi paydo bo'ladi. Ammo ko'pchilikning aksariyati asossiz yoki har qanday doiraning bir qismi ekanligiga duch kelgan.

P.S. Ajratish loyihasi doirasida boshqariladi

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