Învățați cum să scrieți scripturi corect

Mulți programatori web novici se familiarizează cu limba prin intermediul cărților. Cartea este, fără îndoială, foarte importantă și necesară, dar oferă exemple (pentru începători), care în esența lor nu sunt corecte în ceea ce privește stabilitatea și portabilitatea scenariului. Stabilitatea înseamnă posibilitatea unor erori de diferite tipuri, portabilitatea este aceeași, dar când transferați un script de la mașina dvs. locală la serverul furnizorului de gazde.







Mai jos, aș dori să arăt imediat dezvoltatorilor web de început cum să învețe cum să scrieți scripturi simultan, astfel încât să nu aveți probleme inutile și să nu "prindeți" neclare în cazul în care provin erorile de accesare a crawlerii.

Imediat spun că m-am confruntat cu asta, așa că toate acestea au trecut prin chinul meu.

Voi lua în considerare următoarele aspecte:

1. Configurați PHP pentru mașina locală și pe server.
2. Unde este "@" îngropat?
3. register_globals = Off și nimic altceva.
4. Principalele aspecte ale sintaxei. Literali sau note literale.

1. Configurați PHP pentru mașina locală și pe server.

De ce încep cu acest capitol? Adevărul este că mulți dintre mașinile locale se opresc imediat, arătând toate erorile. Aceasta nu este corectă. În loc să privești prost la monitor și să cauți unde, așa cum se dovedește, nu este suficientă punct și virgulă, poți să dai în mod greșit PHP să înțeleagă imediat ce este în neregulă.

Dar mai întâi vreau să fac o mică digresiune lirică despre configurarea PHP, cum ar fi modulul Apache sau CGI rapid.
Cea mai bună opțiune este să o configurați ca un modul de server web. Pentru a face acest lucru, scriem următoarele linii în fișierul de configurare httpd.conf al serverului web Apache:

LoadModule php4_module D: /bin/php/sapi/php4apache2.dll
Aplicația AddType / x-httpd-php .php .phtml .php4 .php


Diferența de la FastCGI este după cum urmează. În primul rând. Când php.ini FastCGI fi încărcate în memoria serverului de web despre fiecare a doua oară script-ul este rulat atunci când este instalat Apache modulul de configurare PHP care urmează să fie efectuate numai la pornire sau reporniți serverul de web prin utilizarea, de la sine viteza și sarcina pe server va fi mai puțin. În plus, anumite funcții nu sunt disponibile atunci când se instalează rapidCGI. Un programator începător nu are nevoie de ele. dar atunci când dezvoltați o aplicație de Internet mare, este posibil să întâmpinați probleme. Și problemele sunt mai bine de prevenit.

Acum mergeți la configurația PHP în sine. În fișierul de configurare php.ini, trebuie să setăm următoarele directive cu valorile scrise mai jos:

error_reporting = E_ALL
display_errors = Activat
display_startup_errors = Activat


Scrieți sau nu scrieți erori la fișierele de jurnal - aceasta este la discreția dvs.
Pe serverul companiei de găzduire, asigurați-vă că dezactivați toate aceste directive din motive de securitate, astfel încât potențialul atacator să nu poată afla unde se află scripturile dvs. Dar, pentru bine, atunci când publicați deja scriptul dvs. pe rețeaua globală, acesta nu ar trebui să dea nici o eroare.
În afară de asta


Pentru a fi imposibil de folosit


Implicit, directiva max_execution_time are o valoare de 30, dar pentru o muncă rapidă, este mai bine să puneți mai puțin. Dacă aveți ceva "fix", atunci 10 secunde este suficient pentru a înțelege acest lucru.

register_globals = Off






register_argc_argv = Oprit


În Capitolul 3, voi discuta acest lucru în detaliu.


Foarte adesea dezvoltatorii web de novici nu înțeleg diferența dintre "și", deci dezactivați directiva. În capitolul 4, acest moment va fi arătat în exemplu.

2. Unde este "@" îngropat?

Aceasta este probabil cea mai elementară greșeală a programatorilor începători - utilizarea "@". Acest caracter, înainte ca orice operator să suprime ieșirea erorii și o scrie în jurnal. Nu vă permite să urmăriți eroarea la etapa de depanare și încercați în mod frenetic să înțelegeți ce este greșit.

Un exemplu viu. Să presupunem că am plasat simbolul "@" înaintea liniei $ f = fopen ("fle.txt". "W +"); Dacă luăm doar cele mai frecvente greseli care pot aparea in timpul fwrite ulterioare De exemplu, acesta: a) nu are acces la dosar, b) fișierul nu există în) Acest fopen nu poate fi invocat într-un mod sigur. Vă puteți imagina câte variante de erori pot fi? Mulți. Și cum veți afla ce greșeală ați avut, pentru că ați suprimat rezultatul lor cu simbolul "@".

Prin urmare, strict pe strict interzice să utilizați @.

Voi întrebați, dar cum faceți acest lucru pentru a nu primi o eroare?
Pentru nici o eroare este necesară pentru a preveni sau, la fel ca în dosarul cauzei, adică a) pentru a verifica fișierul să existe, și b) pentru a verifica, dar puteți (avea dreptul) să-l pentru a scrie ceva is_writeable ();.

În alte cazuri, de exemplu, atunci când utilizați mysql_connect (); Este necesar să verificați valoarea pe care o returnează funcția. De regulă, este posibil să se determine dacă există sau nu o eroare. În mod normal, o eroare returnează FALSE, NULL sau un șir gol.

Acest lucru vă va permite să oferi utilizatorului o pagină care nu este goală în cazul în care, de exemplu, el a încercat să utilizeze datele (n = 14?), Și informațiile stocate în fișiere, și fișierul 14 nu există, iar mesajul text: „Nu există date“ .

Eroarea "de prindere" este, de asemenea, un aspect foarte important al securității scenariului.

3. register_globals = Off și nimic altceva.

Dacă în primele două capitole, am pus accentul pe acele puncte cu care un programator novice va confrunta deja o dată, în acest capitol, voi discuta acest punct, care se va manifesta abia mai târziu. de multe ori cu el toate confruntate cu transferul de script (deja gata) la furnizorul de gazduire server. Personal, de mult timp m-am obișnuit să înregistrez_globals = Off, deci tovarășii, începători de programatori, au eliminat imediat această directivă. În plus, acest moment este FOARTE IMPORTANT în securizarea scenariului.


dacă (isset ($ form))
dacă (isset ($ familie) isset ($ form))
imprimați "Numele dvs. de familie:". $ familie. "
„;
print "Ai fost aici:". $ form. "
„;
>
altfel
// Afișați formularul nostru.
>
>

Ie De fapt, totul se limitează la faptul că există o posibilitate de a înlocui toate variabilele. De fapt, acesta este un dezavantaj important în ceea ce privește securitatea, deoarece este foarte probabil ca un atacator să poată privi fișiere importante pe server.

Acum despre cum să implementați acest lucru în register_globals = Off

În PHP, există mai multe tablouri globale. $ _GET, $ _POST, $ _COOKIE, $ _REQUEST (unirea primelor trei, nu este recomandat din motive de securitate), $ _FILES (pentru aploda fișier), $ _SESSIONS (sesiune), $ _SERVER (variabile de server), $ _ENV (variabile de mediu) , $ GLOBALS (uneste toate).

Ce înseamnă asta. Mai jos, pur și simplu, voi rescrie scriptul pe care l-am furnizat mai devreme pentru register_globals = Off.


dacă (isset ($ _GET ['form']) isset ($ _COOKIE ['family']) isset ($ _COOKIE ['form']))
imprimați "Numele dvs. de familie:". $ _COOKIE ['familie']. "
„;
print "Ai fost aici:". $ _COOKIE ['form']. "
„;
>
altfel
// Afișați formularul nostru.
>

În același capitol vreau să iau în considerare următorul exemplu mic. Din nou, ia în considerare mai întâi un exemplu cu activarea registrului_global.

4. Principalele aspecte ale sintaxei. Un literal sau literal.

1. Din nou, mulți programatori novici nu înțeleg diferența dintre înregistrare: $ _POST ['pole'] și $ _POST [pole]. Prima opțiune este corectă din punct de vedere sintactic, dar cea de-a doua nu este. PHP va încerca să găsească nu un element pol, ci un element cu un nume care este stocat în constanta pol, pe care nu îl aveți.

Literele sunt încadrate în citate. line. Dacă aveți o matrice index, atunci nu este nevoie să scrieți $ _POST ['1'], dar aveți nevoie de $ _POST [1].

Diferența dintre "și" nu este.

2. Derivarea variabilelor este adesea efectuată în felul următor:

print "Numele meu este $ name. Eu am vechime. ";


O astfel de linie este "înțeleasă" de către interpret mult mai mult decât

scrieți "Numele meu este". $ nume. "I". $ vârsta. "de ani." ;
// sau
print "Numele meu este. Sunt ani." ;
?>


Prima opțiune este cea mai preferată, iar din punctul de vedere al editării codului programului este mai ușor de înțeles unde este variabila dvs. și unde aveți textul.







Articole similare

Trimiteți-le prietenilor: