Amurny хэрэглэгчдийн бүртгэл php. PHP болон MySQL дээр гайхалтай энгийн бүртгэлийн системийг бий болгох

Ихэнх вэбсайтууд таны хэрэглэгчдэд бүртгүүлэх бүртгэлийн маягттай байдаг тул сайт доторх ямар нэгэн давуу эрх эдлэх боломжтой. Энэ нийтлэлд бид PHP болон MySQL дээр бүртгэлийн маягтыг хэрхэн үүсгэх талаар үзэх болно.

Бид энгийн хаягуудыг ашиглахаас гадна Sign-Up.html вэб хуудсыг зохиохдоо хүснэгтийн тагийг ашиглах болно. Эхлэе:

Жагсаалт 1: sign-up.html

Бүртгүүлэх

Бүртгэлийн маягт
Нэр
Имэйл
Хэрэглэгчийн нэр
Нууц үг
Нууц үгээ баталгаажуулна уу



Зураг 1:

sing-in.html вэб хуудасны тайлбар:

Зураг 1-ээс харахад Бүртгэлийн маягт байгаа бөгөөд энэ нь хэрэглэгчийн талаар цөөн тооны мэдээлэл асууж байна. Эдгээр нь аливаа вэб сайтаас өөрийн хэрэглэгчид эсвэл зочдоос ID болон нууц үг үүсгэхийг хүсдэг нийтлэг өгөгдөл юм. Веб хуудсан дээрх маягтын талбаруудыг Зураг 1-ээс харж байгаагаар цэгцлэх хэлбэрээр харуулахын тулд бид хүснэгтийн тагийг ашигласан. Энэ нь маш энгийн харагдаж байна, учир нь бид үүн дээр CSS хэв маягийг хараахан ашиглаагүй байгаа тул одоо CSS хэв маягийг ашиглаж, холбоосыг холбоно уу. sing-up.html вэб хуудастай CSS загварын файл.

Жагсаалт 2: style.css

/*Бүртгүүлэх вэб хуудасны CSS файл*/ #body-color( background-color:#6699CC; ) #Sign-Up( background-image:url("sign-up.png"); background-size:500px 500px back-repeat: no-repeat; background-position:center; margin-left: 450px; font-weight:bold font-size:20px;

Жагсаалт 3: style.css-г sign-up.html вэб хуудастай холбоно уу



Зураг 2:

style.css файлын тайлбар:

Гадаад CSS файлд бид танд шинэ мэт харагдах зарим хэв маягийг ашигласан. Бид зургийг арын дэвсгэр дээр ашиглаж, вэб хуудасны голд байрлуулсан. Энэ нь html div тагийн тусламжтайгаар ашиглахад хялбар болсон. Бид гурван div таг id ашигласан. #button, #sing-up, #body-color зэрэгт бид бүх CSS хэв маягийг ашигласан ба одоо та Зураг 2-оос хичнээн үзэсгэлэнтэй, сэтгэл татам харагдаж байгааг харж болно. Та 2D болон 3D CSS загвар гэх мэт өөр олон CSS хэв маягийг ашиглаж болно. Одоо харагдаж байгаагаас ч илүү үзэсгэлэнтэй харагдах болно.

Эдгээр бүх энгийн ажлуудын дараа бид одоо шинэ хэрэглэгчдийн мэдээллийн санд бүх өгөгдлийг хадгалах мэдээллийн сан, хүснэгт үүсгэх гэж байна. Хүснэгт үүсгэхээсээ өмнө бид хэрэглэгчээс юу шаарддагийг мэдэх ёстой. Бид маягтыг зохиохдоо бүртгэлийн маягтын дагуу хүснэгтийг үүсгэх бөгөөд та үүнийг Зураг 1, 2-оос харж болно.

Жагсаалт 3: MySQL дээрх хүснэгтийн асуулга

ХҮСНЭГТ ҮҮСГЭХ ВэбсайтХэрэглэгчид (хэрэглэгчийн ID int(9) NULL БИШ auto_increment, овог нэр VARCHAR(50) NULL БУС, хэрэглэгчийн нэр VARCHAR(40) NULL БУС, VARCHAR(40) цахим шуудангийн NULL, VARCHAR(40) NULL БИШ, АНХДАГЧ ТҮЛХҮҮР(user) );

3-р жагсаалтын тайлбар:

Таны мэдэх ёстой нэг зүйл бол хэрэв танд энэ асуулга ашиглах MySQL хэрэгсэл байхгүй бол миний өмнөх нийтлэлийг дагах хэрэгтэй. Энэ холбоосоос та суулгац, шаардлагыг ойлгох боломжтой болно. Мөн бид үүнийг хэрхэн ашиглах вэ.

Жагсаалтын 3 асуулгад бид бүртгэлийн маягтанд шаардлагатай бүх зүйлийг ашигласан. Имэйл, бүтэн нэр, нууц үг, хэрэглэгчийн нэр хувьсагч байдаг. Эдгээр хувьсагч нь хэрэглэгчийн өгөгдлийг хадгалах бөгөөд түүнийг дуудахдаа 2-р зураг дээрх бүртгэлийн маягтанд оруулах болно.

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

Жагсаалт 4: Өгөгдлийн сангийн холболт

4-р жагсаалтын тайлбар:

Бид мэдээллийн сан болон вэб хуудасны хооронд холболт үүсгэсэн. Гэхдээ хэрэв та энэ нь ажиллаж байгаа эсэхийг мэдэхгүй байгаа бол хамгийн сүүлийн 5-р жагсаалтад нэг зүйлийг нэмж ашиглана уу.

Жагсаалт 5: мэдээллийн баазын холболтын холболтыг шалгаж байна

Тодорхойлолтын жагсаалт 5:

Жагсаалт 5 дээр би өгөгдлийн сан болон PHP хоорондын холболтыг шалгаж, баталгаажуулах боломжтой гэдгийг харуулахыг оролдсон. Бас нэг зүйл бол бид 5-р жагсаалтын кодыг дуудах вэб хуудсандаа ашиглахгүй. Учир нь энэ нь танд MySQL холболтыг хэрхэн шалгахыг ойлгуулах зорилготой юм.

Одоо бид PHP програмчлалын програм бичиж, хэрэглэгчийн бэлэн эсэхийг шалгаад дараа нь тухайн хэрэглэгч шинэ хэрэглэгч бол вэб хуудсанд хадгалагдана.

Жагсаалт 6: connectivity-sign-up.php

connectivity-sign-up.php-ийн тайлбар

Энэхүү PHP програм дээр би вэб хуудсанд бүртгүүлэх програм үүсгэх хамгийн энгийн аргыг ашигласан. Таны харж байгаагаар бид эхлээд жагсаалт 4 шиг холболт үүсгэсэн. Дараа нь бид хоёр функцийг ашигласан эхний функц нь SignUP() бөгөөд энэ нь програмын сүүлийн үеийн if хэллэгээр дуудагддаг бөгөөд энэ нь эхлээд бүртгүүлэх товчийг дарж байгааг баталгаажуулдаг. товч. Хэрэв энэ нь дарагдсан бол SingUp функцийг дуудах бөгөөд энэ функц нь өгөгдлийг татаж авахын тулд SELECT-ийн хайлтыг ашиглан тэдгээрийг хэрэглэгчийн нэр болон одоогийн хэрэглэгчийн оруулсан имэйлтэй харьцуулна. Хэрэв хэрэглэгчийн нэр болон имэйл нь мэдээллийн санд байгаа бол уучлаарай, таныг аль хэдийн бүртгүүлсэн гэж хэлэх болно

Хэрэв хэрэглэгч шинэ бол түүний одоогийн хэрэглэгчийн нэр болон имэйл ID нь мэдээллийн санд байхгүй тул If мэдэгдэл нь NewUser()-г дуудаж, шинэ хэрэглэгчийн бүх мэдээллийг хадгалах болно. Мөн хэрэглэгч вэб хуудасны нэг хэсэг болно.



Зураг 3

3-р зурагт хэрэв хэрэглэгч энэ вэб хуудасны хуучин хэрэглэгч бол өгөгдлийн сангийн бүртгэлүүдийн дагуу бүртгүүлэхийн тулд өгөгдөл оруулж байна. Тиймээс вэб хуудас нь хэрэглэгч шинэ бол хэрэглэгч аль хэдийн бүртгүүлсэн гэсэн мессежийг харуулах тул вэб хуудас нь хэрэглэгчийн бүртгэл дууссан гэсэн мессежийг харуулах болно.



Зураг 4:

Бүртгэлийн маягтанд өгөгдөл оруулахад (Зураг 4) бүртгэлийн маягтанд оруулсан хэрэглэгчийн нэр, цахим шуудангийн мэдээллийн санд аль хэдийн орсон байна. Тиймээс бид шинэ ID болон нууц үгээр бүртгүүлэхийн тулд шинэ хэрэглэгчийн нэр, имэйл хаягийг туршиж үзэх хэрэгтэй.



Зураг 5

Зураг 5-д хэрэглэгчийн нэр болон цахим шуудангийн дугаарыг оруулсан хэрэглэгчийг баталгаажуулж байна. Мэдээллийн сангийн бүртгэлд хоёулаа байхгүй. Тиймээс одоо шинэ ID болон нууц үг бий болсон бөгөөд хэрэглэгч дараагийн удаа нэвтрэхийн тулд шинэ ID болон нууц үгээ ашиглах боломжтой болно.

Дүгнэлт:

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

Энэхүү зааварт би танд хэрэглэгчийн нэр, цахим шуудан, нууц үг, нэвтрэх болон PHP болон MySQL ашиглан бүртгэл үүсгэх боломжтой хэрэглэгчийн бүртгэлийн системийг бий болгох бүрэн үйл явцыг танд танилцуулж байна. Би бас зарим хуудсуудыг зөвхөн нэвтэрсэн хэрэглэгчдэд хэрхэн ашиглах боломжтойг харуулах болно. Нэвтрээгүй бусад хэрэглэгч хуудас руу нэвтрэх боломжгүй болно.

Хэрэв та видео үзэхийг хүсвэл миний YouTube сувгаас үзэх боломжтой

Бидний хийх ёстой хамгийн эхний зүйл бол мэдээллийн санг тохируулах явдал юм.

нэртэй мэдээллийн сан үүсгэ бүртгэл. -д бүртгэлмэдээллийн сан, нэртэй хүснэгтийг нэмнэ үү хэрэглэгчид. Хэрэглэгчдийн хүснэгт нь дараах дөрвөн талбарыг авна.

  • хэрэглэгчийн нэр - varchar(100)
  • имэйл - varchar(100)
  • нууц үг - varchar (100)

Та үүнийг PHPMyAdmin гэх мэт MySQL клиент ашиглан үүсгэж болно.

Эсвэл та дараах SQL скриптийг ашиглан үүнийг MySQL сануулга дээр үүсгэж болно.

CREATE TABLE `хэрэглэгчид` (`id` int(11) NULL БУС AUTO_INCREMENT АНХДАГЧ ТҮЛХҮҮР, `хэрэглэгчийн нэр` varchar(100) NULL БУС, `email` varchar(100) NULL БИШ, `нууц үг` varchar(100) ENGINE ENGINE) =InnoDB өгөгдмөл CHARSET=латин1;

Энэ бол мэдээллийн сантай холбоотой.

Одоо нэртэй хавтас үүсгэнэ үү бүртгэлманай серверт хандах боломжтой лавлахад. htdocs дотор (хэрэв та XAMPP сервер ашиглаж байгаа бол) эсвэл дотор нь хавтас үүсгэнэ үү www(хэрэв та wampp сервер ашиглаж байгаа бол).

Хавтас дотор бүртгэл,дараах файлуудыг үүсгэнэ үү:

Эдгээр файлуудыг өөрийн сонгосон текст засварлагчаар нээнэ үү. Минийх бол гайхалтай текст 3.

Хэрэглэгчийг бүртгэж байна

register.php файлыг нээж дараах кодыг оруулна уу.

register.php:

Бүртгүүлэх

Аль хэдийн гишүүн болсон уу? Нэвтрэх



Одоогоор ямар ч төвөгтэй зүйл байхгүй биз дээ?

Энд анхаарах хэдэн зүйл:

Нэгдүгээрт, энэ бол бидний хэлбэр юм үйлдэлатрибутыг register.php гэж тохируулсан. Энэ нь маягт илгээх товчийг дарахад маягтын бүх өгөгдөл нэг хуудсанд (register.php) илгээгдэнэ гэсэн үг юм. Энэ маягтын өгөгдлийг хүлээн авах кодын хэсэг нь server.php файлд бичигдсэн байдаг тул бид үүнийг register.php файлын хамгийн дээд хэсэгт оруулсан болно.

Мөн бид маягтын алдааг харуулахын тулд errors.php файлыг оруулж байгааг анхаарна уу. Бид удахгүй үүнд хүрэх болно.

Толгой хэсгээс харж байгаагаар бид style.css файлтай холбогдож байна. style.css файлыг нээгээд дараах CSS-ийг дотор нь оруулна уу:

* ( зах: 0px; дэвсгэр: 0px; ) их бие (фонтын хэмжээ: 120%; дэвсгэр: #F8F8FF; ) .толгой (өргөн: 30%; захын зай: 50px автомат 0px; өнгө: цагаан; дэвсгэр: #5F9EA0; текст -align: center; border: 1px solid #B0C4DE; border-radius: 10px 10px 0px 0px, .content (өргөн: 30%; зах: 0px auto; padding: 20px ; border: 1px хатуу #B0C4DE; : 0px 0px 10px .input-group ( margin: 10px 0px 10px 0px; ); ) .input-group оролт ( өндөр: 30px; өргөн: 93%; padding: 5px-10px; хилийн радиус: 5px; хүрээ: 1px хатуу саарал ) .btn ( padding: 10px; font-size: #5F9EA0; хүрээ: хүрээ-радиус: 5px; өргөн: 0px; хүрээ: 1px хатуу # a94442 хүрээ: радиус: 5px;

дэвсгэр: #dff0d8;

хил: 1px хатуу #3c763d;

захын доод тал: 20px; )

Одоо маягт нь үзэсгэлэнтэй харагдаж байна.

Одоо маягтаас ирүүлсэн мэдээллийг хүлээн авах кодыг бичээд мэдээллийн санд хадгалъя (бүртгүүлье) Өмнө нь амласанчлан бид үүнийг server.php файлд хийнэ.

server.php-г нээж, энэ кодыг оруулна уу:

server.php

Сессүүд нь нэвтэрсэн хэрэглэгчдийг хянахад ашиглагддаг тул бид файлын дээд хэсэгт session_start()-г оруулсан.

Код дээрх тайлбарууд нь бүх зүйлийг маш их тайлбарладаг, гэхдээ би энд хэд хэдэн зүйлийг онцлон тэмдэглэх болно. хэрэглэгчид if мэдэгдэл нь бүртгэлийн маягт дээрх reg_user товчийг дарсан эсэхийг тодорхойлдог. Манай маягт дээр илгээх товч нь reg_user гэж тохируулсан нэрийн шинж чанартай байдаг бөгөөд үүнийг if мэдэгдэлд дурдаж байгааг санаарай.

Бүх өгөгдлийг маягтаас хүлээн авч, хэрэглэгч маягтыг зөв бөглөсөн эсэхийг шалгана. Нууц үгнүүд нь таарч байгаа эсэхийг мөн харьцуулдаг.

0) : ?>

Хэрэв ямар нэгэн алдаа гараагүй бол хэрэглэгч бүртгэлд орно

Энэ бол бүртгүүлэх явдал юм. Хэрэглэгчийн нэвтрэлтийг харцгаая.

Нэвтрэх хэрэглэгч

Хэрэглэгч нэвтрэх нь бүр ч хялбар зүйл юм. Нэвтрэх хуудсыг нээгээд дотор нь энэ кодыг оруулна уу:

Бүртгэлийн систем PHP болон MySQL

Нэвтрэх

Гишүүн болоогүй байна уу? Бүртгүүлэх



Энэ хуудсан дээрх бүх зүйл register.php хуудастай нэлээд төстэй.

Одоо хэрэглэгчийг нэвтэрсэн кодыг ижил server.php файлд бичих ёстой. Тиймээс server.php файлыг нээж, файлын төгсгөлд энэ кодыг нэмнэ үү:

// ... // ХЭРЭГЛЭГЧИЙН НЭВТРҮҮЛЭХ if (isset($_POST["login_user"])) ( $username = mysqli_real_escape_string($db, $_POST["username"]); $password = mysqli_real_escape_string($db, $_POST) ["нууц үг"]); if (empty($username)) (array_push($алдаа, "Хэрэглэгчийн нэр шаардлагатай"); ) if (empty($password)) (array_push($errors, "Нууц үг шаардлагатай"); ) if (count($errors) == 0) ( $password = md5($password); $query = "СОНГОХ * ХААНА хэрэглэгчийн нэр="$хэрэглэгчийн нэр" ба нууц үг="$нууц үг""; $үр дүн = mysqli_query ($db, $query); if (mysqli_num_rows($results) == 1) ( $_SESSION["username"] = $username; $_SESSION["амжилт"] = "Та одоо нэвтэрсэн байна"; толгой(" байршил: index.php"); )else (array_push($алдаа, "Хэрэглэгчийн нэр/нууц үг буруу"); ) ) ) ?>

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

Одоо index.php файлд юу болдгийг харцгаая, үүнийг нээж дараах кодыг оруулна уу.

Гэр

Нүүр хуудас

Тавтай морил

гарах



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

Хоёр дахь if мэдэгдэл нь хэрэглэгч гарах товчийг дарсан эсэхийг шалгадаг. Хэрэв тийм бол систем нь тэдгээрийг бүртгэлээс гаргаж, нэвтрэх хуудас руу дахин чиглүүлнэ.

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

Та олон нийтийн мэдээллийн хэрэгслээр хуваалцах эсвэл миний блогийг найз нөхөд, хамтран ажиллагсаддаа санал болгох замаар үргэлж дэмжиж болно.

Өнөөдөр бид 10-р сарын сүүлээр интернетэд дэлбэрсэн алдартай CMS Joomla-ийн 1 өдрийн чухал эмзэг байдлын ашиглалтын талаар авч үзэх болно. Бид тоогоор эмзэг байдлын талаар ярих болно CVE-2016-8869, CVE-2016-8870Тэгээд CVE-2016-9081. Энэ гурвуулаа нэг кодоос үүсэлтэй бөгөөд урт таван жилийн турш хүрээний гүнд гацсан, жигүүрт нь хүлээгдэж, дараа нь салж, эмх замбараагүй байдал, хакердсан сайтууд, энэ Joomla-ийн гэм зэмгүй хэрэглэгчдийн нулимсыг авчрах болно. Мониторын гэрлээс нүд нь улайж, гар нь талхны үйрмэгээр дүүрсэн хамгийн зоригтой, зоригтой хөгжүүлэгчид л уурлаж буй муу ёрын сүнснүүдийг эсэргүүцэж, засварын тахилын ширээн дээр толгойгоо тавьж чадсан.

АНХААРУУЛГА

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

Энэ бүхэн хаанаас эхэлсэн

2016 оны 10-р сарын 6-нд Демис Палма Stack Exchange дээр сэдвийг үүсгэн асуув: Чухамдаа Joomla 3.6 хувилбар дээр яагаад ижил нэртэй бүртгэлтэй хэрэглэгчдийг бүртгүүлэх хоёр арга байдаг вэ? Эхнийх нь UsersControllerRegistration хянагч, хоёр дахь нь UsersControllerUser хянагч дотор байна. Дамис UsersControllerUser::register() аргыг хаа нэгтээ ашигласан уу, эсвэл хуучин логикоос үлдсэн хувьслын анахронизм уу гэдгийг мэдэхийг хүссэн. Түүний санаа зовоосон зүйл бол энэ аргыг ямар ч үзэл бодолд ашигладаггүй байсан ч үүнийг боловсруулсан асуулгаар дуудаж болно. Үүнд би itoctopus хочтой хөгжүүлэгчээс хариулт авсан бөгөөд тэрээр "Асуудал үнэхээр байна" гэж батлав. Мөн Joomla хөгжүүлэгчдэд тайлан илгээсэн.

Дараа нь үйл явдал хамгийн хурдацтай хөгжиж байв. 10-р сарын 18-нд Joomla-ийн хөгжүүлэгчид тухайн үед хэрэглэгчийн бүртгэлийг зөвшөөрөх PoC-ийн төслийг боловсруулсан Дамисийн тайланг хүлээн авав. Тэрээр өөрийн цахим хуудаснаа тэмдэглэл нийтэлж, олсон асуудлынхаа талаар болон энэ талаарх бодлоо ерөнхийд нь илэрхийлсэн байна. Мөн өдөр Joomla 3.6.3-ийн шинэ хувилбар гарсан бөгөөд энэ нь эмзэг кодыг агуулсан хэвээр байна.

Үүний дараа Давиде Тампеллини алдааг энгийн хэрэглэгч биш, харин администраторыг бүртгэх хүртэл эргүүлэв. Мөн 10-р сарын 21-нд Joomla хамгаалалтын багт шинэ хэрэг ирсэн. Эрх ямба нэмэгдүүлэх талаар аль хэдийн ярьж байна. Мөн өдөр Joomla вэбсайт дээр 10-р сарын 25-ны Мягмар гарагт системийн цөм дэх чухал сул талыг зассан 3.6.3 серийн дугаартай дараагийн хувилбар гарах болно гэсэн зарлал гарчээ.

10-р сарын 25 Joomla Security Strike Team нь Дамисын олж илрүүлсэн кодын хамгийн сүүлийн үеийн асуудлыг оллоо. Дараа нь 10-р сарын 21-ний өдрийн "Prepare 3.6.4 Stable Release" гэсэн үл ойлгогдох нэртэй амлалтыг албан ёсны Joomla репозиторын үндсэн салбар руу оруулж, харамсалтай алдааг зассан.

Үүнийг гарсны дараа олон сонирхолтой хүмүүс хөгжүүлэгчдийн нийгэмлэгт нэгддэг - тэд эмзэг байдлыг сурталчилж, мөлжлөгийг бэлтгэж эхэлдэг.

10-р сарын 27-нд судлаач Харри Робертс эмзэг CMS-тэй серверт PHP файл байршуулах боломжтой бэлэн мөлжлөгийг Xiphos Research репозиторт байршуулав.

Дэлгэрэнгүй мэдээлэл

За, цаана нь дууссан, хамгийн сонирхолтой хэсэг болох эмзэг байдлын дүн шинжилгээ рүү шилжье. Би Joomla 3.6.3-ыг туршилтын хувилбар болгон суулгасан тул бүх мөрийн дугаарууд энэ хувилбарт хамааралтай байх болно. Таны доор харах файлуудын бүх замыг суулгасан CMS-ийн үндэстэй харьцуулахад зааж өгөх болно.

Дамис Палмагийн нээлтийн ачаар системд хэрэглэгчийн бүртгэлийг гүйцэтгэдэг хоёр арга байдаг гэдгийг бид мэднэ. Эхнийх нь CMS-д ашиглагддаг бөгөөд /components/com_users/controllers/registration.php:108 файлд байрладаг. Хоёр дахь нь (бидний залгах шаардлагатай) /components/com_users/controllers/user.php:293-д амьдардаг. Үүнийг илүү нарийвчлан авч үзье.

286: /** 287: * Хэрэглэгчийг бүртгэх арга. 288: * 289: * @return boolean 290: * 291: * @1.6-с хойш 292: */ 293: нийтийн функцийн бүртгэл() 294: ( 295: JSession::checkToken("post") эсвэл jexit(JText::_) ("JINVALID_TOKEN")); ... 300: // 301 маягтын өгөгдлийг авах: $this->input->post->get("user", array(), "array"); 315: $return = $model->validate($form, $data 316: 317: // Алдаа байгаа эсэхийг шалгана уу ($return === false) 319: ( ... 345: / /). Бүртгэлийг дуусгах 346: $return = $model->register($data);

Энд би зөвхөн сонирхолтой мөрүүдийг үлдээсэн. Эмзэг аргын бүрэн хувилбарыг Joomla репозитороос үзэх боломжтой.

Хэрэглэгчийн ердийн бүртгэлийн үед юу тохиолдохыг олж мэдье: ямар өгөгдөл илгээгдэж, хэрхэн боловсруулагддаг. Хэрэв хэрэглэгчийн бүртгэлийг тохиргоонд идэвхжүүлсэн бол маягтыг http://joomla.local/index.php/component/users/?view=registration хаягаас олж болно.


Хэрэглэгчийн хууль ёсны бүртгэлийн хүсэлт дараах дэлгэцийн зураг шиг харагдаж байна.


com_users бүрэлдэхүүн хэсэг нь хэрэглэгчидтэй ажиллах үүрэгтэй. Хүсэлт дэх ажлын параметрийг анхаарч үзээрэй. Энэ нь $controller.$method форматтай. Файлын бүтцийг харцгаая.

Хавтас дахь скриптүүдийн нэрс хянагчууддуудагдсан контроллеруудын нэртэй тохирч байна. Бидний хүсэлт одоо $controller = "registration" агуулж байгаа тул файлыг дуудах болно бүртгэл.phpба түүний register() арга.

Анхаар, асуулт: бүртгэлийн боловсруулалтыг кодын эмзэг газар руу хэрхэн шилжүүлэх вэ? Та үүнийг аль хэдийн таамагласан байх. Эмзэг ба бодит аргуудын нэр ижил (бүртгэл) тул дуудагдсан контроллерын нэрийг өөрчлөхөд л хангалттай. Манай эмзэг хянагч хаана байрладаг вэ? Энэ нь зөв, файлд байна user.php. Энэ нь $controller = "хэрэглэгч" болж байна. Бүгдийг нэгтгэснээр бид task = user.register авна. Одоо бүртгэлийн хүсэлтийг бидэнд хэрэгтэй аргаар боловсруулж байна.


Бидний хийх ёстой хоёр дахь зүйл бол өгөгдлийг зөв форматаар илгээх явдал юм. Энд бүх зүйл энгийн. Legitimate register() нь биднээс jform нэртэй массивыг хүлээж байгаа бөгөөд үүнд бид бүртгэлийн өгөгдөл - нэр, нэвтрэх, нууц үг, имэйл (хүсэлтийн хамт дэлгэцийн зургийг харна уу).

  • /components/com_users/controllers/registration.php: 124: // Хэрэглэгчийн өгөгдлийг авах.

125: $requestData = $this->input->post->get("jform", array(), "array");

  • Манай үйлчлүүлэгч энэ өгөгдлийг user хэмээх массиваас авдаг.

/components/com_users/controllers/user.php: 301: // Маягтын өгөгдлийг авах.

302: $өгөгдөл = $this->input->post->get("хэрэглэгч", массив(), "массив");

  • Тиймээс бид хүсэлтийн бүх параметрийн нэрийг j-ээс user болгон өөрчилдөг.

Бидний гурав дахь алхам бол хүчинтэй CSRF жетон олох явдал юм, учир нь үүнгүйгээр бүртгэл хийх боломжгүй.


/components/com_users/controllers/user.php: 296: JSession::checkToken("post") эсвэл jexit(JText::_("JINVALID_TOKEN")); CVE-2016-8870Энэ нь MD5 хэш шиг харагдаж байгаа бөгөөд та үүнийг жишээ нь /index.php/component/users/?view=login сайт дээрх зөвшөөрлийн маягтаас авч болно.

UsersControllerRegistration хянагчийн "ажлын" регистрийн() аргад иймэрхүү харагдаж байна:

  • /components/com_users/controllers/registration.php: 113: // Хэрэв бүртгэл идэвхгүй бол - Нэвтрэх хуудас руу дахин чиглүүлнэ.

114: хэрэв (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=" нэвтрэх", худал)); 117: 118: худал буцаана; 119: )

  • Тиймээс эмзэг бүлэгт:

/components/com_users/controllers/user.php:

Тиймээ, арга ч үгүй.

Хоёр дахь, илүү ноцтой асуудлыг ойлгохын тулд бидний үүсгэсэн хүсэлтийг илгээж, кодын янз бүрийн хэсэгт хэрхэн хэрэгжиж байгааг харцгаая. Ажилчны аргаар хэрэглэгчийн оруулсан өгөгдлийг баталгаажуулах үүрэгтэй хэсэг энд байна:

Үргэлжлэлийг зөвхөн гишүүд үзэх боломжтой

Сонголт 1. Сайтын бүх материалыг уншихын тулд "сайт" нийгэмлэгт нэгдээрэй

Нийгэмлэгт заасан хугацаанд гишүүнээр элсэх нь танд Хакерын БҮХ материалд хандах боломжийг олгож, хувийн хуримтлагдсан хөнгөлөлтөө нэмэгдүүлж, мэргэжлийн Xakep онооны үнэлгээг хуримтлуулах боломжийг олгоно!

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

Өнөөдрийн хичээлээр бид ямар ч нууц үг шаарддаггүй энгийн бүртгэлийн системийг хөгжүүлэх болно! Үр дүн нь хялбархан өөрчлөх эсвэл одоо байгаа PHP вэбсайт руу нэгтгэх боломжтой систем байх болно. Хэрэв та сонирхож байвал үргэлжлүүлэн уншаарай.

PHP

Одоо бид PHP кодыг ашиглаж эхлэхэд бэлэн боллоо. Бүртгэлийн системийн үндсэн функцийг Хэрэглэгчийн ангиллаар хангадаг бөгөөд үүнийг доороос харж болно. Анги нь минималист мэдээллийн сан болох ()-г ашигладаг. Хэрэглэгчийн анги нь мэдээллийн санд хандах, нэвтрэх жетон үүсгэх, баталгаажуулах үүрэгтэй. Энэ нь бидэнд PHP дээр суурилсан вэбсайтуудын бүртгэлийн системд хялбархан оруулах энгийн интерфэйсийг санал болгож байна.

User.class.php
// Хувийн ORM жишээ

/**
хувийн $orm;
* Хэрэглэгчийг тэмдэгт мөрөөр олоорой. Зөвхөн хүчинтэй жетонуудыг л авна
* @param string $token Хайх токен
* @return Хэрэглэгч
*/

Нийтийн статик функц findByToken($token)(

// өгөгдлийн сангаас олж, цагийн тэмдэг зөв эсэхийг шалгана уу


-> хаана("токен", $токен)
->where_raw("токен_хүчтэй байдал > ОДОО()")
->нэг_ол();

Хэрэв(!$үр дүн)(
худал буцаах;
}

Шинэ хэрэглэгч буцаах($үр дүн);
}

/**
* Нэвтрэх эсвэл хэрэглэгч бүртгүүлнэ үү.
* @return Хэрэглэгч
*/

Нийтийн статик функц loginOrRegister($email)(

// Хэрэв ийм хэрэглэгч байгаа бол буцааж өгнө үү

Хэрэв(Хэрэглэгч::байгаа($имэйл))(
шинэ хэрэглэгч буцаах($имэйл);
}

// Үгүй бол үүсгээд буцаана

Буцах Хэрэглэгч::create($email);
}

/**
* Шинэ хэрэглэгч үүсгээд мэдээллийн санд хадгална уу
* @param string $email Хэрэглэгчийн имэйл хаяг
* @return Хэрэглэгч
*/

Хувийн статик функц үүсгэх($мэйл)(

// Өгөгдлийн санд шинэ хэрэглэгч бичээд буцаана

$үр дүн = ORM::for_table("reg_users")->үүсгэх();
$үр дүн->имэйл = $имэйл;
$үр дүн->хадгалах();

Шинэ хэрэглэгч буцаах($үр дүн);
}

/**
* Өгөгдлийн санд ийм хэрэглэгч байгаа эсэхийг шалгаад логик буцаана.
* @param string $email Хэрэглэгчийн имэйл хаяг
* @boolean буцаана
*/

Нийтийн статик функц байна($мэйл)(

// Хэрэглэгч мэдээллийн санд байгаа юу?
$үр дүн = ORM::for_table("reg_users")
-> хаана("имэйл", $и-мэйл)
->тоолох();

Буцах $үр дүн == 1;
}

/**
* Шинэ хэрэглэгчийн объект үүсгэх
* @param $param ORM жишээ, id, имэйл эсвэл null
* @return Хэрэглэгч
*/

Нийтийн функц __construct($param = null)(

If($param instance of ORM)(

// ORM жишээ дамжуулагдсан
$this->orm = $param;
}
өөрөөр if(is_string($param))(

// Имэйл дамжуулагдсан
$ this->
-> хаана("имэйл", $парам)
->нэг_ол();
}
өөр(

If(is_numeric($param))(
// Хэрэглэгчийн ID-г параметр болгон дамжуулсан
$id = $param;
}
else if(isset($_SESSION["loginid"]))(

// Хэрэглэгчийн ID-г дамжуулаагүй тул сессийг харна уу
$id = $_SESSION["loginid"];
}

$this->orm = ORM::for_table("reg_users")
-> хаана("id", $id)
->нэг_ол();
}

/**
* Шинэ SHA1 нэвтрэх токен үүсгэж, мэдээллийн санд бичээд буцаана.
* @ буцах мөр
*/

Нийтийн функц үүсгэхToken())(
// нэвтэрсэн хэрэглэгчдэд токен үүсгэнэ. Үүнийг мэдээллийн санд хадгална уу.

$токен = sha1($this->email.time().rand(0, 1000000));

// Токеныг мэдээллийн санд хадгалах,
// зөвхөн дараагийн 10 минутын хугацаанд хүчинтэй гэж тэмдэглэнэ

$this->orm->set("token", $token);
$this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")");
$this->orm->save();

$жетон буцаана;
}

/**
*Энэ хэрэглэгчийг нэвтэрнэ үү
* @return хүчингүй болно
*/

Нийтийн функцээр нэвтрэх()

// Хэрэглэгчийг нэвтэрсэн гэж тэмдэглэ
$_SESSION["loginid"] = $this->orm->id;

// last_login db талбарыг шинэчил
$this->orm->set_expr("сүүлийн_нэвтрэх", "ОДОО()");
$this->orm->save();
}

/**
* Сессийг устгаад хэрэглэгчээс гарна.
* @return хүчингүй болно
*/

Нийтийн функцээс гарах()
$_SESSION = массив();
тохируулаагүй($_SESSION);
}

/**
* Хэрэглэгч нэвтэрсэн эсэхийг шалгана уу.
* @boolean буцаана
*/

Нийтийн функц нэвтэрч орсон())(
буцаах isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id;
}

/**
* Хэрэглэгч администратор эсэхийг шалгана уу
* @boolean буцаана
*/

Нийтийн функц ньAdmin())(
буцаана $this->rank() == "администратор";
}

/**
* Хэрэглэгчийн төрлийг олоорой. Энэ нь админ эсвэл энгийн байж болно.
* @ буцах мөр
*/

Нийтийн чиг үүрэг зэрэглэл())(
if($this->orm->rank == 1)(
"администратор" -ыг буцаах;
}

"Ердийн" гэж буцаана;
}

/**
* Хувийн элементүүдэд хандах шидэт арга
* $orm жишээ нь хэрэглэгчийн объектын шинж чанар юм
* @param string $key хандсан өмчийн нэр
* @return холимог
*/

Нийтийн функц __get($key)(
if(isset($this->orm->$key))(
$this->orm->$түлхүүрийг буцаана;
}

null буцаах;
}
}
Токенуудыг алгоритм ашиглан үүсгэн мэдээллийн санд хадгалдаг. Бид token_validity баганыг 10 минут болгохын тулд MySQL ашигладаг. Токеныг баталгаажуулахдаа бид хөдөлгүүрт токен хэрэгтэй гэж хэлдэг, token_validity талбарын хугацаа хараахан дуусаагүй байна. Ингэснээр бид жетон хүчинтэй байх хугацааг хязгаарладаг.

Бид хэрэглэгчийн объектын шинж чанаруудад хандахын тулд баримт бичгийн төгсгөлд байгаа __get() шидэт аргыг ашигладаг болохыг анхаарна уу. Энэ нь бидэнд өгөгдлийн санд өмч хэлбэрээр хадгалагдсан өгөгдөлд хандах боломжийг олгодог: $user->email, $user->token. Жишээ болгон бид энэ ангийг дараах кодын хэсэг дээр хэрхэн ашиглаж болохыг харцгаая.


Шаардлагатай функцуудыг хадгалдаг өөр нэг файл бол functions.php юм. Тэнд бид кодын үлдсэн хэсгийг илүү цэвэр байлгах боломжийг олгодог хэд хэдэн туслах функцтэй.

Functions.php

send_email функц($from, $to, $subject, $message)(

// Имэйл илгээх туслах функц

$headers = "MIME хувилбар: 1.0" . "\r\n";
$headers .= "Агуулгын төрөл: текст/энгийн; charset=utf-8" . "\r\n";
$headers .= "Хэнээс: ".$from . "\r\n";

Мэйл буцаах($to, $subject, $мессеж, $толгой);
}

функц get_page_url())(

// PHP файлын URL хаягийг олоорой

$url = "http".(хоосон($_SERVER["HTTPS"])?"":"s")."://".$_SERVER["SERVER_NAME"];

If(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")(
$url.= $_SERVER["REQUEST_URI"];
}
өөр(
$url.= $_SERVER["PATH_INFO"];
}

$url буцаана;
}

функцийн хурд_хязгаар($ip, $хязгаар_цаг = 20, $хязгаар_10_мин = 10)(

// Энэ IP хаягаар сүүлийн нэг цагийн турш нэвтрэх оролдлогын тоо

$count_hour = ORM::for_table("reg_login_attempt")
->
->where_raw("ts > SUBTIME(NOW(),"1:00")")
->тоолох();

// Энэ IP хаягаар сүүлийн 10 минутын нэвтрэх оролдлогын тоо

$count_10_min = ORM::for_table("reg_login_attempt")
->where("ip", sprintf("%u", ip2long($ip)))
->where_raw("ts > SUBTIME(NOW(),"0:10")")
->тоолох();

Хэрэв($тоолох_цаг > $хязгаар_цаг || $тоолох_10_мин > $хязгаар_10_мин)(
шинэ Exception ("Хэт олон нэвтрэх оролдлого!");
}
}

функцийн хурдны_хязгаар_шалгалт($ip, $имэйл)(

// Нэвтрэх оролдлогын хүснэгтэд шинэ бичлэг үүсгэнэ

$login_attempt = ORM::for_table("reg_login_attempt")->үүсгэх();

$login_attempt->имэйл = $имэйл;
$login_attempt->ip = sprintf("%u", ip2long($ip));

$login_attempt->хадгалах();
}

функцийг дахин чиглүүлэх($url)(
толгой("Байршил: $url");
гарах;
}
Хурдны_хязгаарлалт ба ханшийн_хязгаар_шалгалтын функцууд нь тодорхой хугацааны туршид зөвшөөрлийн оролдлогын тоог хязгаарлах боломжийг бидэнд олгодог. Зөвшөөрөл олгох оролдлогыг reg_login_attempt мэдээллийн санд бүртгэнэ. Нэвтрэх маягтыг баталгаажуулах үед эдгээр функцууд идэвхждэг бөгөөд та дараах кодын хэсгээс харж болно.

Доорх кодыг index.php-ээс авсан бөгөөд нэвтрэх маягтыг баталгаажуулах үүрэгтэй. Энэ нь assets/js/script.js дээр бидний харсан jQuery кодоор удирдуулсан JSON хариултыг буцаана.

index.php

If(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))(

// JSON толгой гарга

Толгой хэсэг("Агуулгын төрөл: application/json");

// Имэйл хаяг хүчинтэй юу?

Хэрэв(!isset($_POST["имэйл"]) || !filter_var($_POST["имэйл"], FILTER_VALIDATE_EMAIL))(
throw new Exception("Хүчинтэй имэйл оруулна уу.");
}

// Хэрэв тухайн хүн дээр байгаа бол энэ нь онцгой тохиолдол гаргах болно
// нэвтрэх оролдлогын зөвшөөрөгдсөн хязгаарлалт (дэлгэрэнгүйг functions.php-ээс үзнэ үү):
rate_limit($_SERVER["REMOTE_ADDR"]);

// Энэ нэвтрэх оролдлогыг тэмдэглэ
rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["имэйл"]);

// Хэрэглэгч рүү мессеж илгээх

$message = "";
$email = $_POST["имэйл"];
$subject = "Таны нэвтрэх холбоос";

Хэрэв(!Хэрэглэгч::байвал($имэйл))(
$subject = "Бүртгүүлсэнд баярлалаа!";
$message = "Манай сайтад бүртгүүлсэнд баярлалаа!\n\n";
}

// Тухайн хүнийг бүртгүүлэх эсвэл нэвтрэхийг оролдох
$хэрэглэгч = Хэрэглэгч::loginOrRegister($_POST["имэйл"]);

$message.= "Та энэ URL-аас нэвтэрч болно:\n";
$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";

$message.= "Холбоос 10 минутын дараа автоматаар дуусна.";

$үр дүн = send_email($fromEmail, $_POST["имэйл"], $сэдэв, $мессеж);

Хэрэв(!$үр дүн)(
throw new Exception("Таны имэйлийг илгээхэд алдаа гарлаа. Дахин оролдоно уу.");
}

Үхэх(json_encode(массив(
"message" => "Баярлалаа! Бид таны ирсэн имэйл хайрцаг руу линк илгээсэн. Мөн спам хавтсаа шалгаарай."
)));
}
}
барих(Үл хамаарах $e)(

Үхэх(json_encode(массив(
"алдаа"=>1,
"мессеж" => $e->getMessage()
)));
}
Зөвшөөрөл эсвэл бүртгүүлсний дараа дээрх код нь тухайн хүнд зөвшөөрлийн холбоос бүхий имэйл илгээдэг. Үүсгэсэн URL-ын улмаас токеныг $_GET хувьсагч "tkn" болгон ашиглах боломжтой болгосон.

index.php

If(isset($_GET["tkn"]))(

// Энэ хүчинтэй нэвтрэх токен мөн үү?
$хэрэглэгч = Хэрэглэгч::findByToken($_GET["tkn"]);

// Тийм ээ! Хэрэглэгч нэвтэрч, хамгаалагдсан хуудас руу дахин чиглүүлнэ үү.

$хэрэглэгч->нэвтрэх();
дахин чиглүүлэх("protected.php");
}

// Буруу токен. Нэвтрэх маягт руу буцах.
дахин чиглүүлэх("index.php");
}
$user->login()-г ажиллуулснаар шаардлагатай сессийн хувьсагчийг үүсгэснээр хэрэглэгч дараагийн нэвтрэлтэнд нэвтэрсэн хэвээр байх боломжийг олгоно.

Системээс гарах нь ойролцоогоор ижил аргаар хийгддэг.

Index.php

If(isset($_GET["гарц"]))(

$хэрэглэгч = шинэ хэрэглэгч();

If($user->loggedIn())(
$хэрэглэгч->гарах();
}

Redirect("index.php");
}
Кодын төгсгөлд бид хэрэглэгчийг index.php руу дахин чиглүүлдэг тул URL дахь ?logout=1 параметрийг арилгадаг.

Манай index.php файлд мөн хамгаалалт хэрэгтэй болно - бид аль хэдийн нэвтэрсэн хэрэглэгчдийг маягтыг харахыг хүсэхгүй байна. Үүнийг хийхийн тулд бид $user->loggedIn() аргыг ашигладаг:

Index.php

$хэрэглэгч = шинэ хэрэглэгч();

if($user->loggedIn())(
дахин чиглүүлэх("protected.php");
}
Эцэст нь, та вэбсайтынхаа хуудсыг хэрхэн хамгаалж, зөвшөөрөл авсны дараа нэвтрэх боломжтой болгох талаар харцгаая.

protected.php

// Сайтынхаа php хуудсыг хамгаалахын тулд main.php-г оруулна уу
// Хэрэглэгчийн шинэ объект үүсгэнэ. Энэ маш энгийн!

require_once "includes/main.php";

$хэрэглэгч = шинэ хэрэглэгч();

if(!$user->loggedIn())(
дахин чиглүүлэх("index.php");
}
Энэ шалгалтын дараа та хэрэглэгч амжилттай нэвтэрсэн гэдэгт итгэлтэй байж болно. Мөн та $user объектын шинж чанараар мэдээллийн санд хадгалагдсан өгөгдөлд хандах боломжтой болно. Хэрэглэгчийн имэйл болон зэрэглэлийг харуулахын тулд дараах кодыг ашиглана уу.

Echo "Таны имэйл: ".$user->email;
echo "Таны зэрэглэл: ".$user->rank();
Энд rank() нь арга бөгөөд учир нь мэдээллийн сангийн зэрэглэлийн баганад ихэвчлэн тоонууд байдаг (энгийн хэрэглэгчдэд 0, администраторын хувьд 1) бөгөөд бид эдгээрийг бүгдийг нь зэрэглэлийн нэр болгон хувиргах шаардлагатай бөгөөд энэ аргыг ашиглан хэрэгжүүлдэг. Стандарт хэрэглэгчийг администратор болгон хөрвүүлэхийн тулд phpmyadmin (эсвэл бусад мэдээллийн сангийн програм) дахь хэрэглэгчийн оруулгыг засварлахад л хангалттай. Администраторын хувьд хэрэглэгч ямар нэгэн онцгой боломж олгохгүй. Та администраторуудад ямар эрх олгохоо өөрөө сонгох эрхтэй.

Бэлэн!

Ингэснээр манай энгийн бүртгэлийн систем бэлэн боллоо! Та үүнийг одоо байгаа PHP сайт дээр ашиглах эсвэл өөрийн шаардлагад нийцүүлэн шинэчлэх боломжтой.

Тэгэхээр бидэнд бэлэн php+mysql програм байна гэж төсөөлье. Эхлээд бүртгүүлье. Бүртгэлээ баталгаажуулсан имэйлийг танд илгээх болно. Дараа нь холбоосыг дагаж, нууц үг, баталгаажуулалтыг оруулаад хадгалах товчийг дарна уу. Эхний шат дууссан, цаашаа явцгаая.

Амжилттай бүртгүүлсний дараа үйлчилгээ нь үйлчлүүлэгчийг татаж авахыг санал болгож байна. Мэдээжийн хэрэг, үйлдлийн систем бүр өөрийн суулгах сонголттой байдаг. Дараа нь бид UNIX-ийн жишээг авч үзэх болно.

Бид консол дээр бичнэ:

Wget -qO- https://toolbelt.heroku.com/install.sh | ш

Суулгахад ямар ч асуудал гарах ёсгүй. Бидэнд бас суулгасан, тохируулсан git хэрэгтэй, би энэ талаар бичихгүй.

Суулгасны дараа та програм руу нэвтрэх шаардлагатай:

$ heroku нэвтрэх

Имэйл болон нууц үгээ оруулна уу. Аппликешн нь танд зөвшөөрөл олгох бөгөөд таны нийтийн ssh түлхүүрийг автоматаар татаж авах ёстой. Хэрэв ийм зүйл болохгүй бол өөрийн акаунт руу (https://dashboard.heroku.com/account) очоод нийтийн ssh нэмнэ үү:

Нийтийн ssh-г үзэхийн тулд консол дээр бичнэ үү:

$ cat ~/.ssh/id_rsa.pub

Түлхүүрийг мөн тушаалыг ашиглан нэмж болно:

$ heroku түлхүүрүүд: нэмэх

Тиймээс таны анхны "heroku програм"-ыг бүтээхэд бүх зүйл бэлэн боллоо. Бид програмаа хадгалсан лавлах руу очоод консол дээр бичнэ.

$ heroku үүсгэх

Үүний үр дүнд та үүнтэй төстэй зүйлийг харах хэрэгтэй:

$git push heroku master

Дараа нь бид консол дээр бичнэ:

$ heroku нээлттэй

Манай сайт хөтөч дээр нээгдэнэ. Хэрэв бид mysql-г ашиглаагүй байсан бол энэ бүхэн төгсгөл байх байсан, гэхдээ бид бага зэрэг ажиллах хэрэгтэй болно. Дэлгэц дээр mysql-тэй холбогдох боломжгүй гэсэн алдаа гарсан байх магадлалтай. Та мөн бүртгэлийг нээх замаар алдааг харж болно:

$ heroku бүртгэл

Mysql-тэй ажиллахын тулд бид ClearDB нэмэлтийг ашиглана. Үүнийг суулгахын тулд эхлээд dashboard.heroku.com/account хаягаар өөрийн кредит картын мэдээллээ бөглөх хэрэгтэй:

Хэрэв та үүнийг хийхгүй бол ClearDB суулгах үед алдаа гарах болно:

dry-taiga-2649 дээр cleardb:ignite нэмэх... амжилтгүй боллоо
! Энэ нэмэлтийг суулгахын тулд бүртгэлээ баталгаажуулна уу
! Дэлгэрэнгүй мэдээллийг devcenter.heroku.com/categories/billing үзнэ үү
! Одоо heroku.com/verify хаягаар баталгаажуулна уу

ClearDB суулгах командыг доор харуулав.

$ heroku нэмэлтүүд: cleardb нэмэх: гал асаах

ClearDB суулгасан тул одоо мэдээллийн санд хандах хандалтыг харцгаая:

$ heroku тохиргоо

Бид үр дүнг дараах хэлбэрээр авна.

CLEARDB_DATABASE_URL:mysql://USER:PASSWORD@HOSTNAME/DBASENAME?reconnect=true

Ямар ч тохиромжтой MySQL клиентээр дамжуулан олж авсан хандалтыг ашиглан өгөгдлийн сангийн дампыг серверт байршуулна уу.

Та php дээрх мэдээллийн санд дараах байдлаар хандаж болно.

$url=parse_url(getenv("CLEARDB_DATABASE_URL"));

$server = $url["хост"];

$username = $url["хэрэглэгч"];

$нууц үг = $url["нууц үг"];

$db = substr($url["зам"],1);

mysqli_connect($сервер, $хэрэглэгчийн нэр, $нууц үг);

mysqli_select_db($db);

Бид консол дээр бичнэ:

Орон нутгийн сайт болон Heroku-ийн тохиргоог өөрчлөхгүйн тулд чек нэмж болно.

Хэрэв ($_SERVER["SERVER_NAME"] == "thawing-island-242342379.herokuapp.com") ( $url = parse_url(getenv("CLEARDB_DATABASE_URL")); $host = $url["host"]; $username = $url["user"]; $password = $url["pass"]; $dbname = substr($url["path"], else ( $host = "localhost"; $dbname = " db); "; $username = "хэрэглэгч"; $нууц үг = "123"; )

Үүнийг APPLICATION_ENV-ээр дамжуулан хийх нь илүү зөв байх болно, гэхдээ би үүнийг хэрхэн хийх талаар мэдээлэл олсонгүй. Мэдэх хүн байвал бичээрэй.

Бараг бүх зүйл бэлэн болсон. Зөвхөн composer.json файлыг root-д нэмэх л үлдлээ.



("шаардлагатай": ("ext-mysql": "*")) Танд нийтлэл таалагдсан уу?