Osnove upotrebe. Izveštaji, štampanje u programu Ispravan izveštaj pomoći php

29. decembar 2012. u 22:01
  • Microsoft SQL Server

Nastavljamo sa razmatranjem korisnih savjeta za početnike prilikom kreiranja izvještaja u Microsoft Reporting Services.
Početak možete pronaći ovdje:
Za zainteresovane kliknite ispod...

0) Kako postaviti nekoliko kontrola u ćeliju tabele?
Često postoji potreba za postavljanjem nekoliko kontrola u jednu ćeliju tabele. Ako jednostavno prevučete kontrolu u ćeliju, ona će je u potpunosti ispuniti. Kontrola koja se zove Rectangle pomaže da se izađe iz ove situacije.

Rectangle je analog Panel kontrole koja se koristi u WinForms-u; to je neka vrsta platforme za postavljanje kontrola. Kada se postavi u ćeliju, pravougaonik ispunjava cijelu ćeliju tabele stvarajući “platformu” za postavljanje drugih kontrola.

1) Podesite podrazumevani jezik izveštaja
Prilikom kreiranja izvještaja pokušajte deklarirati jezik izvještaja (Svojstva izvještaja - Jezik).

Ovo je vrlo korisno ako radite sa stranim klijentom čije se regionalne postavke razlikuju od vaših. Ako ne znate koje postavke vaš klijent koristi, tada je moguće specificirati Expression sa sljedećim sadržajem:
=Korisnik!Jezik
Na taj način ćete izbjeći nepravilnosti u formatiranju brojčanih vrijednosti, datuma, vremena, valuta i sl. koje klijent očekuje.
2) Konkatenacija nizova
Ponekad postoji potreba da se vrednost polja iz baze podataka „ubaci“ u statički tekst izveštaja, smešten, na primer, u texbox. Drugim riječima, trebate dodati redove teksta u 1 red. SSRS obezbeđuje operand “&” za ovu svrhu.
Pretpostavimo da u texboxu imamo statički tekst „Zdravo, uv. Ivane Ivanoviču…“. Trebamo zamijeniti Ivana Ivanoviča punim imenom iz baze podataka, iz polja fio. Da biste to uradili, kliknite desnim tasterom miša na tekstualni okvir, pozovite kontekstni meni, izaberite svojstvo izraza texbox-a i promenite tekst na sledeći način:
=” Zdravo, uv. “&Polja!fio.Vrijednost&”…”
upd: Kao što je uvaženi predložio u komentaru, ispravniji način za spajanje nizova je korištenje čuvara mjesta.
Jednostavan je za korištenje: u texboxu morate postaviti kursor na mjesto gdje namjeravate umetnuti vrijednost iz polja baze podataka. Kliknite desnim tasterom miša da otvorite kontekstni meni i izaberite "Kreiraj čuvar mesta..."

Postavite vrijednost Label (ova vrijednost će biti vidljiva u tekstu; ako ne navedete vrijednost za polje Label, koristit će se naziv polja iz baze podataka) i Vrijednost (u našem slučaju ovo je polje iz baza podataka)

Upotreba čuvara mjesta pruža dodatne prednosti:
1) Tekst koji se nalazi u kontroli je vidljiv (u načinu koji sam opisao korisnik vidi samo tekst <>, što zbunjuje osobu koja prvi put vidi šifru izvještaja i gubi vrijeme tražeći željeni izraz.)
2) Rezervoar vam omogućava da formatirate polje (postavite format podataka, promenite font, boju, poravnanje, itd.) bez promene formatiranja glavnog teksta.

Razlika je očigledna:

3) Načini formatiranja numeričkih podataka
SSRS nudi nekoliko opcija za formatiranje podataka. Najjednostavniji način za formatiranje je specificiranje formata (svojstvo Format) u svojstvima kontrole.

Ova metoda ima 2 mana:
1) kontrola sadrži, pored podataka koji treba da budu formatirani, dodatni tekst.
2) prilikom izvoza izvještaja u CML
Ovaj problem se može riješiti pozivanjem posebnih metoda. Pogledajmo primjer:
Tekstualni okvir sadrži sljedeći tekst: “Poštovani kupče, stanje na vašem računu je: ” & Fields!UserBalance.Value & “ rub.” .
Ako ne formatirate, pod uslovom da je vrijednost Fields!UserBalance.Value 1005.35, može se prikazati korisniku kao 1005.350000000000. Da biste izbjegli takav incident, potrebno je koristiti metodu Format ili FormatNumber.
Primjer upotrebe: “Dragi kupče, stanje na vašem računu je ” & Format(Fields!UserBalance.Value,”#,##0.00”) & “ rub.”
“Dragi klijente, stanje na vašem računu je “ & FormaNumber(Fields!UserBalance.Value,2) & “ rub.”
Kada koristite Format, morate koristiti masku za formatiranje; kada koristite FormaNumber, dovoljno je navesti broj decimalnih mjesta.
Napomena: metoda Format je također primjenjiva za formatiranje datuma, vremena, novca itd.

4) Izvezite izvještaj u XML format, prilagodite polja
SSRS vam omogućava da izvezete izvještaj u različite formate, jedan od njih je CML. Svaka kontrola izvještaja ima 3 svojstva koja su odgovorna za ponašanje prilikom izvoza u CML.

Pogledajmo ih izbliza:
DataElementName– odgovoran je za naziv elementa u HML-u, zadana vrijednost nije ispunjena. Ako ne izvršite ovaj element, tada će ime u CML-u odgovarati imenu kontrole.
DataElementOutput– svojstvo je odgovorno za to da li će element biti izvezen u XML ili ne. Vrijednosti koje se mogu podesiti:
Auto(podrazumevana vrijednost) – element će biti izvezen ako ima vrijednost; ako je vrijednost null, onda neće biti izvezen.
Izlaz– element se uvijek izvozi.
NoOutput– element se ne izvozi u HML
DataElementStyle– odgovoran je za stil elementa u HML-u (bilo da je u pitanju element ili atribut)
Vrijednosti koje se mogu koristiti:
Auto(podrazumevana vrednost) – zavisno od kontrole, biće izvezena kao element (čvor) ili atribut (atribut). U stvari, samo texbox se izvozi kao atribut po defaultu, ostali elementi se izvoze kao čvorovi.
Atribut– vrijednost će biti predstavljena kao atribut
Element– vrijednost će biti predstavljena kao element (čvor)
Važna karakteristika: svojstvo Hidden se ne primjenjuje na izvoz u CML. Stoga, ako u CML-u namjeravate da izvezete element koji je prikazan ili ne na osnovu uslova, onda se ovaj uslov mora prenijeti u kontrolu Expression. Primjer: tekstualni okvir sadrži tekst koji se prikazuje samo kada je uvjet polja = 1. Tada će izraz izgledati ovako:
=IIF(Polja!Uslov.Vrijednost = 1, “Neki tekst”,””)

To je sve za danas, nastavlja se.

Najveća funkcionalnost dostupna je kada se AI-BOLIT skener pokreće u načinu komandne linije. Ovo se može uraditi kako pod Windows/Unix/Mac OS X, tako i direktno na hostingu, ako imate pristup preko SSH-a i hosting ne ograničava mnogo potrošene resurse procesora.

Imajte na umu da je za pokretanje skenera potrebna konzolna verzija PHP 5.3 i novije. U verziji 5.2 pojavit će se greška "Parse error: sintaksička greška, neočekivani T_STRING, očekujući T_OLD_FUNCTION ili T_FUNCTION ili T_VAR ili ")" u /home/HHH/ai-bolit.php na liniji...". Provjerite trenutnu verziju pomoću php -v

Pomoć s parametrima komandne linije AI-BOLIT skenera

Pokaži pomoć

php ai-bolit.php --help

php ai-bolit.php --skip=jpg,png,gif,jpeg,JPG,PNG,GIF,bmp,xml,zip,rar,css,avi,mov

Skenirajte samo određene ekstenzije

php ai-bolit.php --scan=php,php5,pht,phtml,pl,cgi,htaccess,suspected,tpl

Pripremite karantenski fajl za slanje stručnjacima za sigurnost. Kreiraće se arhiva AI-QUARANTINE-XXXX.zip sa lozinkom.

php ai-bolit.php --quarantine

Pokrenite skener u "paranoidnom" načinu (preporučuje se da dobijete najdetaljniji izvještaj)

php ai-bolit.php --mode=2

php ai-bolit.php --mode=1

Provjerite ima li u jednoj datoteci "pms.db" zlonamjernog koda

php ai-bolit.php -jpms.db

Pokrenite skener sa veličinom memorije od 512Mb

php ai-bolit.php --memory=512M

Postavite maksimalnu veličinu skenirane datoteke na 900Kb

php ai-bolit.php --size=900K

Pauzirajte 500 ms između datoteka prilikom skeniranja (da biste smanjili opterećenje)

php ai-bolit.php --delay=500

Pošaljite izvještaj o skeniranju putem e-pošte [email protected]

php ai-bolit.php [email protected]

Napravite izvještaj u datoteci /home/scanned/report_site1.html

php ai-bolit.php --report=/home/scanned/report_site1.html

Skenirajte direktorij /home/s/site1/public_html/ (tamo će biti kreiran zadani izvještaj ako opcija --report=report_file nije navedena)

php ai-bolit.php --path=/home/s/site1/public_html/

Izvršite naredbu kada je skeniranje završeno.

php ai-bolit.php --cmd="~/postprocess.sh"

Dobijte izvještaj u običnom tekstu s nazivom site1.txt

php ai-bolit.php -lsite1.txt

Možete kombinovati pozive, npr.

php ai-bolit.php --size=300K --path=/home/s/site1/public_html/ --mode=2 --scan=php,phtml,pht,php5,pl,cgi,suspected

Kombinovanjem poziva AI-BOLIT skenera sa drugim Unix komandama, možete izvesti, na primer, grupno skeniranje sajtova. Ispod je primjer provjere nekoliko web lokacija koje se nalaze u okviru naloga. Na primjer, ako se stranice nalaze unutar direktorija /var/www/user1/data/www, tada će naredba za pokretanje skenera biti

pronađi /var/www/user1/data/www -maxdepth 1 -type d -exec php ai-bolit.php --path=() --mode=2 \;

Dodavanjem parametra --report, možete kontrolirati direktorij u kojem će se generirati izvještaji o skeniranju.

php ai-bolit.php lista parametara... --eng

Prebacite interfejs izveštaja na engleski. Ovaj parametar bi trebao biti posljednji.

Integracija sa drugim servisima i u hosting panel

php ai-bolit.php --json_report=/path/file.json

Generirajte izvještaj u json formatu

php ai-bolit.php --progress=/path/progress.json

Sačuvajte status verifikacije u datoteku u json formatu. Ova datoteka će sadržavati strukturirane podatke u json formatu: trenutnu datoteku skeniranja, koliko datoteka je skenirano, koliko je datoteka preostalo za skeniranje, postotak skeniranja, vrijeme dok se skeniranje ne završi. Ovaj mehanizam se može koristiti za prikaz trake napretka i podataka o datotekama koje se skeniraju na panelu. Kada se skeniranje završi, datoteka se automatski briše.

php ai-bolit.php --handler=/path/hander.php

Eksterni obrađivač događaja. Možete dodati vlastite rukovaoce greškama početak/kraj skeniranja/napredak skeniranja/skeniranja. Primjer datoteke može se vidjeti u arhivi skenera, u direktoriju tools/handler.php. Na primjer, nakon što je skeniranje završeno, možete učiniti nešto s datotekom izvještaja (pošaljite poštom, arhivom, itd.).

U ovoj lekciji ćemo naučiti nešto kao što je skrivanje PHP grešaka. Usput ćemo također pogledati kako ne samo potisnuti izlaz ovih grešaka, već i kako ih upisati u log datoteku, kako zaštititi ovu datoteku dnevnika, kako konfigurirati nivo izvješćivanja o PHP greškama (koliko su ozbiljne greške za prikaz, da li da se prikazuju upozorenja), naučite kako postaviti maksimalnu veličinu linija greške i onemogućiti snimanje ponovljenih grešaka.

Da li treba da sakrijem PHP greške?

PHP greške proizvode širok spektar informacija koje omogućavaju napadačima da prikupe podatke o vašoj web lokaciji i vašem serveru. Ali da je odgovor na ovo pitanje definitivno "da", onda bi sve bilo riješeno dodavanjem jedne linije u svaki fajl sa PHP programima

Error_reporting(0);

U stvari, sve greške, uključujući i upozorenja (nekritične greške) treba da budu prikazane u fazi testiranja. Prikazivanje grešaka i upozorenja će vam takođe pomoći da razumete postojeće (ili moguće) probleme u vašem radnom okruženju. Ne biste trebali potiskivati ​​prikaz grešaka i upozorenja u programima namijenjenim besplatnoj distribuciji, jer ako se pojave problemi, svi izvještaji korisnika o problemima će biti isti: „postoji bijeli ekran“, što će uvelike otežati pokušaje da se to otkrije.

Općenito, na serverima namijenjenim razvoju (na primjer, na kućnom serveru), nema potrebe za brisanjem grešaka i upozorenja korištenjem PHP metoda error_reporting(0); I @ – potrebno je proučiti njihove uzroke i ispraviti izvorni kod.

Na produkcijskim serverima, preporučljivo je ne prikazivati ​​svima greške koje su se dogodile u PHP kodu, ali se preporučuje ne samo suzbiti njihov prikaz, već i voditi evidenciju o njima, zapisati ih za administratora sistema i za PHP programer - iz ovih dnevnika će dobiti važne informacije o mogućim problemima na stranici/serveru.

Kako omogućiti PHP evidentiranje grešaka putem .htaccess-a

U ovom delu tutorijala pokazaću korisnicima Apache-a kako da potisnu izlaz PHP grešaka i sakriju ih od posetilaca, dok će evidentiranje PHP grešaka biti omogućeno za dalju analizu, sva ova konfiguracija će se raditi preko .htaccess fajla.

Općenito, ova metoda ima još jednu divnu prednost - umjesto da pokušavamo uhvatiti sve PHP greške i upozorenja, mi ćemo svaku od njih zabilježiti u svoj lični dnevnik, zahvaljujući tome ni jedna greška koja se pojavi neće izbjeći, čak i ako se nije pojavila od vas, i nekoga ko posjećuje vašu stranicu pod uslovima koji vam možda ne bi pali ni na pamet za modeliranje. Hvala, postoji jednostavan način za implementaciju ove efikasne strategije.

Skrivanje PHP grešaka od posjetitelja

Postoje različiti načini za suzbijanje PHP grešaka koristeći .htaccess. Ovo se može učiniti uključivanjem sljedećih .htaccess direktiva u httpd.conf datoteku vaše domene ili u korijenski (ili bilo koji drugi ciljni direktorij) .htaccess datoteke sa sljedećim sadržajem:

# potisnuti php greške php_flag display_startup_errors isključeno php_flag display_errors isključeno php_flag html_errors isključeno php_value docref_root 0 php_value docref_ext 0

Ovo će uzrokovati da PHP greške više ne budu javne na vašoj web lokaciji. Ovo eliminiše potencijalne sigurnosne rizike i sprečava te ružne, neshvatljive PHP greške da razbiju izgled vašeg sajta i dezorijentišu vaše posetioce. Za ovo nije potrebno uređivanje koda.

Omogućavanje lične evidencije PHP grešaka

Sada kada smo sakrili PHP greške od javnosti, omogućimo njihovo evidentiranje (snimanje) kako bismo mogli da ih pronađemo. Ovo se radi dodavanjem sljedećih .htaccess direktiva u httpd.conf datoteku vaše domene ili u vašu .htaccess datoteku koja je smještena u korijenski (ili bilo koji ciljni) direktorij.

# omogući PHP evidentiranje grešaka php_flag log_errors na php_value error_log /home/path/public_html/domain/PHP_errors.log

Da bi ovo funkcioniralo, trebate urediti putanju u posljednjem redu tako da odgovara stvarnoj lokaciji vašeg PHP_errors.log datoteke. Naravno, zajedno s ovim morate kreirati ovu datoteku i dati joj dozvole 755 ili ako je potrebno 777. Konačno, morate osigurati ovu datoteku dnevnika dodavanjem ovih konačnih linija koda u vašu .htaccess datoteku:

# spriječi pristup PHP dnevniku grešaka

Sada kada je sve na svom mestu, proverite da li sve radi kako treba tako što ćete izbaciti neke PHP greške. Možda ćete također htjeti testirati sigurnost svoje datoteke dnevnika pokušajem da joj pristupite preko pretraživača.

Napredno rukovanje PHP greškama sa .htaccess

Hajdemo sada dublje zaroniti u ovu temu, dodati dodatnu funkcionalnost i istražiti različite implementacije. Prvo ćemo pogledati rukovanje PHP greškama za proizvodna okruženja (na primjer, web stranice i aplikacije koje su na mreži, aktivne i javne), zatim ćemo pogledati rukovanje greškama za okruženja programera (na primjer, projekti u razvoju, testiranje, privatno, itd.).

Kontrolisanje nivoa izveštavanja o greškama u PHP-u

Koristeći .htaccess moguće je prilagoditi nivo prijavljivanja grešaka kako bi odgovarao vašim praktičnim potrebama. Opšta utvrda za praćenje stope PHP grešaka je sljedeća:

# opšti pogled na direktivu za postavljanje php nivoa greške php_value error_reporting broja

Postoji nekoliko uobičajenih vrijednosti koje se mogu zamijeniti za "cifru", uključujući:

  • Najpotpunija poruka o grešci(odgovara E_ALL) - za ovo koristite vrijednost “32767”.
  • Potpuna poruka o grešci- Za potpuno evidentiranje PHP grešaka, koristite vrijednost "8191", koja će uključivati ​​evidentiranje svega osim runtime obavijesti o korištenju zastarjelih konstrukcija (upozorenja o kodu koji neće raditi u budućim verzijama PHP-a).
  • Zend izvještavanje o greškama- Za snimanje fatalnih i nefatalnih upozorenja u vrijeme kompajliranja generiranih od strane Zend skriptnog motora, koristite "192".
  • Osnovno izvještavanje o greškama- snimanje obavještenja o izvršavanju. Označava da se nešto dogodilo tokom izvršavanja skripte što može ukazivati ​​na grešku, iako se može dogoditi i tokom normalnog izvršavanja programa. Da biste to učinili, koristite broj "8".
  • Minimalne poruke o greškama- evidentirajte samo fatalne greške u izvođenju. To su greške koje sama skripta ne može ispraviti, kao što su greške u dodjeli memorije, itd. U ovom slučaju, izvršenje skripte je prekinuto. Da biste to učinili, koristite broj "1".

Naravno, možete koristiti druge vrijednosti („brojeve“) za fino podešavanje koje greške želite snimiti. Neka pojašnjenja o ovom pitanju nalaze se na samom dnu.

Postavljanje maksimalne veličine datoteke za snimanje vaših grešaka

Koristeći .htaccess možete definirati maksimalnu veličinu za vaše PHP greške. To znači praćenje veličine svake zabilježene greške, a ne cijele datoteke u cjelini. Sintaksa je sljedeća:

# opća direktiva za postavljanje maksimalne veličine greške log_errors_max_len integer_number

Ovdje "integer_number" predstavlja maksimalnu veličinu u bajtovima svake upisane linije greške. Zadana vrijednost je "1024" (tj. 1 kilobajt). Da biste uklonili ovo ograničenje, možete postaviti vrijednost na “0”. Imajte na umu da se ova vrijednost odnosi i na prikazane greške kada su one omogućene (na primjer, tokom razvoja).

Onemogućavanje dupliciranog evidentiranja grešaka

Ako ste već radili sa evidencijom grešaka, možda ste primijetili da sadrži mnogo sličnih unosa koji se razlikuju samo po vremenu događaja. Možete se riješiti ove suvišnosti jednostavnim dodavanjem ovih redova u svoj htaccess fajl:

# onemogući snimanje ponovljenih grešaka php_flag ignore_repeated_errors na php_flag ignore_repeated_source na

S ovim postavkama, ponovljene greške neće biti zabilježene u loginal, čak i ako su se dogodile na različitim izvorima ili adresama. Ako želite da onemogućite duple greške samo iz jednog izvora ili datoteke, jednostavno komentirajte ili izbrišite zadnji red. Suprotno tome, da biste osigurali da vaša datoteka evidencije događaja uključuje sve duple greške, promijenite obje vrijednosti iz on on isključeno.

Stavljajući sve zajedno - radno okruženje

Nakon što smo razmotrili karakteristike podešavanja PHP snimanja grešaka, hajde da sakupimo sve naše unose u jednu .htaccess datoteku. Ove postavke su optimizovane za radno okruženje.

# PHP rukovanje greškama za proizvodni server php_flag display_startup_errors isključeno php_flag display_errors isključeno php_flag html_errors isključeno php_flag log_errors na php_flag ignore_repeated_errors isključeno php_flag php_flag ignore_repeated_source isključeno php_flag ignore_repeated_source isključeno phpm_flag e docref_root 0 php_value docref_ext 0 php_value error_log /home/path/public_html/domain/PHP_errors. log php_value error_reporting -1 php_value log_errors_max_len 0 Naruči dozvoli, zabrani Zabrani od svih Zadovolji sve

Ako smatrate da je kod s objašnjenjima dobar stil, onda isti kod, ali s komentarima:

# PHP rukovanje greškama za proizvodni server # onemogući prikaz grešaka pri pokretanju php_flag display_startup_errors isključeno # onemogući prikaz svih ostalih grešaka php_flag display_errors isključeno # onemogući greške html markupa php_flag html_errors isključeno # omogući evidentiranje grešaka php_flag log_errors uklj. php_flag ignore_repeated_errors off # onemogući ignorisanje grešaka iz jedinstvenih izvora php_flag ignore_repeated_source off # omogući snimanje curenja php memorije php_flag report_memleaks on # sačuva većinu najnovijih grešaka preko php_errormsg php_flag php_flag greška u formatu php_php na displeju #referenca track_errors moguće formatiranje greške referentne veze php_value docref_ext 0 # specificiranje putanje do php datoteke evidencije grešaka php_value error_log /home/path/public_html/domain/PHP_errors.log # specificira zapis svih php grešaka php_value error_reporting -1 # onemogući maksimalnu dužinu reda grešaka u dnevniku phperrvalorsu_ # zaštitite datoteku dnevnika grešaka od javnog pristupa Naruči dozvoli, zabrani Zabrani od svih Zadovolji sve

Gornja strategija je idealna za javni server u proizvodnom okruženju. Sve greške su skrivene od znatiželjnih očiju, ali su uredno sakupljene za administratore i programere. Naravno, možete prilagoditi date direktive tako da savršeno odgovaraju vašim potrebama. Pogledajmo sada strategiju za postupanje s greškama za razvojno okruženje.

Stavljajući sve zajedno - razvojno okruženje

Kada razvijate ili otklanjate greške u programu, pogodnije je pratiti nove PHP greške u realnom vremenu, direktno u pretraživaču. Primjer .htaccess-a sa odgovarajućim postavkama za razvojno okruženje je dat u nastavku:

# rad sa PHP greškama za programerske servere php_flag display_startup_errors na php_flag display_errors na php_flag html_errors na php_flag log_errors na php_flag ignore_repeated_errors off php_flag ignore_repeated_errors off php_flag ignore_repeated_lasource off php_php ignore_repeated_lasource isključen _value docref_root 0 php_value docref_ex t 0 php_value error_log /home/path/public_html/domain/ PHP_errors .log php_value error_reporting -1 php_value log_errors_max_len 0 Naruči dozvoli, zabrani Zabrani od svih Zadovolji sve

Nećemo objašnjavati svaki red - odgovarajuća objašnjenja možete vidjeti malo više.

Hints

Da biste saznali apsolutnu putanju do datoteke dnevnika na serveru koristeći PHP metode (za php_value error_log direktivu)

echo dirname(__FILE__);

Primjer.htaccess za .

php_flag display_startup_errors na php_flag display_errors na php_flag html_errors na php_flag log_errors na php_flag ignore_repeated_errors isključeno php_flag ignore_repeated_source isključeno php_flag na php_flag report_memlerrot 0 php_value docref_ext 0 php_value error_log C :ServerdatahtdocsPHP_errors.log php_value error_reporting -1 php_value log_errors_max_len 0 Naruči dozvoli, zabrani Zabrani od svih Zadovolji sve

Ne radi

Ova metoda nije primjenjiva na hostingima gdje PHP radi kao CGI(moguća rješenja će biti prikazana u sljedećem članku).

-1 i ~0 za prikaz svih PHP grešaka

U direktivi php_value error_reporting za prikaz svih grešaka koje možete navesti -1 ili ~0 . One. linije izgledaju ovako:

Php_value error_reporting -1 php_value error_reporting ~0

Štoviše, druga metoda se smatra ispravnijom, odnosno korištenjem ~0 .

Unaprijed definirane konstante i bitne operacije error_reporting

  • Predefinisane konstante
  • Bitovi operatori

Na primjer, ako želimo da snimimo SAMO sljedeće greške E_ERROR (vrijednost 1), E_WARNING (vrijednost 2), E_CORE_ERROR (vrijednost 16), tada bismo da bismo dobili odgovarajuću numeričku vrijednost morali ove vrijednosti pretvoriti u binarne brojeve i izvršite odgovarajuće bitne operacije, a zatim rezultiraju Pretvori binarni broj u decimalni. Međutim, ova operacija se može pojednostaviti - samo dodajte vrijednosti decimalnih brojeva. One. u našem slučaju to je 1+2+16=19

Php_value error_reporting 19

će prikazati greške E_ERROR, E_WARNING i E_CORE_ERROR.

Primjer apsolutne putanje do datoteke dnevnika na Hostland hostingu (za php_value error_log direktivu)

/home/host900456/site/blogs/htdocs/www/PHP_errors.log

Umjesto host900456 morate navesti svoj račun.

Umjesto web stranica morate navesti svoju domenu.

Inače, dobar hosting na kojem radi ova stranica. Preporučujemo!

Faktor kapaciteta opterećenja servera je jedan od parametara SaaS naloga. Svaki tarifni plan ima svoje parametre opterećenja. U CRM sistemu uvijek možete vidjeti trenutno opterećenje naloga na svom ličnom računu.

Ponekad se može dogoditi situacija da račun koji koristite proizvodi opterećenje koje je veće od dozvoljenog na vašem tarifnom planu. O tome ćete biti obaviješteni odgovarajućim pismom.

Glavni parametri koji utiču na opterećenje:

  • Broj korisnika u sistemu koji rade istovremeno;
  • Broj zapisa u programskim tabelama;
  • Broj pravila i pristupnih grupa;
  • Broj podsjetnika, formatiranje boja, filteri, itd.;
  • Broj proračuna i njihova složenost;
  • Broj poslova koji rade u pozadini (preko Cron sistema);
  • Broj pokrenutih poruka (e-mail i SMS);
  • Broj izvještaja;
  • Volumen dnevnika programa.

Stoga, ako se neke pristupne grupe, formatiranje boja, filteri i drugi konfiguracijski elementi ne koriste, preporučljivo je da ih izbrišete. Također možete ukloniti nepotrebne zapise iz tabela. Osim uklanjanja konfiguracijskih stavki, možete poduzeti i druge mjere za smanjenje opterećenja na serveru. O njima će se detaljnije govoriti u nastavku.

Sve mjere za smanjenje opterećenja mogu se podijeliti u dva dijela: za administratore i za programere. Ove mjere također mogu smanjiti opterećenje servera kada se koristi web verzija programa.

Uputstva za administratore

Početak optimizacije

Prva stvar koju trebate učiniti je osigurati da koristite najnoviju verziju programa. Ovo možete provjeriti tako što ćete otići na “Postavke” - “Napredno” – “Ažuriranje revizije”. Ako koristite najnoviju verziju i reviziju programa, vidjet ćete odgovarajuću poruku

Ako koristite staru verziju ili reviziju, program će od vas zatražiti da ažurirate.

Zatim biste trebali pokrenuti prošireno skeniranje sistema. Da biste to učinili, idite na "Postavke" - "Napredno" - "Skeniranje sistema" i kliknite na dugme "Napredno skeniranje sistema". Ukoliko dođe do grešaka u programu, one će biti automatski ispravljene.

Opšte postavke programa

Idite na "Postavke" - "Napredno" - "Opće postavke". Ovdje vrijedi obratiti pažnju na dvije stvari.

Intuitivno pretraživanje - Ovu opciju možete onemogućiti ako ne trebate pretraživati ​​transliteracijom značenja.

Način pomicanja prozora - Više o načinima pomicanja prozora možete pročitati u našoj dokumentaciji. Preporučljivo je da ovu postavku postavite na "Jednostavno".

Cron postavke

Idite na "Postavke" - "Napredno" - "Cron postavke". U postavkama Cron-a možete upravljati zadacima koji se pokreću automatski u pozadini. Na primjer, sinhronizacija, slanje pisama i SMS-a. Postoje dva načina da se smanji opterećenje zbog ove postavke.

1. Zabranite izvršavanje zadataka koje ne koristite u svom programu. To možete učiniti tako da otvorite željeni zadatak i potvrdite izbor u polju za potvrdu „Zabrani izvršenje“.

Na primjer, ako ne koristite funkciju sinkronizacije, otvorite odgovarajući zadatak i označite potvrdni okvir "Zabrani izvršenje" u njegovim postavkama. Ako ne koristite funkciju slanja SMS-a, možete zabraniti izvršavanje zadataka “Generisanje SMS-a”, “Slanje SMS-a”, “Provjera statusa isporuke SMS-a”.

2. Promijenite učestalost zadataka. To se može učiniti tako što ćete otići u postavke zadatka i promijeniti vrijednost u polju "Period". Na primjer, u zadatku „Slanje pisama“ možete navesti da se umjesto svake minute zadatak izvršava svakih 5 minuta.

Postavljanje uslova proračuna

CRM softver koristi proračune za automatsko popunjavanje nekih polja. Ali ponekad uslovi za njihovu implementaciju nisu optimalni. Na primjer, opterećenje je uzrokovano uvjetom prikaza polja u postavci proračuna. Njegovu upotrebu treba izbjegavati.

Na primjer, ako imamo proračun u kojem se u polje A unosi zbir polja B i C, onda je preporučljivo koristiti uslove „Promijeni polje B“ i „Promijeni polje C“. Ako imamo proračun koji u polje A unosi vrijednost iz druge tabele iz polja B, u zavisnosti od vrijednosti u polju veze B, onda je logično da možemo koristiti samo uslove “Promijeni polje B” i “Sačuvaj u tabeli” .

Postavljanje i arhiviranje dnevnika

Idite na "Postavke" - "Evidencije" - "Postavke dnevnika". U postavkama dnevnika ne biste trebali nepotrebno omogućiti evidentiranje korisničkih pregleda tabela, pogleda i zapisa. Ovo može povećati opterećenje servera i uzrokovati preveliku datoteku dnevnika. Ovdje je također vrijedno omogućiti opciju “Mjesečno arhiviranje dnevnika” koja će vam omogućiti da automatski smanjite veličinu tabele sa evidencijama svakog mjeseca

Ovdje također možete automatski arhivirati dnevnike ako automatsko arhiviranje nije prethodno bilo omogućeno. To se može učiniti na kartici "Arhiva".

Postavljanje filtera

Ako otvorite postavke bilo kojeg filtera, vidjet ćete opciju “Prikaži broj zapisa u zagradama”. Preporučljivo je da poništite ovo polje, jer... ova opcija može uzrokovati opterećenje svaki put kada se tabela otvori. I što je više takvih filtera u tabeli, veće je opterećenje pri otvaranju.

Uputstva za programere

Rad sa tablicom performance_stat

Bitan: Izmjena u tablicama baze podataka može dovesti do toga da program ne radi. Ne biste trebali praviti promjene u tablicama baze podataka osim ako je to apsolutno neophodno.

Prijavite se na svoj nalog i otvorite adresu https://*adresa vašeg naloga*/edit_sql.php (gde umesto *adresa vašeg naloga* unesite odgovarajuću vrednost). U prozoru koji se otvori idite na tabelu baze podataka koja sadrži naziv vašeg naloga (na primjer, c_myaccount). Na listi tabela baze podataka koja se otvori, otvorite tabelu f_performance_stat

Ova tabela vodi evidenciju o svim programskim skriptama za prošli sat. Za početak, trebali biste sortirati sve skripte u ovoj tabeli prema broju sql upita (od najviše do najmanje). Da biste to učinili, dvaput kliknite na zaglavlje "sql_count".

Kada se podaci sortiraju, može početi analiza podataka. Prilikom provođenja analize obratite pažnju na dvije kolone

1. skripta - označava naziv skripte koja proizvodi učitavanje

2. get_data - daje detaljnije informacije o skripti, ili sadrži vezu do tabele/zadatka u kojem se učitava.

Za lakšu analizu koristite tabelu ispod:

Vrijednost u polju "skripta". Primjer vrijednosti u polju "get_data". Opis Radnje za smanjenje opterećenja
cron.php ...&task_id=1 Ovakva linija znači da je opterećenje osigurano jednim od Cron poslova
Morate otići na "Cron Settings" i otvoriti posao koji uzrokuje opterećenje (ID posla je naznačen u polju "get_data"). Vrijedi ili optimizirati šifru posla ili smanjiti njegovu učestalost. O postavkama Cron-a.
view_line2.php table=42&line=1&filter=48&page=1 Linija ovog tipa znači da je opterećenje dato jednim ili više proračuna u određenoj tabeli prilikom pregleda zapisa
fields.php table=42&filter=48 Linija ovog tipa znači da je opterećenje dato jednim ili više proračuna u određenoj tabeli prilikom pregleda tabele Morate otići na postavke proračuna tablice navedene u polju "get_data" (u primjeru, ovo je tabela sa ID-om 42). Za početak, vrijedi pogledati i optimizirati uvjete za izvođenje proračuna u navedenoj tabeli. Ako to ne pomogne, vrijedi optimizirati sam računski kod.
report.php id=30 Linija ovog tipa znači da je opterećenje osigurano jednim od programskih izvještaja
Potrebno je optimizirati kod izvještaja naveden u polju "get_data" (u primjeru se radi o izvještaju sa ID 30).

Članak opisuje funkcionalnost koja je dostupna u PHP-u (relevantno za 5.3.x) za rukovanje greškama svih tipova, uključujući greške interpretacije koda (E_ERROR, E_PARSE, E_WARNING, itd.). Ova obrada će vam pomoći da prikažete stranicu na kontrolisan način ako dođe do takvih problema. Članak sadrži mnogo opisa i radnih primjera (arhitektura) za neposrednu upotrebu u vašem softverskom proizvodu. Na kraju, sajt je malo pokvaren, pa, potrebno je o tome obavestiti pretraživač sa naslovom 4xx ili 5xx i zabaviti korisnika, umesto da vrati beli ekran (ili još gore, ekran sa svetim informacijama, jer hakeri) sa odgovorom 200 Ok.

Ideja da napišem ovu temu nastala je kada sam hrabro postavio 2 pitanja:

  • Pitanje o
  • Pitanje o
Po svojoj karmi i dodavanju u favorite, shvatio sam da su se pokazali zanimljivi za PHP habra zajednicu. Iz tog razloga sam odlučio formalizirati rješenja ovih problema u obliku članka, kako bi ljudima i pretraživačima bilo lakše i sveobuhvatnije da pronađu informacije koje su im potrebne.

Ukoliko ste zainteresovani, detalji su ispod...

Razlozi za upotrebu

Korisniku/pretraživaču je potreban jasan odgovor da postoji problem na serveru. Bez korištenja određenog feng shuija, to je prilično teško postići, a ponekad i nemoguće. Ovdje sam rasvijetlio sve ovo, a ostavljam i napomenu za sebe, pošto prije tjedan dana nisam znao šta da radim, a vjerovatno će se i mnogi početnici obeshrabriti.

Opisi funkcija

Ova funkcionalnost je dostupna u PHP-u za rukovanje greškama i kontrolu izlaza. Evo opisa njihovih dobrota i nedostataka. Neću davati dokumentaciju, samo ću se osvrnuti na njene stranice i iznijeti svoje mišljenje. Sve što će biti dato je samo mali dio; linkove do relevantnih dijelova dokumentacije navest ću na kraju članka. pa se upoznajemo:

- Kontrola nekritičnih grešaka: komentari, upozorenja, greške korisnika. Općenito, sve što ne završava interpretaciju nenormalno.
set_error_handler - Postavlja korisnički definirani rukovalac greškama.
Potrebno je zapisati sve takve greške u dnevnik. Ako ga ne postavite, neće biti zapisano u dnevnik, ali uvijek želim znati u kojim se borbenim situacijama mogu pokrenuti komentari i upozorenja. Odnosno, omogućava korisniku da automatski testira proizvod i on to neće ni primijetiti.
Ako funkcija nije specificirana, onda PHP samo pokušava da prikaže podatke na ekranu, a ako mu se to ne da, onda se od ovih vrsta grešaka uopšte ne pojavljuju znakovi života.

- Kontrola, izuzeci: je greška tipa E_ERROR.
set_exception_handler - Postavlja prilagođeni obrađivač izuzetaka
Pa, ne znam zašto je ovo uopće izmišljeno, kada postoji ono što je dolje opisano i jednostavno rukovanje greškom tipa Exception. Dakle, ja vam kažem da jednostavno postoji. Hvata kritičnu grešku izuzetka i omogućava vam da učinite nešto po tom pitanju. U svakom slučaju, skripta se završava. Meni lično je dovoljan njegov podrazumevani rad (piše u dnevnike, pokušava da prikaže). Uopšte to ne bih redefinirao, inače bih morao sam pisati o izuzetku koji se dogodio u logovima.

- Funkcije kontrole izlaza: Ovdje ću opisati 3 funkcije koje biste trebali znati iz različitih razloga. Na primjer, za ili za probleme sa izlazom zaglavlja. U našem slučaju, moramo prikazati zaglavlja grešaka.

Uslovi
Postoji fajl sa kodom koji se pokreće prvi ili pre koda u kojem se može pojaviti greška, a ovaj fajl i svi fajlovi pre njega su 100% debagovani sa nemogućnošću pojave greške. Ovo je uslov koji bi olakšao - bez grešaka dok ne prođu sve registracije navedenih funkcija. Ova datoteka opisuje ove tehnike kontrole grešaka u kompleksu. Bafer se nadgleda; ako postoji greška, resetujte bafer i prikažite grešku.
Kod sa komentarima
Sam ću dodati da nisam testirao kod, pošto je ovo pojednostavljeni dijagram onoga što imam u kodu, komentari su dobrodošli
mob_info