Internet Derazalar Android
Kengaytirmoq

PHP-da jurnallarni o'rnatish. Jurnal Faylga tashrif buyuruvchilarga tashrif buyuruvchilar PHP

Atrofdagi saytlarda xatolar foydalanuvchiga eng kutilmagan joylarda brauzerda ko'rsatilganida ko'rish g'alati. Nega ular paydo bo'ladi - bu alohida suhbat. Ammo nega ular olinmoqda? Axir, xatolar matni - bu qarz uchun ma'lumotdir va mijoz uchun emas, balki ishlab chiqaruvchiga mo'ljallangan.

Bundan tashqari, bu xizmat ma'lumotlari, bu odatda yovuz xakerlarga saytni buzishga yordam beradi. Klassik misol sifatida, siz xatolik dasturini berishingiz mumkin. "ID \u003d ..." satr "0 yoki 1\u003e 0" tugmachasini almashtiramiz. So'rov butun stol bo'ylab o'tkaziladi. Agar olib tashlash to'g'risida so'rov bo'lsa, unda ... tushunasiz, kulgili \u003d). Shuning uchun men har doim o'zgaruvchilarni tirnoqlarda tuzaman. Har ehtimolga qarshi...

Ammo men olib ketdim. Bugun bu haqda emas. Bugun biz mijozlarning barcha xabarlarini veb-ustaga saqlash orqali qanday qilib xotira uchun saqlab qolishingiz haqida gaplashamiz.

Keling, boshlaylik, ehtimol, ehtimol, PNP xatolarining qisqacha ko'rinishi bilan boshlaymiz.

Jadval 1. PHP-da xatolar tavsifi (Asl ro'yxat)
Sonli
qiymati
Doimiy Tavsif Ushlangan / yo'q
1 E_Error. Halokatli xatolar. Masalan, xotiraga kirishda xato. Skriptning ijrosi uzilib qoladi. emas
2 E_warning Ogohlantirishlar (halokatli xatolar emas). Skriptning ijrosi to'xtatilmaydi. ha
4 E_parus. Sintaksis tahlili paytida xatolar. Parer yaratildi. emas
8 E_notic Izohlar (ogohlantirishlarga qaraganda unchalik jiddiy xato). Jiddiy xatoga olib keladigan vaziyatni ko'rsating, ammo skript normal ishlashi paytida ham ro'y berishi mumkin. ha
16 E_Core_Error PRUni yuklab olish paytida xatolar. Analog e_Error PNP yadrosi tomonidan yaratiladi. emas
32 E_Core_warning E_WARning yuklab olish paytida ogohlantirishlar PNP yadrosi tomonidan yaratiladi. emas
64 E_Compeil_Error. Kod tuzish paytida halokatli xatolar. Analog E_Error Zenda dvigateli tomonidan yaratiladi. emas
128 E_Compil_arning Kod tuzish paytida ogohlantirishlar. Analog e_warning Zandov dvigateli tomonidan yaratiladi. emas
256 E_user_Error. Maxsus xato. ha
512 E_USER_WARN. Maxsus ogohlantirish. ha
1024 E_user_notice Custom eslatma ha

Biz sizni ushlab turishimiz mumkin bo'lgan xatolarga qiziqamiz. Bularga quyidagilar kiradi: E_NOTING, E_NOTICE va E_USER_ *. Qolgan xatolar, shuningdek, ular PNP yadrolarini yuklash tugashidan oldin yoki sintaktik tahlil va kompilyatsiyalash bosqichida sodir bo'lganligi sababli, ular uchun amalga oshishi mumkinligi sababli, ular uchun ular sintaktik tahlil va puli kodni tuzish , shuning uchun ularning xulosasi shunchaki o'chirish kerak:

ini_set ("displey_rrors", 0);

Ammo men sizning skriptlarimiz etarlicha o'zgartirilmagan, shuning uchun ular hech narsa yo'qotmasliklari uchun, biz hech narsa yo'qotmasligimiz kerak deb o'ylayman.

Odatiy bo'lib, PNP-da xato darajasi E_all & ~ E_NOTICE (yoki 2039 raqamli shaklda) (yoki 2039 raqamli shaklda), bu biz sharhlarning quloqlarini o'tkazib yuborishni anglatadi, ammo biz boshqa barcha xatolar haqida xabar qilamiz.

Shuning uchun E_all-dagi o'zgarishlar darajasini o'zgartiring:

Xato_report (e_all);

Endi ishlov berishda amalga oshiriladigan xatolar bilan shug'ullanadigan xatolarni amalga oshiring va uning vazifasini bajaring:

Set_rror_mandler ("user_log");

Ushbu xususiyatni ko'proq ko'rib chiqing. U 5 parametr bilan uzatiladi:

  • xato kodi
  • xato matni
  • xatolik yuz bergan faylning nomi
  • faylda satr.
  • o'zgaruvchilar qatorlari

Bu xususiyatni qaytarish shart emas. Keyinchalik jurnal xatosini ko'rib chiqmoqchi bo'lganimiz sababli, masalan, faylga jurnalni yozib olishingiz kerak, shunda biz u bilan qulay ishlaymiz.

\u003d (Log_file_maxze * 1024)) (// Agar log_rotate o'rnatilgan bo'lsa, eski fayllarni pastga tushiring va eski log_rotate \u003d ni qo'ying - toza log_rotate \u003d \u003d\u003d Rost) ($ i \u003d 1; // Biz eski jurnallarni (log_file_name) ko'rib chiqamiz (log_file_name) ($ i)) ($ i ++;) $ burilishlar 1 raqamini ko'paytiradi ($ i\u003e 0) (qayd qilinadi (log_file_name, qayd qilinadi) (log_file_name, log_file_name. 1.. 1 "); Nif (log_file_name) (log_file_name) (log_file_name) ni (log_file_name) yozing; (log_file_name););) * Agar yo'q bo'lsa, biz unga yoza olamizmi? (Log_file_name) (log_file_name) (log_file_name) (log_file_name)) T Lew faylini yarating ";) A_FILTY (LOG_FILE_NAME)) (Qaytish" D jurnal fayliga yozish mumkin emas ";) Funktsiyaga e'tibor bering biz yozadigan jurnalni yozamiz. xato_log ($ Err_str, 3, log_file_name); )?\u003e.

Albatta, saqlashni bunday maqsadlar uchun mantiqiy foydalanish mumkin, ammo baribir, xatolar, bu asosiy, shuning uchun men bunga ishonmasdim.

Aslida, bu hammasi. Qolgani, menimcha, bu siz uchun qiyin bo'lmaydi, ayniqsa fayl () funktsiyalaridan foydalansangiz; & portlash (); . Agar siz hali ham tuzsangiz, siz [ushbu kod] dan foydalanishingiz mumkin.

"Nega men ushbu vaziyatda mantiqiy ko'rinishga ega bo'lgan CSV-dan foydalanmagan" CSV-dan foydalanmaganman? CSV-ni tarash uchun. Ha, va men jurnalni Excel-ga ko'rib chiqmayman.

Ushbu mavzu bo'yicha ko'proq fikrlar:

  • agar faylga ega bo'lish va uni arxivga burish uchun GZ logingiz eskirgan bo'lsa;
  • xuddi shu, ammo paket bilan pochta orqali;
  • muvaffaqiyatli xatolar yuz berganda - sotish xatlari (funktsiya uchun qo'llanmadan misolga qarang)

Har bir realda PHP. Vaqti-vaqti bilan arizalar xatolar va istisnolar, eslatmalar ogohlantirishlari, xabarlari mavjud. Agar biz ushbu ma'lumotni (ro'yxatga olish) yozib qo'ymaslikka harakat qilmasak, unda ushbu xatolar va istisnolar qo'llanilishning qaysi qismida yuzaga kelsa, biz ularni hal qila olmaymiz. Bundan tashqari, foydalanuvchining tizimiga kirish va undan chiqishi kabi, voqealarni qayd etish, aksincha, tadbirlarni qayd etish kerak bo'lganda bunday holatlar mavjud.

Ichida PHP allaqachon jurnalda zarur vositalar mavjud: Funktsiya xato_log () - tizim jurnaliga xabar yuborish, xususiyat set_rror_mandler (), Ogohlantirish va xatolarni ushlab turish. Ushbu funktsiyalardan foydalanuvchi xatosi boshqaruvi uchun foydalanilishi mumkin, kod ishlab chiqaruvchiga o'z-o'zini boshqarish mantiqiy mantiqiy va xatolarni filtrlashni amalga oshirish imkoniyati berilishi mumkin.

Biroq, past darajadagi kirish kodning tez-tez takrorlanishiga olib keladi va bundan ham muhimi, bunday kod xatolarga ko'proq moyil. Shuning uchun tayyor tarkibiy qismlar dasturchi, dasturchi, yaxshi sinovdan o'tgan va "jangovar" sharoitda isbotlangan.

Bunday komponentlar quyidagilarni anglatadi zend-jurnal komponenti dan freeRenki Zend.. Tarkibiy qism zend-jurnal. U ko'p sonli qo'llarning mehribon va ustasi sifatida ko'p sonli kirishni va usta sifatida ishlatilishi mumkin. Bu turli xil qaydlar formatlari va ma'lumotlar bazasi navlari (fayllar, ma'lumotlar bazalari) ni qo'llab-quvvatlaydi, shuningdek, u ishlab chiqilgan xabarlarni filtrlash tizimiga ega va ko'p narsa. Shuningdek zend-jurnal. Mos keladigan S. PSR-3. Kirish Standard. Shunga o'xshash tarzda o'rnatildi:

Bastakor zendframine / zend-jurnalni talab qiladi

U quyidagicha ishlatiladi (masalan, indeks.php Fayl loyihaning ildizida ishlatilgan):

"Sotuvchi / avtouload.php" kerak;

Zendend \\ log \\ loggerda foydalaning;
Zender \\ log \\ yozuvchini \\ oqimidan foydalaning;

$ Logger \u003d Yangi ro'yxatdan o'ting;

// konsolga xatolarni yuboring
$ Yozuvchi \u003d Yangi STREAM ("PHP: // OoupTut");

$ Logger -\u003e Adverwer ($ Yozuvchi);
$ Logger -\u003e Kirish: INFO, "Ba'zi ma'lumotlar");

Kodning natijasi yuqori:

2017-09-23T10: 40: 34 + 03: 00 info (6): ba'zi ma'lumotlar

Yakuniy satrda tadbir vaqti, ustuvorlik va xabarni o'z ichiga oladi. Ko'rsatilgan xabarning formati, agar kerak bo'lsa, bu usuldan foydalanish kerak bo'lsa o'zgartiriladi sessifter (). Odatiy bo'lib, jurnal satri quyidagi shablon tomonidan tavsiflanadi:

%% TimarestName% (% ustuvor%): %% %%%% %%%%

  1. % vaqtestomp% - bu vaqt
  2. % Ustuvorlik darajasi% - matn yorlig'i ustuvorligi
  3. % Ustuvor% - raqamlar yorlig'ining ustuvorligi
  4. % Xabar% - xabar
  5. % Qo'shimcha% - qo'shimcha ma'lumot uchun ixtiyoriy qiymati

Agar siz xabar formatini o'zgartirmoqchi bo'lsangiz, bu quyidagicha amalga oshiriladi:

$ Format \u003d yangi zend \\ log \\ logratter \\ oddiy ("% xabar% xabar%". Php_eol);
$ Yozuvchi -\u003e SEFORTER ($ formatla);

Tarkibiy qism zend-jurnal. Shuningdek, u xatolarni yoki PHP tarjimonining istisnolaridan istisno qilish uchun foydalanish mumkin. Buning uchun, logger sinfida hali ham ikkita statik usul mavjud: Yurish :: RejisererrrorhHandler ($ logger) - xatolarni ushlash va Yurish :: Ro'yxatdan o'tdilarExceHandler ($ logger) - istisnolarni ushlash.

Zendend \\ log \\ loggerda foydalaning;
Zendend \\ log \\ yozuvchidan foydalaning;

$ Logger \u003d Yangi ro'yxatdan o'ting;
$ Yozuvchi \u003d Yangi yozuvchi \\ oqimi (__ dir__). "/Test.log");
$ Logger-\u003e qo'shimchalar yozuvchi ($ Yozuvchi);

// qayd qilish xatolari
ENGGTGE :: Ro'yxatdan o'tish: RejewerErrorhander ($ logger);

// Talabalardan istisnolar
Yurish :: Ro'yxatdan o'tishixcceHandler ($ logger);

Yuqorida aytib o'tilganidek, zend-jurnal. Bizga kirish uchun xabarlarni filtrlash imkoniyati, i.e. Jurnalda xabar yozishdan oldin, bu bizning mezonlarimizni qondiradimi va agar ha bo'lsa, yozing.

Mana bir misol:

$ Filtr \u003d Yangi Zend \\ log \\ filtr \\ ustuvor (Lourcer :: CRIP);

// yozuvchi qo'shimcha usuli
$ Yozuvchi -\u003e AddFilter ($ filter);

Ushbu misolda biz faqat birinchi darajali tanqidiy jihatdan kam yoki teng bo'lgan xabarlarga kiramiz ( Yurish :: Kichkina.).

Sinfda belgilangan ustuvorliklarning to'liq ro'yxati Zend \\ log \\ loggerda:

Konstuta \u003d 0; // tasodifan: tizim foydalanish uchun yaroqsiz
Konstqa ishonch \u003d 1; // tashvish: shoshilinch ravishda harakat qilish kerak
Conce Crit \u003d 2; // muhim vaziyat
dost xato \u003d 3; // xato
Const Warn \u003d 4; // ogohlantirish
Konversen \u003d 5; // Diqqat
Konfo \u003d 6; // Ma `lumot
Konstans disk \u003d 7; // buzg'uni

Shuningdek, biz oddiy iboralar, vaqtinchalik yorliqlar va boshqalarga asoslangan xabarlarni filtrlashimiz mumkin. Shunday qilib, pHP-ga kiring. - Bu rivojlanayotganda muhim va ba'zan kerakli narsa veb-ilovalar.

Internetda saytingizdagi buxgalteriya xizmatining buxgalteriya xizmatining xizmatlarini taqdim etadigan ko'plab xizmatlar mavjud. Ushbu xizmatlar to'lov ham, bepul ham ta'minlanadi. Masalan, siz Liveinalstetni olib kelishingiz mumkin. Ushbu xizmat Internetda juda keng va deyarli har bir sayt o'z xizmatlaridan foydalanadi. Egasi o'z saytini ziyorat qilish to'g'risida batafsil statistikaga ega.

Hech qanday tortishuv yo'q! Ushbu xizmatlar saytning ishtirokini va foydalanuvchi xatti-harakatlarini yanada o'rganishni hisobga olgan holda ajralmasdir. Ammo ushbu maqolada men serverda log fayl jurnal faylini qanday qilishni aytib bermoqchiman.

Jurnal fayllari tashriflari

Ushbu jurnal fayli tashrif buyuruvchilarga tashrif buyuruvchilar tomonidan tashrif va qarashlarni hisobga olish uchun juda foydali bo'ladi. Jurnal faylini yaratish uchun PHP-da yozilgan skriptdan foydalaning. Script saytni tushunish va o'rnatishda juda oddiy.

Jurnal faylini yaratish uchun php skript

Skript saytning aniq vaqtini qayd etadi, tashrif buyurgan brauzerini va eng muhimi - bu mehmonning qaerdan kelganligini aniqlaydi. Kirish jurnal fayli har safar sayt sahifasida ko'rsatilganda paydo bo'ladi. Ya'ni, sayt egasi, ma'lum bir brauzerdan foydalanib, ma'lum bir iP-saytga tashrif buyurgan joy va vaqtga tegishli bo'lgan sayt sahifasiga tashrif buyurgan joy jurnal faylida ko'rish mumkin.

Ma'lumotlar yozish yozuvini qayd yozuvi jurnal faylida

Skriptni o'rnatish

Shablonda yoki tashqi foydalanuvchilar.php faylida skriptni saqlang. Ssenariyni sahifaga kiritish uchun quyidagi koddan foydalaning.

PHP-ga kirish sizning veb-dasturingiz / sayt / PHP skriptingiz va qanday qilib ko'rsatilgan narsalarning qaysi turdagi xatolarni aytib beradi.

Ilovadan xatolarni olishning asosiy usuli bor:

  1. Ushbu xatolarning chiqishi to'g'ridan-to'g'ri ekranga chiqadi
  2. Ushbu xatolarni maxsus jurnal faylida yozib oling
  3. yoki shu zahotiyoq ikkalasi ham: Ekranda ushbu xatolarni ishlab chiqarish va ularni maxsus jurnal fayliga yozish

Qoida tariqasida, ishlab chiqilganda (mahalliy muhitda) to'g'ridan-to'g'ri ekranga o'rnatiladi, shunda ular osonroq va tezroq qo'lga kiritilgan va ular tezda (ishlab chiqarishda) xatolar mavjud emas Umuman olganda (foydalanuvchi uchun foydasiz ma'lumotlar) va ular haqidagi barcha ma'lumotlar ishlab chiqaruvchi muntazam ravishda tekshirib turadigan jurnal fayliga yozilgan.

Xatolarni qayd qilish uchun sozlash

  1. xato_reporting - Bu asosiy parametr. Ushbu xato xabarlari qanday ko'rinishda ko'rsatiladigan / yozish uchun javob beradi. Men ishonaman, undan boshqa variant mavjud:
    • -1 (yoki e_all) - barcha xatolar haqida xabar berdi;
    • 0 - xato turlari haqida xabar berilmagan

    Men faqat -1 (yoki e_all) dan foydalanishni tavsiya qilaman.
    Chunki Ilovada hech qanday xato bo'lmasligi kerak. Ushbu parametr fpp.ini-dagi konfiguratsiya faylini PHP.ini yoki to'g'ridan-to'g'ri PHP yozuvida funktsiyani chaqirishda o'rnatilishi mumkin xato_reporting:

    Xato_report (-1); Xato_report (e_all);

    Aytgancha, bu funktsiya shaklida PHP tilidagi yagona variant. Boshqa barcha variantlarni faqat PHP.ini konfiguratsiyasini tahrirlash yoki funktsiyalar qo'ng'irog'ini ishlatish mumkin iNI_Set () Unga mos ravishda, kerakli parametr va qiymat.

  2. displey_rettors. - Ushbu parametr aslida ro'y bergandan keyin ekrandagi xatolar namoyon bo'lishi uchun javobgardir. Ushbu parametr 0 yoki 1 yoki OFF bo'lishi mumkin. Ular. Yoki ekranda xatolarni ko'rsating yoki yo'q.
  3. displey_Statarup_Errors. - Ushbu parametr PHP boshlangan xatolarni namoyish qilish uchun javobgardir. Masalan, konfiguratsiya faylida sintaksis xatosi bo'lsa, u haqida ma'lumot ko'rsatiladi. Ushbu parametr 0 yoki 1 yoki OFF bo'lishi mumkin.
  4. log_renderlar. - Ushbu ko'rsatma xato xabarlarini jurnal faylida qayd etish uchun javobgardir. Ushbu parametr 0 yoki 1 yoki OFF bo'lishi mumkin. Ular. Kirishdagi xatolarni yozib qo'ying yoki yo'q.
  5. xato_log. - Ushbu parametrlar ushbu ilova qilingan barcha xatolar bo'lgan barcha hujjatlarni (jurnal fayliga) yo'nalishi uchun javobgardir
  6. hTML_ERRORLAR. - Xuddi shu variant dastur uchun xato uchun javob beradi. Agar u 1 yoki undan yuqori bo'lsa, xato HTML, I.E.-yordamida ko'rsatiladi. Xatolikning kelib chiqishi kuzatiladi va hamma narsa juda mazmunli va rang-barang bo'lib qoladi. Agar ushbu sozlamaning qiymati 0 yoki o'chirilgan bo'lsa, xatolar oddiy son sifatida odatiy matn sifatida ko'rsatiladi.

1. Ekranda xatolarni ko'rsatadigan sozlamalar




INI_Set ("HTML_ERORLAR", 1);
Ini_set ("log_rrorlar", 0);

2. Jurnal faylida xatolarni yozish uchun sozlamalar

Xato_report (-1); // Ini_set ("xato_report", -1);
ini_set ("displey_rrors", 0);
INI_Set ("Displey_StatRupup_Errors", 0);
ini_set ("log_reditlar", 1);

3. Bir vaqtning o'zida xatolarni aks ettirish va ularni jurnal fayliga yozing

Xato_report (-1); // Ini_set ("xato_report", -1);
ini_set ("displey_rrors", 1);
Ini_set ("displey_startup_Errors", 1);
ini_set ("log_reditlar", 1);
INI_Set ("HTML_ERORLAR", 1);
INI_Set ("xato_log", "/var/log/phpp/rror.log");

Shuningdek, ushbu variantlar Php.ini konfiguratsiya faylida yoki virtual xostingiz faylida o'rnatilishi mumkin.