Ona php-da oddiy dam olish xizmati. Superglobal Comray $ _Server Rutle FP

Avvaliga, biz Avatarni yuklab olish qobiliyatini qo'shish orqali ro'yxatdan o'tish sahifasini yaxshilaymiz. Asl rasm JPG, GIF yoki PNG formatida bo'lishi kerak. Bundan tashqari, u 2 MB dan oshmasligi kerak. Skriptni siqib, avatarning kattaligi 3 Kb va JPG formatida tashvishlanmang. Ochiq sahifa rEG.pHP.va yorliq qo'shing < shakl> chiziq enctyPe \u003d "Ko'praq / forma-ma'lumot"Misolda bo'lgani kabi:


belgilanish










Endi tejash reg.php.

2. Stolda boshqa maydonni yaratish uchun kategoriyalar foydalanuvchilar.. B ga o'ting. phpMyAdmin., Kerakli ma'lumotlar bazasini va jadvalini tanlang.


Rasmdagi kabi barcha qiymatlarni fosh qiling:

Ushbu sohada yo'l avatardan oldin yozib olinadi va u alohida papkada saqlanadi, uni "avatarlar" deb ataydi. Jild boshqa skript fayllari kabi bir katalogda joylashgan bo'ladi.

3. Faylni sotib oling saqlash._ foydalanuvchi.. pHP. Kirish va paroldan bo'sh joyni olib tashlaganingizdan so'ng quyidagi kodni qo'shing:

// qo'shimcha bo'shliqlarni olib tashlang
$ lount \u003d trim ($ loumon);

// yangi *************************************** qo'shing

// Kirish va parol uzunligini tekshiring
Agar (strlen ($ login)< 3 or strlen($login) > 15) {
Chiqish ("Kirish kamida 3 ta belgidan iborat bo'lishi kerak va 15 dan oshmasligi kerak");
}
If (strlen ($ parol)< 3 or strlen($password) > 15) {
Chiqish ("Parol kamida 3 ta belgidan iborat bo'lishi kerak va 15 dan oshmasligi kerak.");
}

agar (! Bo'sh ($ _ post ["Fumload"])) "Foydalanuvchi rasm yuborganligini tekshiring
{
$ FUPLOW \u003d $ _ post ["FUPLO yuk"]; $ FUPload \u003d Trim ($ FULLOOM);
Agar ($ FUPOD \u003d\u003d '»yoki bo'sh ($ FULLOG)) (
Ishlamaydi ($ FUPLO yuk); // Agar $ FUPLOW o'zgaruvchisi bo'sh bo'lsa, uni o'chiring
}
}
if (! Issiq ($ fundload) yoki bo'sh ($ FUPO yuk) yoki $ FUPload \u003d\u003d '')
{
// Agar o'zgaruvchi mavjud bo'lmasa (foydalanuvchi rasmni yubormagan), keyin biz uni "yo'q avatar" yozuvi bilan oldindan tayyorlangan rasm tayinlaymiz
$ avatar \u003d "avatarlar / set-avara.jpg"; // Siz net-avara.jpg yoki manbada olishingiz mumkin
}
boshqa.
{
// aks holda - foydalanuvchi rasmini yuklab oling
$ PAT_TO_T_90_DIREKTORJori \u003d "Avatarlar /"; // Papka, dastlabki rasm va uning siqilgan nusxasi yuklanadi

Agar (prag_mach ("/] (JPG) | (GIF) | (GIF) | (PNG), $ / fayllar [" Ism "] [" Ism "] [" Ism "] ) // asl rasmning formatini tekshirish
{
$ fayl nomi \u003d $ _fils ["Fumload"] ["Ism"];
$ manbam \u003d $ _filz ["FUPLO yuk"] ["Tmp_name"];
$ maqsad \u003d $ PATH_TO_90_RIREKORY. $ Fayl nomi;
Ko'chirish_uploaded_file ($ manbasi, $, $); // papkasida asl nusxasini yuklab oling $ Path_to_90_dayectory
if (prag_mach ("/ [.] (GIF) | (GIF) $ /", $ fayl nomi))) (
$ iM \u003d ImahcreatefomIlif ($ PATH_TO_T_90_DIRTARY. $ Fayl nomi); // Agar asl nusxada GIF formatida bo'lsa, so'ngra bir xil formatda rasm yarating. Keyingi siqishni uchun kerak
}
if (prag_mach ("/ [.] (PNG) | (PNG) $ /, $ fayl nomi))) (
$ iM \u003d Imaccreatefrompng ($ Path_to_90_shirce. $ fayl nomi); // asl nusxasi PNG formatida bo'lsa, unda bir xil formatda rasm yarating. Keyingi siqishni uchun kerak
}

If (prag_mach ("/ [.] (JPG) | (JPG) | (JPEG) | (JPEG) $ /", $ fayl nomi)) (
$ iM \u003d Imahcreatefromjpeg ($ PATH_TO_90_DIRTARIYASI. $ Fayl nomi); // Agar asl asl JPG formatida bo'lsa, unda bir xil formatda rasm yarating. Keyingi siqishni uchun kerak
}
// kvadrat rasmni yaratish va keyingi siqishni www.codenet.ru saytidan olingan
// 90x90 kvadratini yaratish
// nuqtai nazar
// w - rasm kengligi
// nisbati - mutanosiblik koeffitsienti
$ w \u003d 90; // 90x90 maydoni. Siz boshqa hajmni qo'yishingiz mumkin.
// yuqorida joylashgan manba rasmini yarating
// manba fayli va uning o'lchamlarini aniqlang
$ w_src \u003d imagex (im); // kengligini hisoblang
$ h_Src \u003d rasmlari ($ im); // rasmning balandligini hisoblang
// bo'sh kvadrat rasmni yarating
// TRUECOOROR!, Aks holda biz 8 bitli natijaga erishamiz
$ Sche \u003d ImageCreatetusolor ($ w, $ w);
// Agar fotosurat gorizontal bo'lsa, X ning kvadrat o'rtalarini kesing
Agar ($ w_src\u003e $ h_SRC)
ImaheCopyReseded ($, Im, im, 0, 0,
Dumaloq (($ w_src, $ h_src) -min ($ w_src, $ h_src)),
0, $ w, wh w, min ($ w_src, $ h_src), min ($ w_src);
// kvadrat yuqori qismini kesing,
// Agar fotosurat vertikal bo'lsa (siz ham o'rta bo'lsa ham)
Agar ($ w_src) bo'lsa<$h_src)
ImaheCopyReseded ($, im, 0, 0, 0, 0, $ w, w, w, w, w
min ($ w_src, $ h_src), min ($ w_src, $ h_SRC));
// kvadrat rasmni kesmang
Agar ($ w_src \u003d\u003d $ H_SRC)
ImahceCopyReseled ($, Im, $ 0, 0, 0, 0, $ w, w_src, $ w_src);
$ Sana \u003d vaqt (); // vaqtni hisoblang.
Rasmjpeg ($ sme_to_90_dayectory. $ JPG "); // kerakli papkaga JPG formatini saqlash uchun JPG formatidagi rasmni kerakli papkaga saqlang. Shunday qilib, avatarlar bir xil ismlar yo'q.
// Nega aniq JPG? Bu juda oz makon kerak + foydalanuvchini chalg'itadigan GIF tasvirini yo'q qiladi. Uning izohini ko'zning chetida biron bir harakatni e'tiborga olganida, uning sharhini o'qish juda yoqimli emas.
$ avatar \u003d $ PROS_TO_T_TO_90_DIRKORY. $ JPG "; // biz Avatarga yo'l o'zgaruvchisiga kiramiz.
$ Docell \u003d $ PAT_TOT_TO_90_RAZORY. $ Fayl nomi;
Binckink ($ to'g'ri); // yuklab olingan rasmning asl nusxasini o'chirib tashlang, endi kerak emas. Vazifa miniatyura olish edi.
}
Boshqa.
{
// Formatning nomuvofiqligi bo'lsa, biz tegishli xabarni chiqaramiz
Chiqish ("Avatar formatda bo'lishi kerak JPG, GIF yoki PNG");
}
// yuklab olish jarayoni va tayinlash muddati $ avatar o'zgaruvchi manzilini yuklab olingan AVA
}



// yangi **************************************** ni tugatdi
// Keyingi maqolaning birinchi qismidan keladi, ammo ma'lumotlar bazasiga so'rovni o'zgartirish kerak.
// Ma'lumotlar bazasiga ulanish
// bir xil tizimga ega bo'lgan foydalanuvchi mavjudligini tekshiring
$ natija \u003d mysql_quareri ("Login / Login" "" ", $ DB);
Agar (! Bo'sh ($ myrow ["id"])) (
Chiqish ("Kechirasiz, kirish kiritilgan. Yana kirishni kiriting.");
}
// agar yo'q bo'lsa, biz ma'lumotlarni saqlab qolamiz
$ natijalari2 \u003d MySQL_quareri ("foydalanuvchilarga (login, parol, avatarlar) qadriyatlar (" $ loard "," $ avatar "," $ avatarlar "," "$", "$") ")".
// xatolar bo'lganligini tekshiring
Agar ($ natijaga teng)
{
Echo "Siz muvaffaqiyatli ro'yxatdan o'tdingiz! Endi saytga borishingiz mumkin. Uy sahifasi";
}
boshqa (
Echo "Xato! Siz ro'yxatdan o'tmadingiz.";
}
?>

4. Siz bir xil ma'lumotlar bazasiga bir stol qo'shishingiz kerak. Bu kirish joyida xatolarga yo'l qo'ygan IP manzillarni saqlaydi. Shunday qilib, 15 daqiqa davomida ketma-ket xato qilganlarga kirishga kirishimiz mumkin. Menimcha, parol dasturlari uzoq vaqt davomida chalkashib ketishi kerak.
Keling, phpMyAdmin-ga boramiz va 3-maydon bilan yangi jadval yaratamiz:


IP - IP manzili.
sana - IP ma'lumotlari bo'lgan oxirgi 15 daqiqada muvaffaqiyatsiz kirish sanasi. Kol - IP ma'lumotlari bo'lgan foydalanuvchi tomonidan oxirgi 15 daqiqada xatolar soni.
Zo'r! Tayyor, endi login va parolni tekshirish faylini o'zgartiring, chunki endi bizda shifrlangan parol mavjud. Kirish va paroldan bo'sh joylarni yanada moslashtiradigan barcha narsalarni oching va o'chiring. Keyingi kodni qo'shing:

// qo'shimcha bo'shliqlarni olib tashlang
$ lount \u003d trim ($ loumon);
$ parol \u003d trim (parol);

// yangi ********************************************** ni almashtiring
// Ma'lumotlar bazasiga ulanish
qo'shing ("BD.PP"); // bd.php fayli hamma kabi bir xil papkada bo'lishi kerak, agar yo'q bo'lsa, unda shunchaki yo'lni o'zgartiring
// Parolni tanlash uchun minipvertect
$ IP \u003d Getenv ("HTTP_XUWARDED_FORF");
Agar (bo'sh ($ IP) || $ IP \u003d\u003d "Noma'lum") ($ IP \u003d Getenv ("Rimote_ADDDR»);) IPni o'chirish
mysql_quarerer ("Oshibkadan o'chirish UNIX_TIMESTAME (Sana) - Unix_timetamp (sana)\u003e 900"), 15 daqiqadan so'ng foydalanuvchilarning iP manzillarini o'chirib tashlang.
$ Natija \u003d mysql_quareri ("Oshiblka-dan COL-ni tanlang.
$ myrow \u003d mysql_fchet_array ($ natija);
agar ($ myrow ["Kol"]\u003e 2) (
// Agar xatolar ikkitadan ko'p bo'lsa, bu uchta, keyin xabar chiqaradi.
Chiqish ("Siz login yoki parolni noto'g'ri kiritdingiz. Keyingi urinishgacha 15 daqiqa kuting.");
}
$ parol \u003d md5 ($ parol); // shifr paroli paroli
$ parol \u003d strrev ($ parol); // ishonchlilik uchun teskari
$ parol \u003d $ Parol. "B3P6F";
// Siz tatib ko'rish uchun sizlarning bir nechtasini qo'shishingiz mumkin, masalan, "B3P6F" ni kiritdim. Agar ushbu parol Server tomonidan bir xil MD5 serveridagi server tomonidan tanlangan bo'lsa, unda hech narsa yaxshi bo'lmaydi. Ammo men sizga boshqa belgilar qo'yishingizni maslahat beraman, siz chiziqning boshida yoki o'rtada.
// Bu holda ma'lumotlar bazasida parol maydonining uzunligini oshirish kerak. Shifrlangan parol ancha katta bo'lishi mumkin.

$ natija \u003d mysql_quarery ("Kirish uchun" Foydalanuvchilardan * "Kirish" va parol \u003d "$ parol" ", $ db); // Ma'lumotlar bazasidan barcha foydalanuvchi ma'lumotlarini kiritilgan kirish va parol bilan olib tashlang
$ myrow \u003d mysql_fchet_array ($ natija);
Agar (bo'sh ($ myrow [id)))))
{
// login va parol mavjud bo'lmagan foydalanuvchi mavjud bo'lmasa
// bu IP kirishi mumkin bo'lmagan yozuvni kiriting.
$ ni tanlang \u003d MySQL_quareri ("Oshibkaning IP-ni tanlang, u erda IP \u003d" $ IP ");
$ Tmp \u003d mysql_fchet_row ($ ni tanlang);
Agar ($ IP \u003d\u003d $ TMP) (// tekshirish, "Oshibka" stolida foydalanuvchi mavjud
$ natijalari 52 \u003d mysql_quareri ("Oshibka-dan COL-ni tanlang, bu erda IP \u003d" IP "" ", $ DB);
$ Myrow52 \u003d mysql_fchet_array ($ natijalari 52);
$ col \u003d $ myrow52 + 1; // muvaffaqiyatsiz kirish uchun yana bir urinish qo'shing
Mysql_quareri ("Onibka-ni yangilash Col \u003d $ COL, Sana \u003d hozir () IP \u003d" $ IP ");
}
boshqa (
Mysql_quareri ("Oshibka (IP, Sana, Colla) qiymatlarini (" $ IP ", hozir ()," 1 ")");
// So'nggi 15 daqiqada xatolar bo'lmaganida, "Oshibka" stoliga yangi kirish
}

chiqish ("Kechirasiz, siz kiritgan parol yoki parol.");
}
Boshqa (
nbsp; // Agar parollar mos bo'lsa, biz foydalanuvchining seansini boshlaymiz! Siz buni tabriklashingiz mumkin, u kirdi!
$ _Sissiya ["Parol"] \u003d $ myrow ["parol"];
$ _Sress ["Kirish"] \u003d $ Myrow ["Kirish"];
$ _Sessiya ["ID"] \u003d $ MyRow ["Id"]; // Bu ma'lumotlar juda ko'p foydalaniladi, bu erda ular "siz bilan kiyinadilar" mavjud

// Keyingi, keyingi kirish uchun cookie-fayllardagi ma'lumotlarni eslaymiz.
//DIQQAT!!! Ma'lumotlar shifrlashsiz cookie-fayllarda saqlanganligi sababli buni o'z xohishingiz bilan bajaring.
Agar ($ _post ["Saqlash"] \u003d\u003d 1) (
// Foydalanuvchi uning ma'lumotlarini keyingi kirish uchun saqlanib qolishini istasa, biz uning brauzerining cookie-fayllarida turamiz
Setcookie ("Kirish", $ _post ["Kirish"], Vaqt () + 99999999);
Setcookie ("Parol", $ _post ["parol"], vaqt () + 99999999);
}}
Aks sado ' "; / Foydalanuvchini Bosh sahifaga yo'naltiring, u erda u muvaffaqiyatli kirish haqida xabar bermaydi
?>

5. Bosh sahifani to'liq o'zgartirish. Foydalanuvchi avatarini u holda ko'rsatish, qayd yozuvidan chiqish uchun havolasini namoyish qilish va kirish joyida parolni yodlash katakchasini qo'shish kerak.
Index.php.

// butun protsedura mashg'ulotlarda ishlaydi. Unda foydalanuvchi ma'lumotlari saytda bo'lganida saqlanadi. Ularni sahifaning boshida boshlash juda muhim !!!
sessiya_start ();
qo'shing ("BD.PP"); // bd.php fayli hamma kabi bir xil papkada bo'lishi kerak, agar yo'q bo'lsa, unda shunchaki yo'lni o'zgartiring
agar (! bo'sh bo'lsa ($ _ sessiya) ["Kirish"]) va! bo'sh ($ _ sessiya))
{
// Agar sessiyalarda login va parol bo'lsa, ularni tekshiring va avatarni olib tashlang
$ login \u003d $ _Sarce ["Kirish"];
$ parol \u003d $ _Sissiya ["parol"];
$ natija \u003d mysql_quarery ("Login \u003d" Kirish "va parol \u003d" $ parol "", $ db);
$ myrow \u003d mysql_fchet_array ($ natija);
// kerakli foydalanuvchi ma'lumotlarini olib tashlang
}
?>


Bosh sahifa


Bosh sahifa

Agar (! $ ($ Myrow ["avatar"] yoki $ MyRow ["Avatar"] \u003d\u003d ") (
// Ma'lumotlar bazasidan foydalanuvchi ma'lumotlari olinmasa, tekshiring. Agar yo'q bo'lsa, u kiritilmagan yoki seansdagi parol noto'g'ri. Kirish oynasini ko'rsatamiz. Ammo biz uni kirganlarga olib bormaymiz, endi ular uchun zarur emas.
Bosma<<


Bu yerda;

Agar (Ismet ($ _ cookie ["kirish"])) "Kooteee-ga kirish bilan o'zgaruvchan o'zgaruvchan mavjud. Agar foydalanuvchi avvalgi kirish joyida bosilgan bo'lsa, Chekbox "Meni eslab qoling"
{
// Ha bo'lsa, uni shaklga kiriting. Shu bilan birga, foydalanuvchi o'z loginasi xohlagan grafikada allaqachon yozilganligini ko'rsatadi
Echo "qiymat \u003d". $ _ Cookie ["Kirish"]. ""\u003e ";
}

bosma<<




Bu yerda;

Agar (Ismet ($ _ cookie ["parol"])) // cookie-da parol bilan o'zgaruvchan o'zgaruvchan mavjud. Agar foydalanuvchi avvalgi kirish joyida bosilgan bo'lsa, Chekbox "Meni eslab qoling"
{
// Ha bo'lsa, uni shaklga kiriting. Shu bilan birga, foydalanuvchi o'z parolini xohlagan grafikada allaqachon kiritilganligini ko'rsatadi.
Echo "qiymat \u003d". "$ _ Cookie" ["parol"]. ""\u003e\u003e ";
}

Chop etish.<<



Meni eslab qolish.






Ro'yxatga olmoq



Saytga mehmon sifatida kirdingiz

Bu yerda;
}
boshqa.
{
// yaxshi kirish bilan foydalanuvchini yulduzlar sifatida joylashgan barcha narsalar beriladi.

bosma<<
Siz saytga $ _corsiya sifatida kiritdingiz (chiqishi)


Ushbu havola faqat ro'yxatdan o'tgan foydalanuvchilar uchun mavjud.

Sizning Avataringiz:




Bu yerda;

//************************************************************************************
// yaxshi kirish bilan foydalanuvchi yuqorida joylashgan barcha yulduzlar orasida joylashgan.
}
?>



6. Kiritilgan foydalanuvchilar uchun hisoblardan chiqish imkoniyatini berish kerak. Asosiy sahifada allaqachon chiqish haqida ma'lumot mavjud edi. Ammo bu fayl hali mavjud emas. Shunday qilib, yangi fayl yarating chiqish.php. Kod bilan:

sessiya_start ();
Agar (bo'sh bo'lsa) ["Kirish"]) yoki bo'sh ($ _ sessiya ["parol"]))))) "
{
// Agar login va parol bilan seans bo'lmasa, demak ulanuvchi ushbu faylga kelgan. Bu erda bu joy emas. Biz xato xabarini beramiz, skriptni to'xtatamiz
Chiqish ("Ushbu sahifaga kirish faqat ro'yxatdan o'tgan foydalanuvchilar uchun ruxsat beriladi. Agar ro'yxatdan o'tsangiz, keyin login va parolingiz ostida saytga kiring
Bosh sahifa");
}

pusiz ($ _ sessiya) ["parol"]);
Pusiz ($ _ sessiya) ["Kirish"]);
Pushtasiz ($ _ sessiya) ["ID"]); // parametrlarni seanslarda yo'q qiling
Chiqish (" ");
// Asosiy sahifaga foydalanuvchini yuboring.
?>

Bo'ldi shu! Sog'liqni saqlashdan foydalaning! Omad!

Ba'zan men kodlashning hozirgi tartibidan va kichik muammolardan chalg'itishni xohlayman, bu joy "tafsilotlar" haqidagi maqolalarda joylashtirilgan. Uzoq vaqt davomida nima qilayotganingizni ko'rib chiqing. Shunday qilib, asosiy PHP dasturlash vazifasi veb-sahifalar yaratishdir. Qismanim menga allaqachon qismlardan aziyat chekkan edi - shablonlar va XML haqida arxivda topishingiz mumkin. Endi men bularning barchasini bir-biriga qisqartirishni va zararli ish qilishni xohlayman. Birinchi qism.

1. PHP kelib chiqishi.

Nima uchun, ko'pchiligimiz uchun PHP boshlangan? Skript ekish HTML sahifalarida. Masalan, ma'lumotlar katalogi. Muayyan kategoriyadan ma'lumotli sahifa:

". Mysql_Rusult ($ 1).""; mysql_Free_Result ($ 1) Rubrtal \u003d 'Saytdan ($ id), Saytdan ($ id), Sayt_Date DeSC, sarlavhasi bo'yicha buyurtma berish; Agar (MySQLE_Error ()) echo mysql_Error (); boshqa vaqt ($ s2 \u003d mysql_fchet_assoc ($ \u003d natija)) echo ") ($ satr)
($ satr)
Yozib olingan: ($ qator), Reyting: ($ satr)

Faqat va sodda, ammo asosiysi bu kod ishlaydi. Sarlavhaning nomini sarlavha sahifasida yozishga harakat qilsangiz, qiyinchiliklar boshlanadi. Buning uchun siz yorliq ichida PHP-ni yaratishingiz kerak , birinchi so'rovni bajaradigan kodni (sarlavhani tanlab olish), Sahifaning tanasida ko'rsatilganligini saqlang.</p> <p>Quyidagi asorat - bu cookie-fayllar bilan ishlash va foydalanuvchi tashrif buyurganiga qarab ularni berish. Buni tasavvur qilish uchun: "Biz tashrif buyuruvchilarning boshpaniyamizning oldiga va potentsial reklama beruvchilarga tashrif buyurishiga qaror qilsak, baker dvigatelini maqsadli qilib qo'yamiz. Masalan, keyingi sahifada "Rok musiqasi" musiqa va musiqa asboblarining sarlavhalari sarlavhasi sarlavhasi bilan tashrif buyurgan foydalanuvchi, elektr poyezd do'konining reklamasi bo'ladi.</p> <p>Bunday holda, biz faylning boshida php kodini kiritish va sarlavhaning mavjudligini tekshirish uchun biz u erda harakat qilishimiz kerak, chunki cookie fayllari faqat hujjatning birinchi bayoni berishdan oldin berilishi mumkin.</p> <p><i>Albatta, siz kontent mazmuni va xavfsizroq bo'lganligi sababli foydalanuvchi sessiya mexanizmi yordamida osonlikcha amalga oshiriladi, chunki foydalanuvchi oshpaz tarkibini qo'lda o'zgartirishi mumkin. Ha, bu shunday, ammo birinchi navbatda, ularning bosh sahifasini bu erda taqdim etadigan dasturiy dasturlashning ko'rinishi, ikkinchamiz uzoq o'tmish haqida gapiramiz - biz deyarli 1998 yildamiz.</i></p> <p>Bu HTML va PHP kodli bloklarini plaginlardagi fayllarga unchalik osonlashtirmaydi. Yuqorida tavsiflangan vazifa - sarlavhalarda oddiy ma'lumot katalogini yaratish - ehtimol, ushbu yondashuvning imkoniyatlarining yuqori chegarasi. Ko'proq murakkab vazifalarni bajarishda katta mehnat xarajatlari bilan to'qnashishi xavfi mavjud.</p> <p>2. Kodeksning asorati</p> <p>Oldingi yondashuvning mantiqiy rivojlanishi - bu PHP-ga barcha sahifalar php-kodi bo'lganligi - fayl boshida bu ochilish yorlig'i<?php", и дальше php-код не прерывается. Весь вывод делается через echo (print). Такой код, вроде бы, выглядит логичнее. Пример: страница подписки на новые ссылки в каталоге. В форме предлагается выбрать, на какие рубрики подписывается пользователь.</p><p> <?php include "db-connect.inc"; include "login-check.inc"; if (!$logged_in) { header ("Location: /register.php"); exit(); } include "page-header.inc"; print("<h2> Class \u003d "CLUM_ARALL_SMALL_APTION"\u003e Mijozlar uchun yangiliklar</h2> <table cellpadding=\"4\" cellspacing=\"0\" border=\"0\">"); $ Natija \u003d" Sarlavha, e'lon, e'lon, xabar, e'lon, yangiliklar_Date-ni bosing. Natija) Chop etish (" <tr><td>($ qator) "); agar ($)\u003e Sana (" Y-M-D ", Vaqt () - 3600 * 24 * 14)) Chop etish (" Y-M-D ") <font color=\"#cc0000\">yangi!</font>"); Chop etish ("</td><td> <a href=\"read.php?id={$row}\"><b>($ satr)</b></a> <br>($ satr)</td></tr>"); Chop etish ("</table>");" Sahifa-Footer.inc ";?\u003e</p><p> <?php ... else while ($row = mysql_fetch_assoc($result)) print_announce($row); ... ?> </p><p>Ammo bu ishni osonlikcha soddalashtirmaydi va to'lov soati kelishi shart bo'ladi: saytning dizayni bo'lishi kerak. Dizayner tahrirlash shunchaki rad etadi. Bunday kodni yozgan kishi buni aniqlab, eski HTML-ni yangisini almashtirish imkoniyatiga ega bo'ladi. Agar bu shaxs endi loyiha ustida ishlayotgan bo'lsa, loyiha deyarli noldan qayta yozishga majbur bo'ladi yoki u o'zini ko'zni egallagan holda yodgorlik bilan o'sadi.</p> <p>Aralashtirilgan HTML va PHP yondashuvini rivojlantirish uchun yana bir variant. PHPda ilgari qochib ketganidek, bunday mulkka ega. Bu odatiy HTML-kodni chiqarish uchun til tuzilmalarini chiqarish imkonini beradi:</p><p> <?php include "db-connect.inc"; include "login-check.inc"; if (!$logged_in) { header ("Location: /register.php"); exit(); } include "page-header.inc"; ?><h2 class="club_article_small_caption">Mijozlar uchun yangiliklar</h2> <table cellpadding="4" cellspacing="0" border="0"><?php $result = mysql_query("SELECT id, title, announce, news_date FROM news ORDER BY news_date DESC LIMIT 10"); if (mysql_error()) print(mysql_error()); else while ($row = mysql_fetch_assoc($result)) { ?><tr><td><?=$row["news_date"]?><?php if ($row["news_date"] > Sana ("Y-M-D", vaqt () - 3600 * 24 * 14) (?) <font color="#cc0000">yangi!</font><?php } ?></td><td> "> <b><?=$row["title"]?></b> <br><?=$row["announce"]?></td></tr><?php } ?></table><p>Hommitda ushbu faylni ochib, o'lchov yoki dizayner HTML belgisini orqa chiroq bilan ko'radi va sahifalarni tahrirlash uchun tahrirlanishi mumkin. Oddiy joylarda bu usul juda mos keladi. Jahannam yo'qligi qiyin emas.</p> <p>3. Qayta tiklanish</p> <p>PHP 3.0-ni chiqarishi bilan ... Aytgancha, xronologiyani tiklashdan xronologiyasi zarar ko'rmaydi, chunki biz keng qamrovli hikoya haqida gapiramiz. Shunday qilib, xronologiya PHP veb-arxividan olingan axborot byulleteni arxivi va sahifani e'lon qilishga muvaffaq bo'ldi:</p><p>08,1997 PHP 3.0 Beta1 06.06.1998 PHP 3.0 Release 19.07.1999 PHP 4.0 Beta1 22.05.2000 PHP 4.0 Release 10.12.2001 PHP 4.1 Release 04/20/2002 PHP 4.2 Release 10.10.2002 PHP 4.3.0PRE1 (Pre1 beta emas, balki hali ham nomzodni ozod qilmayapti)</p><p>Shunday qilib, PHP 3.0 chiqishi bilan PHP dasturlashida yangi yondashuvni qo'llashda paydo bo'ldi - skriptlardagi buferlash materiallari. (Shuni ta'kidlash kerakki, bu hozir bo'lgan noto'g'ri buferlash emas.)</p> <p>Vaqt o'tishi bilan, qurilish maydonlarining vazifalari yanada murakkablashdi, PHP kengroq ishlatiladi, saytlar "dinamik" bo'ldi. Aralash phpP va HTML-dagi plaginlardagi barcha narsalarni qilish uchun sayt qanchalik ko'p bo'lsa, muammolar. Skript xotirasida HTML sahifasini qayta ishlashda PHP kengaytmasining keyingi bosqichi bilan mantiqiy.</p> <p>Ma'lumotni amalga oshirish, yondashuv odatdagi yordam yordamiga (yaxshi, ok, emulyatsiya) ob'ektga yo'naltirilgan dasturlashda yordam bergan. Yaratilgan <i>sinflar shablonlari</i>Bu sahifani va unga kiritilishi kerak bo'lgan ma'lumotlar shablonini osongina boshqarish imkonini berdi.</p> <p>Unda dasturlarning imkoniyatlari kengaytirildi, ammo shu bilan birga ko'proq tizim resurslarini talab qiladi. Bugungi kunda biz bunday yondashuvdan foydalanishning foydasi tizim resurslarining xarajatlarini to'sib qo'ydi, ammo yana ikki yoki uch yil oldin ko'plab hujjatlar butun hujjatni xotirada saqlab qolishiga ishonishdi - veb-dasturlash uchun nogiron.</p> <p>Shunday qilib, majoziy ma'noda texnologiyalar uchun to'ntarish bor edi: agar PHP HTMM kodida yashiringan bo'lsa va uni qo'rqitib qo'ydi, endi u birinchi navbatda chiqdi va barcha HTML panjalarida qoladi.</p> <p>4. shablonlarning yomon naqshlari nima</p> <p>Olti oy o'tgach, men rejalarda biron bir narsani o'zgartirishga qaror qildim. O'z-o'zini himoya qilish sinflarining yomonligi mavzusida axloqiy emas. Ular yaxshi. Ulardan foydalaning va sizga kerak bo'lgan narsangiz bilan birga keladi! Faqat ba'zi vaziyatlarga xalaqit berishingizni o'ylab ko'ring.</p> <p>Birinchidan. Agar sinf maxsus yozilsa, bu hayotdan biroz yirtilganligini anglatadi. Sinf juda ko'p rivojlanayotgan tajribaga ega bo'lsin, u hali ham issiqxona sharoitida amalga oshirildi. Olingan texnologiya foydalanish uchun o'ziga xos sharoitlarga ega bo'ladi, bu kelajakdagi rivojlanishni sozlash yoki sinfni qayta ishga tushirishga to'g'ri keladi.</p> <p>Ikkinchi. Turli loyihalardagi o'zgarishlardan sintezlangan sinf, shuningdek, o'zgarishlarni talab qiladi - bu juda ko'p.</p> <p>Shunday qilib, siz o'zingizning sinflaringiz (shablon sinflari sinflari, menimcha, juda ko'p narsalardan juda ko'p foydalanishingiz mumkin). Agar siz ya'ni Didgement usulga borsangiz, sinfni baholashdan klass qurish - bu biron bir narsaning mohirligi mumkin bo'lgan kichik imkoniyat bo'lishi mumkin. Va kerakli narsa emasligi aniq bo'lishi ehtimoli yuqori. Siz indüksiyani qo'llashingiz mumkin - keyin katta va uzoq ishlardan so'ng sizga qanday ishlarni olish kafolatlanadi, lekin majburiy emas.</p> <p>Oldingi qismlarda aytib o'tgan uy qurilishining yomonligi birinchi holatda birinchi holatda, siz orzu qilganingizdek, tushkunlikka tushmaganingiz, maxsus yondashuv va ko'p kodlashni talab qiladigan darajada yuqori darajada yotadi. Ikkinchi holatda siz uzoq vaqt davomida ko'p harakat qilishingiz va siz ilgari qilingan va sizdan oldin nashr etilgan narsalarni olishingiz mumkin.</p> <p>Texnologiyalarni taqqoslashga kelsak, asosiy savol - ahamiyatli. Juda oddiy sayt plaginlarda amalga oshirilishi mumkin va sinflar va dvigatellar haqida o'ylamang. Shablonlarda qilish uchun sayt yanada qulayroq. Agar murakkablik o'sib, bir xil sahifada juda ko'p turli xil sharoitlar oshsa, navigatsiya menyusi maqomga qarab, navigatsiya menyusi va boshqalar. - XML \u200b\u200bva XSLT to'plam haqida o'ylash yaxshiroqdir.</p> <p>Misol: phpBB forumi. Unda, xohlaganingizcha dizaynni to'liq o'zgartirish mumkin emas, chunki dizayn elementlari andozalarda emas, balki PHP kodida. Kiritiladigan barcha turdagi shakllar, foydalanuvchi tomonidan kiritilgan foydalanuvchi va boshqalar uchun boshqaruv menyusi va boshqalar. - Ilova qilingan naqsh kabi emas, balki PHP kodi orqali sahifani joylashtiring. Ommabop echim har doim ham eng yaxshisidir.</p> <p>Dmitriy Koters PHPBBni o'rganish tajribasi haqida Sharh: Men shablon sinfini yozdim, ko'pchilik, g'ayrat bilan to'lib-toshgan, bu sinf uchun hamma narsani o'zgartira boshlayman. Ushbu sinf g'oyasi kod va dizaynni taqsimlashdir, ammo aksincha, phpBB mualliflari ularni iloji boricha aralashtirib yuborishadi.</p> <p>Ammo menimcha, hatto ushbu yondashuvni normal ravishda amalga oshirish bilan ham kod andozalarga ega bo'lgan fayllar juda ko'p bo'ladi. Yaqinda men sinf sinflarida, printsipial jihatdan php kodini ma'lumotlar va dizayndan ajratish mumkin emas degan xulosaga keldim. Ushbu dvigatelda saytning dizayni o'zgarishi bilan PHP skriptlarida qazish kerak bo'ladi va u dizayner bo'lmaydi, lekin siz.</p><p> <table border> <tr> <td colspan=2> <b>__Global__</b> <p> (Yashirin va avtomatik ravishda qo'shilgan)</td> </tr> <tr> <td><b>blok1 blok</b></td> <td> <table border> <tr> <td colspan=2><b>blok2.</b></td> </tr> <tr> <td><b>iNNERN1.</b></td> <td><b>iNTERN2.</b></td> </tr> </table> </td> </tr> </table> </p><p>Hujjatlar shuni ko'rsatadiki, shablonda ko'rsatilgan shablonda belgilashning hojati yo'qligi aytilgan. Sinf tushunadi.</p> <p>Ushbu sinf uchun hujjatda u Inder2 blok uchun sho''ba ekanligini biladi va unga bu haqda xabardor qilishning hojati yo'q. Ma'lumotni blokka kiritish uchun bunday kodni ekskulyatsiya qilish kerak deb topish kifoya:</p><p> <?php $tpl->sevaraly (...); $ Tll-\u003e parsecurrentblock (); ?\u003e</p><p>Blok1-da tarkibni amalga oshirish uchun siz buni amalga oshirishingiz kerak:</p><p> <?php $tpl->setcurrentblock ("inkern1"); $ Tll-\u003e smyorlik (...); $ Tll-\u003e parsecurrentblock (); $ Tll-\u003e smyorlik (...); $ Tll-\u003e parsecurrentblock (); $ Cll-\u003e tahlil qilish ("blok1"); ?\u003e</p><p>Natijada skript kodi quyidagicha ko'rinadi:</p><p> <?php $tpl = new HTML_Template_IT(); // загрузка шаблона или указание его через класс $tpl->lOGLANTAWATETFILEFILIShI (STRELE nomi, Booleune TunkNunkNountNountvallar, Boolean ekinpllocks]) "Global" o'zgaruvchilarni o'rnating, I.E. Blokga kiritilmagan o'zgaruvchilar (bolalar birligi) $ TPL-\u003e Sewarylene, aralash qiymati); // o'zgaruvchilarni belgilashning yana bir usuli - $ TPL-\u003e Sewaryate (Aske Varname \u003d\u003e aralash qiymat)); // Biz bir nechta blokdan foydalanamiz, hatto boshqa $ TPL-\u003e, hatto setcurentblock (satrli blokname); // Biz $ TPL-\u003e SETVARITE (CAYRAME (satr satr \u003d\u003e aralash qiymat) ni takrorlaymiz))); $ Tll-\u003e parsecurrentblock (); // Natijani oling yoki chop eting uni $ TPL-\u003e Show () $ TPL-\u003e oling (); ?\u003e</p><p>Kod unumdor va ravshanroq.</p> <p>Ammo ko'plab dasturchilar hali ham o'zlarining shablon sinflarini yozadilar. Ko'proq sodda, ammo ommaviy mavjud sinflarda mavjud bo'lmagan ba'zi funktsiyalarga ega bo'lish. Men o'zimning SQL so'rovlari natijalari kiritilgan mendagi o'z sinfimni yozdim, blokirovka va blokning dumi qo'shimchalarga (masalan, teglar <table> va</table>), agar natijada faqat SQL so'rovida satrlar bo'lsa, natijada paydo bo'ldi.</p> <p>XML ishlov berish funktsiyalari moduli php3-da paydo bo'ldi. Ushbu modul funktsiyalaridan foydalanib, siz o'zingizning XML-kod ishlov beruvchilarini yaratishingiz mumkin, ammo, ammo XML hujjatining to'g'riligini tekshirish mumkin emas.</p> <p><i>Qaysi XML nima va nima uchun kerakligi nazariyasiga kichik ekskursiya.</i></p> <p><i>XML tuzilgan ma'lumotlarni yozish usuli. "Tuzilgan ma'lumotlar" ostida, odatda, elektron pochta manzili, manzillar, konfiguratsiya parametrlari, moliyaviy operatsiyalar, texnik vositalar, texnik o'yinlar va boshqalar. XML qoidalar to'plamidir (shuningdek, ko'rsatmalar yoki shartnomalarni ko'rib chiqishingiz mumkin) Ma'lumot formatlarini ishlab chiqishga imkon beradigan matn formatlarini ishlab chiqishga imkoningiz.</i></p> <p>Tuzilishning sharhi.</p><p> <eshop> <!-- категории товаров --> <category id="3"> <title>Go'sht mahsulotlari Baliq kilogramm 100 Go'sht kilogramm 200 Chiqindilarni ishlab chiqarish Icra baliqlari kilogramm 10 Sabzavot mahsulotlari Kungaboqar narsa 50

Shunday qilib, XML-da siz tovarlar toifalarga bo'lingan oziq-ovqat do'konidagi tuzilgan ma'lumotlarni yozishingiz mumkin va toifalar bir-biriga bo'ysunishi mumkin. Albatta, ushbu ma'lumotlar boshqacha yozib olinishi mumkin, deying, yorliqlar bilan matnli matnni ajratuvchilar sifatida matnli matnlar (XML formatida ma'lumotlarni yozish paytida uni aniqlash kerak emas). XML bunday tuzilmani yozish uchun tayyor formatdir, unda siz faqat tugunlar (teglar) va uning qaysi qoidalarini yodlashingiz kerak (masalan, tovarlar toifadan tashqarida bo'lishi mumkin emas) yoki bu kategoriya darajasi uchdan bo'lmasligi mumkin). Keyingi:

XML dasturlash tili emas va siz uni ishlatish yoki o'rganish uchun dasturchi bo'lishingiz shart emas. XML kompyuterni ma'lumotlarni yaratish va o'qish vazifasini, ularning tuzilishining o'ziga xosligini ta'minlaydi. XML keng tarqalgan tillar dizaynining xatolaridan qochadi: u platformadan mustaqil ravishda xalqarolashtirish va mahalliylashtirishni qo'llab-quvvatlashni o'z ichiga oladi. XML Unicode bilan to'liq mos keladi.

PHP ishlab chiqaruvchilar ShAXS funktsiyalari bilan shaxsiy XML hujjati elementlarini ishlov berishni taklif qilishadi. PHP qo'llanmasidan misol:

"B", "urg'u berish" \u003d\u003e "Men", "literit" \u003d\u003e "tt"); // tegni boshlash uchun funktsiya (u chiqishni kompleks matn bo'lishi mumkin, ammo bu misolda u faqat tegishli yorliqda). Funktsiya Funktsiya ($ parsud, $ ism, $, ATSS) (agar ($ htmltag \u003d $ Map_array [$]))<$htmltag>";)" Yorliq funksiyasining tugashi uchun funktsiya ($ uyati, $ ism) ($ hutltag \u003d $ Map_array [Bosib chiqarish)";)" SMSDDATA (matn tuguni) funktsiyasi ($, $ Ma'lumot) funktsiyasi ($ ma'lumotno) funktsiyasi ($ ma'lumot;) $ XML_PARARERSER \u003d xml_pararer_cate (/) ishni ishlatishga ishonch hosil qilamiz $ mod_array xml_mparser_option ($ xml_parser, xml_parser_dl_mparser); xml_mm_pararer_dl_mparser_dafact_dl_parsercler ($ xml_pararer); //cl_parserce if ($ FP \u003d Fopen! ($ Fayl, r »))) (" XML inputsasini ochib bo'lmadi "); ($ XML_PARDER) ($ XML_PARSER, $ Ma'lumot) ($ $ FP))) ("Sprintf (" XML xatosi:% s ", XMM_MME_PAROR_CODE ($ XML_PARARE_COE))), XML_MM_PARARE_COES ($ XML_PARARE_COL)), XML_MPARARE_COLE ($ XML_PARARER);?

Ushbu misolni turli xil usulda qayta ishlanadigan yorliq nomlari va startelement funktsiyasida tegishli shartlar qo'shilishi bilan kengaytirilishi mumkin.

Kod juda dahshatli ko'rinadi. XML-da XML-dagi HTML-sahifalarda foydalanish uchun u deyarli yaroqsiz bo'lib, ba'zi joylarda, masalan, u qanday ishlashi to'g'risida. Albatta, siz konfiguratsiya fayllarini o'qib, yaratilgan massivlar o'qigan, ammo umumiy ish narxlarida Smarty kabi shablonlarning kuchli shakllaridan foydalanishingiz mumkin.

Ushbu loyiha bo'yicha ishlar 1999 yilda boshlangan, ishlab chiqaruvchilar jamoasi shablonlar namunalarini spetsifikatsiya qilishni boshlagan. Dastlabki nima qilish kerakligini aniqlash uchun, ishlab chiqaruvchilar C modulini yozishga harakat qilishdi, ammo oxirida ular sayt yaratish, arzon va tushunarli bo'lgan.

Endi Smarty PHP loyihalaridan biri bo'lib, uning veb-sayti smarty.php.net-dagi PHP serverida joylashgan.

Rasmiy ravishda aqlli - shablon sinfi. Aslida, uning funksionalligi belgilangan tartibda * shablondan yuqori.

Birinchidan, Smarty nafaqat shablonga o'zgaruvchilarni kiritishni, balki shablonning o'zida PHP kodini ham amalga oshiradi. Ikkinchidan, Smarty-da shablonlar PHP skriptlariga aylantiriladi va o'zgaruvchilarni matnga kiritish va mantiqiy tuzilmalarni amalga oshirish bo'yicha PHP-da PHP-da PHPning tarkibiga kiradi. Ushbu php skriptlari keshlash yoqilganda andozalarda quyidagi murojaatlar kiritilgan fayllarda saqlanadi. Naqshlar o'zgarganda, skriptlar yana hosil bo'ladi. Bunday keshlash skriptlarning ishini sezilarli darajada tezlashtiradi.

Shuningdek, Smarty IF-Mantiqiy dizaynlarni PHP kodiga aylantirgan shablonlarga o'rnatilgan. Shunga o'xshab, o'zgaruvchan modifikator deb ataladigan tuzilmalar qayta ishlanadi. Ular sizning asosiy skriptdan ba'zi funktsiyalarni o'chirishga imkon beradi, ularni shablon va ularning keshli PHP skriptlariga o'tkazing.

(* Sarlavhani katta harflar bilan yozing *)

($ Sarlavha | Yuqori),

(* Yuqoridagi 40 tagacha belgilarni kamaytiring, mavzusi: ($ mavzusi | kesish | 40: ... ... »)

Ushbu matn bunday kodga aylantiriladi:

_Run_MOD_Hahahler ("Yuqori", haqiqiy, $ bu -\u003e _ tll_varar ["Ism"])); !\u003e Mavzu:_Run_MOD_HHHHHHHHHUNL ("kesish", haqiqiy, $ bu -\u003e _ tpl_varar ["nomi"], 40, "..."); ?\u003e

$ Smarty.Now (joriy vaqt) kabi o'rnatilgan o'rnatilgan o'zgaruvchilar to'plami mavjud. Idilik rasm o'zgaruvchilarning qiymatlarini o'z ichiga olgan disklarning chiqarilish oynasi ishlab chiqarishni tugatadi, I / O filtrlar va plaginlarni qo'llab-quvvatlang.

Hamma narsa yaxshi bo'lar edi, o'lchami kamroq o'lchamda bo'ling. Endi (2.3.1 versiyasi) "Og'irlik" 144 kilobayt va AMD K6 266 MGZ ancha sekin ishlaydi. Smarty ishlab chiqaruvchilar Zenderni aks ettiruvchi yoki PHP tezlagichni ishlatishni tavsiya qiladilar.

DOM - Ayni paytda PHP-da hujjatlar shablonlari shablonlari. Men Modulni "XML: spetsifikatsiya va php-da DOM funktsiyalarini" deb ta'rifladim.

Oddiy operatsiyalarni amalga oshiradigan tasdiq va juda ko'p miqdordagi kodga qaramay, DOM XML katta istiqbollarga ega.

XML hujjatni tahrirlashda matn yondoshuvining asosiy noqulayligi (tabiiy ravishda) - siz XMLning o'ziga xos xususiyatlariga yoki oxirida nimaga ishonmaslik kerak.

Masalan, Nodga matnni kiriting oddiy vazifa. Biroq, XML hujjatida ISO jadvaliga kiritilmagan xizmat belgilari va belgilar XML subyektlariga aylantirilishi kerak (<) или в номера символов UTF-8 (&x0442;). В модуле DOM XML достаточно сконвертировать текст в UTF-8 и вызвать метод create_text_node.

Mening saytimda u hali ham eski dvigatel uchun ishlayapti, u matnli satrni yaratadi va ba'zan u hech qanday forma bo'lmagan hujjatlar bilan qiziqarli fokuslarni tashlaydi. Bundan tashqari, ob'ektlar funktsiya parametri sifatida uzatilishi mumkin va deb nomlangan usul nomi o'zgaruvchidir.

Va nihoyat, DOM XMLning asosiy afzalligi shundaki, PHP-da matnni qayta ishlash uchun ikkilik modul yo'q. Bu siz o'zingiz parser yozishingiz kerakligini anglatadi.

Ko'p miqdorda kodga kelsak, bu tabiiy. Axir, agar siz hujjatni matn orqali tahrir qilmoqchi bo'lsangiz, muntazam ifodalarni yozasiz, strelka funktsiyalaridan foydalaning. Agar siz XML konventsiyalariga amal qilsangiz, ushbu kod juda ko'p kerak.

Dom orqali hujjat bilan operatsiyalar shablonning dom klassini qurish, ya'ni shablonning dom sinfini qurish kerak.

Alohida shablonda siz saytga yoki uning bo'limlariga umumiy bo'lgan ma'lumotlar bilan dosh berishingiz mumkin. Qolgan narsa men aytib o'tgan ziyofatni qo'shishdir:

hujjat_element (); $ Bolaning \u003d $ ildiz1-\u003e Bola_nodes (); $ ildiz2 \u003d $ dom2-\u003e hujjat_element (); uchun ($ i \u003d 0; i $ i< sizeof($child); $i++) $root2->append_child ($ BATTA) -\u003e Clone_Node ()); ?\u003e

Sayt uchun siz hujjatlar uchun so'rovlar qayta yo'naltiriladigan oddiy skriptni amalga oshirishingiz mumkin. V.HtAccess quyidagilarni yozadi:

Agar bunday fayl u erda bo'lsa, faylni # / $ 1 / indeks.phpxhml -f # ni tekshirib ko'ring. Agar bunday faylni qayta yozing ^ (+) / $ / $ 1 /index.php # Ushbu qoida avvalgi qoidaga qayta yoziladi va boshqa # fayllar uchun ishlaydi, kompozer.php skriptga so'rov yuboriladi. Rewritecond% (hujjati_root) / $ 1.ppxml -f qayta yozildi ^ (+) \\. / +) Php $ /composer.php [l]

Bitiker.php skript so'raltirilganidek ismli ismli nomni ochadi, ammo phpxmp kengaytmasi bilan. Apache serveri Qayta ishlash qoidalari allaqachon ushbu faylning mavjudligini tekshirgan.

6.1 Hujjatlarni tekshirish

Bu uy qurilmalarini tekshirish vositalarini almashtirish yoki uni sezilarli ravishda terish yoki sezilarli ravishda terish kerak. Endi ma'lumotlar bazasini rad etish va fayllardagi ma'lumotlarni saqlash modaga aylandi.

Baza oddiy edi: siz qatorni olasiz va PHP-shablonlar kabi tsiklli satr (tsiklli yoki shablon sinfi) yoki SQL2XML ob'ektlari (yoki yana satr yordamida satrni olish). Fayl bilan ishlash qiyinroq, chunki agar u ma'lumotlarning yaxlitligini tekshirish maqsadga muvofiq bo'lsa.

Belgilashda ikkita yondashuv mavjud. Birinchi - ma'lumotlar yo'naltirilganligi (Ma'lumot-markaziy makon), ikkinchi - hujjatga yo'naltirilgan rejim (hujjatlashtirilgan markaziy marka).

Ma'lumotlarga yo'naltirilgan rejalarning misoli:

Va hokazo. FIA tomonidan tashkil etilgan poyga seriyasi. Racing avtomashinalaridan foydalaning. BTCC. Buyuk Britaniya avtomobil chempionati Ushbu poygadan tashqari, vanstika. http://btcc.co.uk Dtm. Deuchi Turenwagen ustalar.

Ierarxiyaning ikki darajasi - strarx + maydon (tabiiy ravishda, agar ular 3 yoki 4 bo'lsa, hech narsa sifat jihatidan o'zgarmaydi), umuman, SQL2XML-dan foydalanib, ma'lumotlar bazasidan so'rovlar bilan bir xil. Hujjatlarga yo'naltirilgan belgilarning misoli:

FIV 20 ga yaqin poyga, shu jumladan 2 ta avtomobil chempionati uyushtirilgan. Evropa chempionati Evropa chempionati (Va hokazo.) Umumiy sozlangan yo'l mashinalari, asosan BMW. Boshqa fia seriyali Britaniyalik sayohat mashinalari (BTCC.) shundan analogualdir, bu poygalar bundan mustasno. Shunisi emas, bular dunyodagi eng mashhur chempionat emas. Dtm. (Deuchi Turenwagen ustalar.), Nafaqat Germaniyada, balki eng mashhur sayohatchilar seriyasi.

Ushbu parametr erkin inson tili bilan yozilgan, ammo asro va sarlavhalar elementlaridagi ma'lumotlar bir xil bo'lib qoladi, ularni hujjatdan olish mumkin, ular xpat yoki xQuery so'rovlarini olish mumkin: Chempionat / chempionat / chempionlik Birinchi belgilash optsiyasi ma'lumotlar bazasi jadvalida taqdim etilishi mumkin. Bu masalani murakkablashtirish mumkin, masalan - hujjat parchasi:

Dtm. Deuchi Turenwagen ustalar. Eng mashhur nemis tomoshasi poyga seriyasi. Laurent Aiello. Bernd Shnayder. Marsel Foller. Jan alesiy. Kristian hijoblangan.

Ushbu hujjatdan kilogramm bo'lishdan to'xtamaydi. Yangi hujjat chap qo'shinni talab qilganda ulangan 2 stol sifatida tasvirlanishi mumkin.

Ikkinchi hujjat yanada murakkab tuzilishga ega va umuman u stolga oqa olmaydi.

Aytgancha, bu XML-dan XML ma'lumotlar bazasining asosiy farqi. XML-ma'lumotlar bazasi hujjat yo'naltirilgan belgisi bilan ishlaydi (va nafaqat natijalarga ko'ra XMLda chiqarilgan). Ma'lumot bazasi reytingi tintuv ma'lumotlar bazasida va chiqish uchun SQL2XML kabi yordam standartida saqlanishi mumkin.

Shunday qilib, hujjatlarni tasdiqlash bilan qaytish, oddiy satrni oddiy parser tomonidan DTD muvofiqligi yoki XML sxemasini tekshirish juda qiyin.

Yana bir misol - mening TXF sinfimdagi shakl belgisi:

0"/>

Men buni DTD sxemasi orqali tekshiraman. Mos keladigan hujjat sxemasini tekshiring - Standart DOM XML kutubxonasi funktsiyasi.

Umumiy ma'lumot almashish formatlari uchun, masalan, RSS, texnikalar va DTD sxemalari (XML sxemas) mavjud. O'z RSSS-ni yozish bilan bezovta qilmaslik uchun shunchaki hujjatga sxemani qo'shishingiz va qabul qilishni tekshirishingiz mumkin. Keyin hujjatdan kerakli tugunlarni get_ontent yoki xpath iboralari orqali oling.

6.2 lyrik chekinish

Zudlik bilan ketma-ket yozishni oxirgi marta tugatdi, menga so'nggi tomoshabinni so'nggi tomoshabin - "PHP shablonlari choynaklar uchun" deb ataldi.

XML, XHTML "va boshqa X kabi so'zlarni unutishga chaqiradi ...", "Qilding, munosib aqlli zarba beradi va Okkaning ustara" ning aqlli xo'riga kiradi.

Yomon ustara! Bannerga ko'tarildi, ular buni ichingiz mumkin bo'lgan hamma joyda qilishadi, qichqirishadi va raqiblarga shikast etkazishga harakat qilishadi.

Panjara bilan do'zaxga! Jahannamga "zaruratlardan ortiqcha mohiyatini ishlab chiqarmaslik" ahmoqdir. Buni odamlarga eslatib turish uchun bu juda barkamol haqiqatdir va boshqalarni baholash uchun u umuman mos emas. Har bir inson uchun "zaruratnoma" soni boshqacha. Saytning mijozlari: "Nega men skriptlaringizga kerak bo'lsa, uni oddiy HTML-da joylashtiring, shunda biz keyinchalik o'tib ketishimiz uchun, biz keyinchalik old tomoni bilan o'qing! Okkam haqida o'qing.

Men buni dasturlashda yangi texnologiyalardan foydalanish nega buning uchun buning asosiy sababi, bu o'lchov effekti. Eski maqolada yozganimdek, "Saytning hajmi o'sish bilan shablonlarda cho'kib ketasiz." Va mening maqolalarimda men unga aniq tushib qoldim - aytadi, iltimos, ayyorligingiz bilan sindiring va HTML bilan aralashtirilgan kod, siz juda ko'p dastur kodini qilishingiz kerak bo'lganda tomog'ini aylantiradi.

Aslida, yana bir sabab bor. Bu har bir aniq odamning mahorati. XML, XSLT va XPathni kim biladi yoki ushbu muhitdagi vazifalarga tezda tezda tezroq XMT texnologiyalari bo'yicha loyihani amalga oshirishni biladi. U sodda va oson bo'ladi, chunki u qanchalik yaxshi biladi. Kim yomon bilmaydi yoki bilmaydi - "keng tarqalgan" yo'llarini qiladi.

XML Technologiesda faqat shablon sinflari yoki aralash php & HTML-ga qaraganda unumli bo'lgan savol tug'iladi. Ha, bo'ladi. Men allegorik taqqoslashni beraman.

Siz boshlangan futbolchilar va "Lamers" voleybol o'ynashlarini ko'rganmisiz? "Klokov" jamoalari - bu to'pni boshqa tomondan tashlab yuborishgan, shunda raqib to'pni tushirishi uchun. Hujumchi ish tashlashni qanday qilishni bilmaydi va taniqli usta bilan boshqariladi, ular shunchaki o'ynashadi. Tajribali o'yinchi Kulka to'pni kesib o'tishdan ancha yaxshi. Biroq, u yaxshi hujumchini tugatsa, yanada katta natijalarga erishadi.




Hali ham savollar mavjud yoki tushunarsiz narsamiz - o'zimizga xush kelibsiz
Sizga maqola yoqdimi? Do'stlar bilan bo'lishish uchun: