Эрэгтэй үргэлж гишүүдийн жагсаалт php g. Php төслийг дэмжиж байхдаа ob_start-ыг ашиглаж байна


Сайн байна уу, Хабр!

Өнөөдөр би шинэхэн вэбмастеруудыг php дээр гаралтын буферийг ашиглах янз бүрийн гоёмсог аргуудыг танилцуулахыг хүсч байна. Туршлагатай вэбмастерууд энд хэрэгтэй зүйл олж авах боломжтой. Гэсэн хэдий ч - хэн мэдэх вэ?

Та бүхний мэдэж байгаагаар php дахь гаралтын буферийг "ob_" -ээс эхэлсэн олон функцээр хянадаг. Тэдгээрээс хамгийн чухал нь ob_start юм. Үүнийг эхлүүлэх үед дараагийн гарцыг, өөрөөр хэлбэл бүх төрлийн хэвлэх (), цуурай гэх мэт зүйлийг цуглуулдаг бөгөөд үүнийг дараа нь html хуудас хэлбэрээр зочдод өгнө. Хэрэв үзүүлж эхлэхээсээ өмнө бид буферлэж эхэлсэн бол бараг бэлэн болсон энэ хуудсыг ашиглан бид эцэст нь ямар нэгэн зүйлийг бүтээж чадна.


  Жишээлбэл, бид гуравдагч этгээдийн сайтуудын бүх линкийг шүүж үзэхийг хүсч байна.

Эртний австралопитекийн сүхээр эртний болсон манай форумд олон тооны спамерууд үймээн самуун, нэг зэвсэгт дээрэмчид, улс төрийн түгшүүрээр дүүрэн газруудад зочлогчдыг татдаг байв. Та js-ийг хянах замаар ашиглаж болно, гэхдээ бид эдгээр холбоосын оронд бүгдийг нь өөрчлөхийг хүсч байна.

   "http://blackjack-hookers.com" \u003d\u003e "http://myoldforum.ru/redirect.php?url\u003dblackjack-hookers.com"

Энэ арга нь хамгийн үр дүнтэй биш байж болох ч үр дүнтэй байж магадгүй юм. Бид redirect.php-г шүүлтүүр ба хар хуудсаар бичсэн бөгөөд одоо бид олон мянган форум хуудсан дээрх бүх холбоосыг хөрвүүлэх шаардлагатай байна. Ob_start ба хэд хэдэн ердийн илэрхийллүүдийн хамт бид үүнийг хэдхэн мөрөөр хийх болно.

Функц f_callback ($ buffer) ($ buffer \u003d preg_replace ("#http: // (www.)? Myoldforum \\ .ru / #", "/", $ bufer); $ buffer \u003d preg_replace ("# href \u003d" http) : // ([^ "] *)" # "," # href \u003d "/redirect\\.php\\?url\u003d$1", $ bufer); $ bufer буцах;) ob_start (f_callback);

Одоо энэ кодыг index.php-ийн эхэнд эсвэл сервер үзэх үед ханддаг өөр файлыг холбосноор бид хэрэгтэй зүйлээ олж авна.

Энэ аргаар агуулгыг өөрчлөх замаар бид хөдөлгүүрийн аргуудын хүрээгээр хязгаарлагдахгүй. Энэ нь маш үнэ цэнэтэй байж болно. Та жишээ нь нэмэлт өргөтгөл нэмж болно:

Функц generate_plugin () (/ * ямар нэг зүйл үүсгэх * /) функц f_callback ($ buffer) (/*...*/ $ buffer \u003d str_replace ("", generate_plugin (), $ bufer); /*...*/ return $ buffer;) ob_start (" f_callback ");

Одоо бид агуулга дээр нэмсэн газар бидний авахыг хүссэн зүйл гарч ирнэ. Нэг хэрэглээ бол вэбсайтын хуудсанд js виджет оруулах явдал юм. Жишээлбэл, Yandex картууд. Ихэвчлэн энэ нь хэцүү биш боловч заримдаа сайтын хуурамч хуудас хуудасны редактор нь ишлэл, хаалтнаас зугтаж виджетийг эвддэг. Таны харж байгаагаар энэ асуудал амархан шийдэгддэг.

Гаралтын буфертэй ажиллахад зориулагдсан php хэрэгсэл нь баялаг бөгөөд зөвхөн ob_start-р хязгаарлагдахгүй. Дээрх аргууд нь зарим тохиолдолд бүхэл бүтэн хуудсан дээр ажилладаг тул шаардлагагүй нөөц, ихээхэн ачаалалтай байдаг. Бид байгальд авирахыг хүсдэггүй зүйлийг бий болгохын тулд үүнийг зөвхөн хэсэг хугацаанд загвар дээр ороосон материалаар хийснээр зөвхөн үүний нэг хэсгийг л боловсруулж чадна.

  (GENERATE BIG CRAZY THING)

Энэ бүх эргэлтийг та анзаарсан байх. "Би авирмааргүй байна", "тираннозавр шиг хуучин", "хуурамч бичигдсэн редактор" ... Хамгийн тохиромжтой ертөнцөд гаралтын буферны эргэн тойронд бүрхүүл байх шаардлагагүй. Ob_start-тай хийж болох бүх зүйлийг онолын хувьд онолгүйгээр хийж болно. Энэ арга нь заримдаа төөрөлдөх талыг төслийн код болгон нэвтрүүлдэг бөгөөд олонх нь түүний утгыг зөвхөн ob_gzhandler-д шахалт хийсний үр дүнд өгөхөөс гадна бусад тохиолдолд ашиглах нь аюултай гэж үздэг. Гэхдээ ихэнхдээ гаралтыг удирдах нь зүгээр л хангалттай биш юм.

Ялангуяа гүн гүнзгий ухахыг хүсэхгүй бол.

Миний ойлгож байгаагаар сайт нь хүрээ ашиглахгүйгээр бий болох уу? Тэгээд танил хөгжүүлэгчид, Yii-ийн хүрээг сурах хэрэгтэй гэж миний бүх чих чих дэлсэв.

2) Би зүгээр л асуух гэсэн юм .. Хичээл дээр авч үзсэн онлайн дэлгүүр бий болгох жишээ нь илүү эрдэм шинжилгээний ажил мөн үү? Бодит арилжааны төслүүд магадгүй хүрээний дагуу бүтээгдсэн байх энэ нь стандарт кодын загваруудыг ашиглах замаар хөгжлийн явцыг ихээхэн оновчтой болгодог. Энэ асуултын хариулт нь юу болж байгааг тодруулахад туслах болно ... PHP Эхлэл | Ерөнхий логикийг ойлгохын тулд дадлага хийх шаардлагатай хэвээр байна уу?

Хариулт нь:

1) Танил зүйл бол зөв, би ч бас тэгж бодож байна. Гэхдээ аливаа хүрээ нь сургалт, жишээлбэл мэдлэг шаарддаг. Би MVC системийг практик дээр суурилуулахдаа хүрээний хүрээнд ашигладаг арга барилыг дагаж мөрдөхийг хичээсэн. PHP Start (онол ба практик) нь бэлтгэл хийхэд тусалдаг тул дараа нь та yii2 (эсвэл үүнтэй төстэй зүйл) -ийг сурч эхлэх боломжтой болно.

Төслийн хадгалах газрын хаяг:

  Асуулт №1:

Алдаагаа арилгах боломжгүй байна:

Тэмдэглэл: 10-р мөрөнд /Users/Elios/Sites/Test/index.php-т "_FILE_" гэж үзсэн тодорхойгүй тогтмол хэрэглээг ашиглах.

Надад хэл дээ.

Хариулт нь:

Өмнө ба дараа нь ТҮҮХ   2 тэмдэгт бичих шаардлагатай _

__FILE__ PHP-ийн "шидэт" тогтвортой байдалд хамаарна. Дэлгэрэнгүй мэдээллийг эндээс авна уу.

Бүх гишүүдийг харах

Хэрэв зохих зөвшөөрөлтэй бол та үүнийг харах боломжтой болно Гишүүд   дээр эсвэл. Эдгээр холбоосуудын аль нэг дээр нь дарахад таныг авчрах болно Бүх гишүүдийг харах   хуудас, анхдагч хуудас Гишүүдийн жагсаалт   хэсэг. Бас а байна   форум дээр бүртгэгдсэн гишүүдийг хайх боломжтой.

Дээр Бүх гишүүдийг харах   хуудсан дээр, та форумд бүртгэгдсэн бүх гишүүдийн жагсаалтыг харах болно. Нэг хуудсанд жагсаасан олон гишүүн байхгүй тул хуудаснууд ашиглагддаг. Нэгээс олон хуудас байгаа тохиолдолд нэмэлт хуудсыг эндээс сонгож болно. "Гишүүдийн жагсаалт" гарчгийн мөрний баруун талд англи цагаан толгойн үсэг бүрийг харуулна. Эдгээр үсэг нь тухайн үсгээр эхэлсэн бүртгэлтэй гишүүдийн нэр рүү шилжихэд хэрэглэгддэг бөгөөд ингэснээр та хэд хэдэн хуудсыг гүйлгэж харах шаардлагагүй болно. Энэ нь бүх хэрэглэгчийн нэрийг өөр үсгээр эхэлсэн бүх шүүлтүүрээр шүүж авдаггүй, харин зангуугаар үйлчилдэг тул сонгосон үсгээр эхэлсэн хэрэглэгчийн нэр рүү чиглүүлэх болно.

Гишүүдийн жагсаалтад байгаа бүх хэрэглэгчийн нэрийг дараах байдалтайгаар захиалах боломжтой: Статус (Онлайн / Офлайн), Хэрэглэгчийн нэр, Имэйл, Вэбсайт, ICQ, AIM, YIM, MSN, Байрлал, Бүртгэгдсэн огноо, Бичлэгүүд. Эдгээр баганын гарчгууд нь жагсаалтыг дээшлэх буюу буурах дарааллаар эрэмбэлэх, эсвэл одоо байгаа жагсаалтыг эрэмбэлэхэд ашигладаг баганын эрэмбийг өөрчлөх боломжтой холбоосууд юм.

Гишүүдийг хайх

Энэ хэсэг нь гишүүдийн хувьд энгийн хайлт хийх, эсвэл нэмэлт параметрүүдийг ашиглан үр дүнг шүүж сонгох боломжийг олгоно. Та гишүүдийг хэрэглэгчийн нэр, имэйл хаяг, мессенжерийн хоч, вэбсайт эсвэл байрлалаас нь хамааран хайж болно.

Хайлтын үр дүн нь таны хайлтын талбарт оруулсан нөхцлүүдийг тохируулна. Хэрэв нэмэлт хайлтын параметрүүдийн аль нэгийг сонговол үр дүнг мөн шүүлтүүрт оруулна. Хайлт нь зөвхөн бүтэн үгсийг яг тааруулахаас гадна текстийн хайлтын үгтэй таарч байгаа хэсгийг хайх болно. Энэ шалтгааны улмаас, хайлтын үг нь таны хайж буй үгийн зөвхөн хэсгийг илэрхийлж байгаа бол үр дүн нь таны бодож байснаас илүү олон таарч магадгүй юм.

Нэмэлт хайлтын зарим параметрүүд нь хэрэглэгчид өөрсдийн профайлд (мессенжер хоч, вэбсайт) оруулахгүй байхаар сонгогдсон эсвэл олон нийтэд (имэйлийн) оруулахгүй байж болзошгүй тул эдгээр параметрүүдийг ашиглах нь үргэлж үр дүнд хүргэдэггүй. таны хайж буй үр дүнгүүд. Хайлтын үр дүн нь хайлтанд хэрэглэгддэг үсэг, үгсийн тоо илүү нарийвчлалтай байх болно.