КомпьютеруудПрограм хангамж

PHP нь функц дэх дэлхийн хувьсагч юм. PHP-д global хувьсагч хийх

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

Хамрах хүрээ

Энэ бол хувьсагчийг тодорхойлсон контекстын нэр юм. Ихэнх тохиолдолд тэд зөвхөн нэг хамрах хүрээтэй байдаг. PHP файлын хувьсагчууд бусад файлуудаас дуудагдсан үед тэдгээрийг оруулах (оруулах) болон шаардагдах (шаардагдах) байж болно.

Анхдагчаар, тэдгээр нь функцын орон нутгийн хамрах хүрээгээр хязгаарлагддаг. Хувьсагчийг хилийн гадна байгаа файлуудаас нь харахыг хүсч байна уу, тэд бас ашиглаж болох уу? Үүнийг хийхийн тулд PHP нь дэлхий нийтийн хувьсагчийг агуулдаг.

"Дэлхийн" гэсэн түлхүүр үгс

Гэхдээ дэлхий нийтийн PHP хувьсагч зарлах уу? Энэ зорилгод хүрэхийн тулд "дэлхий нийтийн" гэдэг үг бидэнд тусалдаг. Дэлхийг бүтээхийг хүсч буй хувьсагчийн өмнө үүнийг байрлуулах хэрэгтэй (жишээ нь "Глобал" Хувьсах ").

Ийм зааврыг хэрэгжүүлсний дараа ямар ч файл өгөгдөлтэй ажиллах боломжтой. Хэрвээ хаа нэг газар энэ хувьсагчийн талаар лавлах юм бол хөтөлбөр нь дэлхийн хувилбарт анхаарлаа хандуулах болно.

Яагаад ийм хачин томъёолол гэж? Үнэнийг хэлэхэд энэ нь нэгэн зэрэг орон нутгийн хувилбар байж болох юм. Гэхдээ тэдгээр нь зөвхөн мэдэгдэж байгаа файлд л ашиглах боломжтой болно. Мөн өөр бусад хүмүүст PHP классын олон улсын хувьсагч ажиллах болно. Тиймээс та анхааралтай байх хэрэгтэй. Ямар ч эргэлзээгүйгээр, тэд хэрхэн харагдах жишээ энд байна: global a.

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

Бичлэг хийх өөр нэг арга байна

PHP-д дэлхий нийтийн хувьсагч үүсгэх боломжтой юу? Тийм ээ, тэр ч байтугай нэг ч байхгүй. Эхлээд $ GLOBALS-ийг үзье. Энэ нь ассоциатив массив юм. Гол түлхүүр нь нэр юм. Энэ утга нь дэлхийн хувьсагчийн агуулга юм. Ямар ч хамрах хүрээнд мэдэгдэл өгсний дараа энэ масс нь тэмдэглэгдсэн байх ёстой. Энэ нь хамгийн өргөнөөр тооцогдох үндэслэл болж өгдөг. Энэ нь иймэрхүү харагдах болно: $ GLOBALS ['Хувьсах'].

Урьдчилан тодорхойлсон / superglobals

Програмчлалын хэл бүрийн хувьд, тус тусын функцүүдэд зориулж захиалга өгдөг. Тиймээс, PHP дэх ижил төстэй нэрээр PHP хувьсагч үүсгэх боломжгүй.

Энэ програмчлалын хэл дээр тусгай онцлогууд байдаг. Тиймээс урьдчилан тодорхойлогдсон хувьсагчид энд "супер" тохиргоо байдаггүй, энэ нь бүх газарт боломжгүй байдаг. Үүнийг яаж засах вэ? Зарим орон нутгийн урьдчилан тодорхойлсон хувьсагчийг ашиглахын тулд үүнийг дараах байдлаар зарлах ёстой: global "Variable". Өмнө нь хэлсэнтэй адилхан байна уу? Үнэн, гэхдээ үнэн биш. "Тулалдаан" жишээг харъя:

  • Глобал $ HTTP_POST_VARS;
  • $ HTTP_POST_VARS ['нэр'] цуурайтах.

Тэдний хоорондох ялгааг мэдэрч байна уу? PHP дээр функц дотор глобал хувьсагчийг ашиглах шаардлагагүй гэдгийг анхаарна уу. Энэ нь түүнд багтсан файлд байрлаж болно.

Холбоос ба аюулгүй байдал

PHP-ийн хувьд, дэлхий нийтийн хувьсагч үүсгэх нь асуудал биш юм. Гэхдээ холбоосын талаар ямар нэг онцлог шинж байна уу? Тиймээ, дэлхий даяар хэрэглэхэд гэнэтийн зан үйл байж болох юм. Гэхдээ энэ нь бага зэрэг суурь болсон.

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

Тиймээс хэрэв register_globals ажиллаж байгаа бол бичсэн кодыг ажиллуулахаасаа өмнө янз бүрийн хувьсагчууд нь шаардлагатай бол HTML хэлбэрүүдийг илгээхийг шаарддаг. Тиймээс үүнийг эргүүлэхээр шийдсэн.

Энэ удирдамжийн төлөв нь яагаад php-д олон улсын хувьсагчаас шалтгаалах вэ? Үнэнийг хэлэхэд төр байгаа үед хөгжүүлэгчид хаанаас ирсэн асуултад бие даан хариулт өгөх боломжгүй байдаг. Нэг талаас нь код бичихэд хялбар болгосон. Гэхдээ нөгөө талаас энэ нь аюулгүй байдлын аюул заналыг үүсгэсэн. Тиймээс алдаа гарахаас зайлсхийх, түүнчлэн мэдээллийг холих, удирдамжийг хаасан.

Одоо хамгаалалтгүй кодыг авч үзье. PHP-ийн хувьсагчийн мэдэгдэл өгөгдлийг төөрөгдөлд оруулах оролдлого хийгддэг. Зөвхөн үзэсгэлэнтэй төдийгүй, түүнчлэн гагцхүү эхний хүнийг гатлахгүй тогтвортой ажлын байрыг бий болгоход шаардлагатай.

Аюултай код

Зөвшөөрөгдсөн хүмүүст хувьсагч нь үнэн болохыг баталъя.

Хэрэв (authenticate_user ()) {
$ Authorize = үнэн;
}

Хэрэв ($ эрхээр) {
"/highly/sensitive/data.php" оруулах;
}

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

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

Кодын хүчтэй хувилбар

Энэ зорилгод хүрэхийн тулд та удирдамжийн үйл ажиллагааг зогсоох эсвэл илүү төвөгтэй кодыг бүртгэх боломжтой. Жишээ нь:

Хэрэв (зангилаа ($ _ SESSION ['username']))) {

"Сайн уу {$ _ SESSION ['username']} ";

} Бусад {

"Hello Guest
" Цуурхал ";
"Сайн уу, хэрэглэгчид!"

}

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

Орлуулах оролдлогыг олно

Та өмнө нь бичсэн зүйлээ хэрхэн ойлгосоноо шалгаарай. Функцэд байгаа PHP хувьсагчдад доор өгөгдсөн функцийг ашиглан өөрийгөө тунхаглах хэрэгтэй болно. Энэ нь зарим талаараа хичээлийн сэдэвтэй танилцах даалгавар юм. Энд код байна:

Хэрэв ((($ _ COOKIE ['C_COOKIE'])
} Elseif (зангилаа ($ _ GET ['C_COOKIE']) || isset ($ _ POST ['C_COOKIE'])) {

Захидал ("administrarot@example.com", "Анхааруулга, скрипт нь өгөгдлийг хакердах, хуурах оролдлогыг бүртгэсэн, $ _SERVER ['REMOTE_ADDR']);
Цуурай "Аюулгүй байдал эвдэгдэж, эсвэл хийхийг оролдсон." Администратор мэдэгдэл ";
Гарц;

} Бусад {
}
?>

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

Дүгнэлт

Ерєнхийдєє, дэлхий нийтийн хувьсагчийн талаар мэдэж авахад шаардлагатай бїх зїйлс, тэдгээрийг амжилтанд хїргэхийн тулд їйл ажиллагаандаа амжилттай, найдвартай ашигладаг. Мэдээжийн хэрэг, хэн ч үүнийг ашиглаж чаддаггүй бүрэн баталгаа байдаг гэж хэлэхэд хагарал нь өөрсдийнхөө арга, чадварыг байнга сайжруулдаг. Тиймээс код дээрх бүхэл хувьсагчдыг дээд хэмжээгээр ашиглахыг хязгаарлах нь зүйтэй юм. Аз болоход энэ програмчлалын хэлийг бүтээх бүтэц, онцлог нь энэ зорилгод хүрэх боломжтой. Амжилт хүсье!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 mn.delachieve.com. Theme powered by WordPress.