Controlarea De La Distanta A Unui Sistem De Aspersoare Cu Rasberry Pi [625261]

1
Cuprins
Introducere ………………………….. ………………………….. ………………………….. ………………………….. ………. 2
Capitolul 1 ………………………….. ………………………….. ………………………….. ………………………….. ……….. 3
1.1 Placa de dezvolta re Raspberry Pi Intrări / Ieșiri ………………………….. ………………………….. … 3
1.2 Cum funcționează PINII GPIO ………………………….. ………………………….. …………………………. 4
1.3 Descriere Raspberry PI ………………………….. ………………………….. ………………………….. ………… 5
1.4 Hardware ………………………….. ………………………….. ………………………….. ………………………….. .. 6
1.5 Procesorul ………………………….. ………………………….. ………………………….. ………………………….. .. 7
1.6 Overclocking ………………………….. ………………………….. ………………………….. ……………………….. 8
1.7 Capacitați de conectare la rețele ………………………….. ………………………….. ……………………….. 9
1.8 Periferice ………………………….. ………………………….. ………………………….. ………………………….. … 9
1.9 Capacitați Video ………………………….. ………………………….. ………………………….. ………………… 10
1.10 Descriere conectori GPIO ………………………….. ………………………….. ………………………….. …. 11
1.11 Accesorii care se pot atasa la Raspberry Pi ………………………….. ………………………….. ……. 13
Capitolul 2 ………………………….. ………………………….. ………………………….. ………………………….. ……… 14
2.1 Sistemul de operare Raspbian ………………………….. ………………………….. …………………………. 14
2.2 Controlarea pinilor de Intrare/ Iesire din linie de comanda ………………………….. ………….. 14
Capitolul 3 ………………………….. ………………………….. ………………………….. ………………………….. ……… 15
3.1 Apache HTTP Server ………………………….. ………………………….. ………………………….. …………. 15
3.2 Pe rformanță ………………………….. ………………………….. ………………………….. ………………………. 17
3.3 Licențiere ………………………….. ………………………….. ………………………….. ………………………….. . 17
3.4 Dezvoltare ………………………….. ………………………….. ………………………….. ………………………….. 18
3.5 Limbajul de programare PHP ………………………….. ………………………….. ………………………… 18
3.6 Despre limbajul PHP ………………………….. ………………………….. ………………………….. ………….. 19
3.7 Instalare și configurare PHP ………………………….. ………………………….. ………………………….. . 28
3.8 Securitate ………………………….. ………………………….. ………………………….. ………………………….. . 29
Capitolul 4 ………………………….. ………………………….. ………………………….. ………………………….. ……… 31
4.1 Tranzistorul NPN ………………………….. ………………………….. ………………………….. ………………. 31
4.2 Rezistorul ………………………….. ………………………….. ………………………….. ………………………….. 32
4.3 Releul ………………………….. ………………………….. ………………………….. ………………………….. ……. 33
4.4 Ledul ………………………….. ………………………….. ………………………….. ………………………….. …….. 34
Capitolul 5 ………………………….. ………………………….. ………………………….. ………………………….. ……… 36
5.1 Descrierea functionarii aplicatiei ………………………….. ………………………….. …………………….. 36
5.2 Descriera aplicatiei de control ………………………….. ………………………….. …………………………. 37
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. …….. 41

2
Introducere

In lume a în care trăim dispozitivele electronice sunt un mod de viată, pentru a ne face viața
mai ușoară.
Putem controla de pe telefonul mobil prizele, electrocasnicele, sistemul de irigații , ușa
garajului, încălzirea sau luminile din casa inteligenta. Acest proiect pune in aplicare, controlarea
unui sistem inteligent de aspersoare, iluminat adaptabil la orice alt echipament care sa ne poată face
viată mai ușoara , de la distanta via internet printr-un dispozitiv Raspberry Pi care este conectat la
Internet . Prin co nectarea acestui dispozitiv la I nternet si c onfigurarea unor circuit e electronic e
relative simple se poate controla pornire / oprirea acestor sistem e inteligente . Principalul atu al
acestui proiect , este posibilitatea de a fi control at de pe orice dispozitiv care are acces la Internet , un
telefon mobil, o tableta sau un computer person al accesând o pagina de internet. Toate comenzile
sunt simple, in cazul de fata butoane pentru Pornit/ Oprit selectabile in funcție de comanda pe care
dorim sa o dam, iar executarea comenzi se face acționând butonul Executa. Toate acesta se pot face
cu un dispozitiv micuț dar cu un potențial imens Raspberry Pi , incredibil de rapi d si eficient, la un
preț mic. Cu cunoștințe minime de electronica si programare, acest dispozitiv este echivalen ța altor
sisteme mult mai scumpe care exista in comerț. Pentru controlul software al dispozitivului, in
aceasta lucrare sa folosit doar software care nu tr ebuie licențiat, toata documentația găsindu -se pe
Internet sub diferite forme.
Mai jos este descrierea acestui dispozitiv, părțile software folosite și de asemenea
componentele hardware folosite la punerea in funcțiune a acestui a.

3
Capitolul 1
Raspberry Pi Prezentare
1.1 Placa de dezvoltare Raspberry Pi Intrări / Ieșiri

O caracteristică puternică a Raspberry Pi este rândul GPI O-urilor (intrări / ieșiri cu scop general)
de-a lungul marginii superioare a plăcii. [1], [2] (Figura 1.1, Fig ura 1.2, Figura 1.3 )

Figura 1.1

Figura 1.2

Figura 1.3

4

Acești pini sunt o interfață fizică între Pi și lumea exterioară. La cel mai simplu nivel, vă
puteți gândi la ele ca switch -uri pe care le pute m activa (intrare) sau dezactiva (ieșire ), Raspberry Pi
controlează toate aceste intrări si ieșiri . Din cei 40 de pini, 26 s unt pinii GPIO, iar ceilalți sunt pin i
de putere (5V sau 3,3V) sau de GND (plus doi pini ID EEPROM) .
Putem programa pini pentru a interacționa în moduri uimitoare cu lumea reală. Intrările nu trebuie
să provină dintr -un comutator fizic. Acesta ar putea fi introdus de la un senzor sau de la un alt
computer sau dispozitiv de exemplu. De asemenea, ieșirea poate face orice, de la activarea unui
LED , la trimiterea unui semnal de către alt dispozitiv. Dacă Raspberry Pi se află într -o rețea, puteți
controla disp ozitivele atașate de acesta oriunde, iar aceste dispozitive pot trimite date înapoi.
Conectivitatea și controlul dispozitivelor fizice pe internet este un lucru puternic și interesant, iar
Raspberry Pi este ideal pentru acest lucru.

1.2 Cum funcționează PINI I GPIO

Pini de iesire . Dacă urmam instrucțiunile, controlarea pini lor GPIO este sigură . Ignorând Pi -ul
pentru o clipă, una dintre cele mai simple circ uite electrice pe care le putem construi este o baterie
conectată la o sursă de lumină și un înt rerup ător (rezistorul este in circuit pentru a proteja LED -ul).
Figura 1.3

Figura 1.4
Când folosim un pin GPIO ca ieșire, Raspberry Pi înlocuiește întrerupătorul și bateria din
diagrama de mai sus. Fiecare pin se poate porni sau opri, sau modifica starea din HIGH (1 cu
tensiune ) sau LOW (0 fără tensiune ) în termeni de calcul. Când pinul este HIGH, acesta emite
3,3 volți (3v3). Când pinul este LOW este oprit. In (Figura 1.4 ) acest circuit folosind Raspberry
Pi se comporta ca un întrerupător , LED -ul este conectat la un pin GPIO (care are pe ieșire +
3v3) și un pin de masă (care este 0v și acționează ca terminalul negativ al bateriei).

5

1.3 Descriere Raspberry PI

Figura 1.5
Raspberry Pi (Figura 1.5) este o serie de computere mici , cu o singură placă, dezvoltat în
Regatul Unit de către Fundația Raspberry Pi pentru a promova predarea informaticii de bază în
școlile și în țările î n curs de dezvoltare. Modelul original a devenit mult mai popular decât se
anticipase având vânzări în afara pie ței sale țintă , pentru utilizări precum robotica si dezvoltatori .
Perifericele (inclu siv tastaturi, mouse ) nu sunt incluse în Raspberry Pi. Unele accesorii au fost însă
incluse în mai multe pac hete oficiale și neoficiale. Potrivit Fundației Raspberry Pi, p este 5 milioane
de Raspberry Pi au fost vândute înainte de februarie 2015, devenind cel mai bin e vândut calculator
britanic . Până în noiembrie 2016 au vândut 11 milioane de unități.
Prima generație (Raspberry Pi 1). Model a fost lansată în februarie 2012 . A fost urmată de
un model A m odelul simplificat și mai ieftin. În 2014, fundația a lansat o placă cu un design
îmbunătățit în Raspberry Pi 1 Model B +. Aceste panouri sunt de aproximativ dimensiunea cărții de
credit și reprezintă factorul standard de bază al formatului . Modelele îmbunătățite A + și B + au fost
lansate un an mai târziu. Un "modul de calcul" a fost lansat în aprilie 2014 pentru aplicațiile
încorporate, iar în noiembrie 2015 a fost lansat un nou model Raspberry Pi Zero cu dimensiuni mai
mici ș i capabilități de i ntrare / ieșire reduse (I / O) la prețul de 5 dolari . Raspberry Pi 2, care a
adăugat mai mult RAM, a fost lansat în februarie 2015. Raspberry Pi 3 Model B lansat în februarie
2016, este asociat cu capacități de boot WiFi, Bluetooth și USB. Începând din ianuarie 2017,
Raspberry Pi 3 Model B este cea mai nouă linie principală Raspberry Pi. Plăcile de Raspberry Pi se
găsesc la prețu ri între 5 și 35 USD. Începând cu 28 februarie 2017, a fost lansat Raspberry Pi Zero
W, care este identic cu Raspberry Pi Zero, dar are funcționalitatea Wi -Fi și Bluetooth a Raspberr y
Pi 3 pentr u 10 USD.

6
Toate modelele au un sistem Broadcom pe un chip (SoC), care include o unitate centrală de
procesare compatibilă ARM (CPU) și o unitate de procesare grafică on -chip (GPU, Video Core IV).
Viteza procesorului variază de la 700 MHz la 1, 2 GHz pentru modelul Pi 3 și memoria plăcii de la
256 MB la 1 GB RAM. Cardurile Secure Digital (SD) sunt utilizate pentru a stoca sistemul de
operare și memoria programată în dimensiunile SDHC sau MicroSDHC. Cele mai multe placi au
între unul și patru slot uri USB, ieșire video HDMI și compozit și o mufă de telefon de 3,5 mm
pentru audio. Nivelul de ieș ire inferior este limitat ca număr de pinii GPIO care susțin protocoale
comune precum I²C. Modelele B au un port Ethernet 8P8C, iar Pi 3 și Pi Zero W au la bo rd Wi -Fi
802.11n și Bluetooth. Fundația furnizează Raspbian, o distribuție Linux bazată pe Debian pentru
descărcare, precum și Ubuntu terță parte, Windows 10 IOT Core, RISC OS și distribuții de centre
media specializate. Promovează Python și Scratch ca lim bă principală de programare, cu suport
pentru multe alte limbi. Firmware -ul implicit este o sursă închisă, în timp ce este disponibilă o sursă
desch isă neoficială . Dispozitivul Raspberry Pi a evoluat prin mai multe versiuni care prezintă
variații ale capac ității de memorie și ale suportului dispozitivelor periferice.

1.4 Hardware

Această diagramă bloc (Figura1.6 ) descrie modelele A, B, A + și B +. Modelul A, A + și Pi
Zero nu au componentele pentru hub -uri Ethernet și USB. Adaptorul Ethernet este conectat intern la
un port USB suplimentar. În modelele A, A+ și Pi Zero, portul USB este conectat direct la sistem pe
un cip (SoC). Pe modelele Pi 1 Model B + și mai târziu, cipul USB / Ethernet conține un hub USB
cu cinci puncte, dintre care patru porturi sunt disponibile, în timp ce modelul Pi 1 Model B oferă
doar două. Pe portul Pi Zero, portul USB este de asemenea con ectat direct la SoC (Sistem pe un
cip), dar utilizează un port mic ro USB .

Figura 1.6
Descriere schema bloc
Pentru a putea realiza acest dispozitiv automat de comanda avem nevoie de o interfața electronica
care sa suporte diferite tipuri de comenzi ..

7
1.5 Procesor ul

Procesorul acestui dispozitiv poate sa execute o multitudine de comenzi. Raspberry Pi 2
utilizează un procesor quad -core ARM Cortex -A7 de 32 biți de 900 MHz.Broadcom BCM2835
SoC utilizat în prima generație Raspberry Pi este oarecum echivalentă cu chipul utilizat în
smartphone -urile de primă generație (CPU -ul său este o arh itectură mai veche ARMv6), care
include un procesor ARM1176JZF -S de 700 MHz, unitatea de procesare grafică Video Core IV
(GPU) și RAM. Are o memorie cache de nivel 1 (L1) de 16 KB și un cache de nivel 2 (L2) de 128
KB. Cache -ul de nivel 2 este folosit în principal de unitatea de procesare grafică. S oC este așezată
sub cipul RAM, deci numai marginea sa este vizibil ă.
Raspberry Pi 2 utilizează un SoC Broadcom BCM2836 SoC cu un procesor quad -core ARM
Cortex -A7 pe 32 de biți de 900 MHz (la fel ca multe smartphone -uri actuale), cu 256 KB cache
shared L2.
Raspberry Pi 3 folosește un Broadcom BCM2837 SoC cu un procesor qu ad-core ARM
Cortex -A53 pe 64 de biți pe 64 de biți, cu 512 KB cache shared L2.
Raspberry Pi 3, cu un procesor quad -core Cortex -A53, este descris ca fiind de 10 ori mai
mare decât perfor manta unui Raspberry Pi 1. Acest lucru a fost sugerat a fi în mare măs ură
dependent de sarcini de sarcină și instrucțiuni set de utilizare. Indicatorii de performanță au arătat că
Raspberry Pi 3 este de aproximativ 80% mai rapid decât Zmeura Pi 2 în sarcini paralele.
Raspberry Pi 2 include un procesor Quad -core Cortex -A7 ce rulează la 900 MHz și 1 GB
RAM. Este descris ca fiind de 4 -6 ori mai puternic decât predecesorul său. GPU este identic cu
originalul . În criteriile de referință paralelizate, Raspberry Pi 2 ar putea fi de până la 14 ori mai
rapid decât un Raspberry Pi 1 Mo del B +.
În timp ce funcționează la 700 MHz în mod implicit, prima generație de Raspberry Pi a oferit o
performanță în lumea reală aproximativ echival entă cu 0,041 GFLOPS. La nivelul procesorului,
performanța este similară cu cea a unui Pentium II de 300 MHz din 1997 -99. GPU oferă 1 Gpixel /
s sau 1,5 Gtexel / s de procesare grafică sau 24 GFLOPS de performanță generală de calcul.
Capacitățile grafice ale Raspberry Pi sunt aproape echivalente cu performanța produsului Xbox din
2001.
Rezultatul de referință pentru calculul nodului unic LINPACK are ca rezultat o performanță
medie de o singură precizie de 0,065 GFLOPS și o performanță medie dublă de precizie de 0,041
GFLOPS pentru o placă Raspberry Pi Model -B. Un grup de computere de 64 Raspberry Pi Model
B, numit "Iridis -pi", a obținut un rezultat LINPACK HPL de 1.14 GFLOPS (n = 10240) la 21 6 wați
pentru c. US $ 4000.

8
1.6 Overclocking

Chip -urile procesorului de la placa Raspberry Pi de la prima si a doua generație nu au nevoie
de răcire , cum ar fi un radiat or, cu excepția cazului in care cipul a fost overclockat, dar Raspberry Pi
2 SoC se poate încălzi mai mult decât de obicei in timpul overclockului . Cele mai multe chipsuri de
Raspberry Pi ar putea fi overclockate la 800 MHz, iar unele la 1000 MHz. Există rapoarte că
Raspberry Pi 2 poate fi în mod similar overclockată, în cazuri extreme, până la 1500 MHz
(eliminând toate caracteristicile de siguranță și limitările de supratensiune). În di stribuția Raspbian
Linux opțiunile de overclocking la pornire se pot face printr -o comandă de software ce rulează
"sudo raspi -config" fără a anula garanția. În aceste cazuri, Pi închide automat overclocking -ul în jos
dacă c ipul atinge 85 ° C , dar este posi bil să suprascrieți setările automate de supratensiune și
overclockare (anularea garanției); Un radiator cu dimensiuni corespunzătoare este necesar pentru a
proteja cipul de supraîncălzire gravă. Versiunile mai noi ale firmware -ului conțin opțiunea de a
alege între cinci presetări overclock ("turbo") care, atunci când sunt utilizate, încearcă să
maximizeze performanța SoC fără a afecta durata de viață a plăcii. Acest lucru se realizează prin
monitorizarea temperaturii de bază a cipului, încărcarea procesoru lui și reglarea dinamică a vitezei
ceasului și a tensiunii miezului. Atunci când cererea este scăzută pe CPU sau funcționează prea
fierbinte, performanța este diminuata , dar dacă procesorul are multe de făcut și temperatura cipului
este acceptabilă, perfor manța este temporar mărită cu viteze de ceas de până la 1 GHz, în funcție de
necesitate, astfel este folosita setarea turbo pentru o viteza de calcul mai mare .
Cele șapte presetări de overclockare sunt:
1. nici unul; 700 MHz ARM, nucleu 250 MHz, 400 MHz SDRAM , 0 overvolt,
2. modest; 800 MHz ARM, nucleu 250 MHz, 400 MHz SDRAM, 0 overvolt,
3. mediu; 900 MHz ARM, nucleu 250 MHz, SDRAM 450 MHz, 2 overvolt,
4. înalt; 950 MHz ARM, nucleu 250 MHz, SDRAM 450 MHz, 6 overvolt,
5. turbo; 1000 MHz ARM, miez de 500 MHz, SDRAM 600 MHz, 6 overvolt,
6. Pi 2; 1000 MHz ARM, 500 MHz core, 500 MHz SDRAM, 2 overvolt,
Pi 3; 1100 MHz ARM, miez de 550 MHz, SDRAM 500 MHz, 6 overvolt. În informațiile
despre sistem, viteza procesorului va apărea la 1200 MHz. Când viteza de ral anti scade la 600 MHz.
În cea mai mare presetare (turbo), ceasul SDRAM a fost inițial 500 MHz, dar acesta a fost
mai târziu schimbat la 600 MHz, deoarece 500 MHz provoacă uneori corupția cardului SD.
Simultan, în modul înalt, viteza de bază a ceasului a fost redusă de la 450 la 25 0 MHz, iar în modul
mediu de la 333 la 250 MHz.Raspberry Pi Zero ruleaza la 1 GHz.

9
Pe plăcile mai vechi de pe modelul B, 128 MB a fost alocata implicit GPU -ului, lăsând 128
MB pentru CPU. La primul model de eliberare de 256 MB model B (și modelul A), au f ost posibile
trei împărțiri diferite. Implicit, split -ul a fost de 192 MB (RAM pentru CPU), care ar trebui să fie
suficient pentru decodarea video standalone de 1080p sau pentru 3D simplu, dar probabil nu pentru
ambele împreună. 224 MB a fost doar pentru L inux, având doar un framebuffer de 1080p și este
probabil să nu reușească pentru niciun film sau 3D. 128 MB a fost pentru grele 3D, posibil și cu
decodare video (de exemplu, XBMC). Comparabil, Nokia 701 utilizează 128 MB p entru Broadcom
VideoCore IV . Pentr u noul model B cu 512 MB RAM, au fost lansate noi fiși ere standard de
memorie (arm256_start.elf, arm384_start.elf, arm496_start.elf) pentru 256 MB, 384 MB și 496 MB
procesor RAM (și 256 MB, 128 MB și 16 MB RAM video). Dar o săptămână sau mai târziu, RPF a
lansat o nouă versiune de start.elf care ar putea citi o nouă intrare în config.txt (gpu_mem = xx) și ar
putea atribui dinamic o sumă de RAM (de la 16 la 256 MB în 8 MB ). La GPU, așa că metoda mai
veche de împărțire a memoriei a devenit depășită, iar un si ngur start.elf a lucrat la fel pentru 2 56 și
512 MB Raspberry Pi .
Raspberry Pi 2 și Raspberry Pi 3 au 1 GB de memorie RAM. Raspberry Pi Zero și Zero W
au 512 MB de memorie RAM.

1.7 Capacitați de conectare la re țele

Modelul A, A + și Pi Zero nu au circuite Ethernet și sunt conectate în mod obișnuit la o rețea
utilizând un adaptor USB Ethernet sau un adaptor Wi -Fi furnizat de utilizator extern. La modelele B
și B +, portul Ethernet este furnizat de un adaptor USB Ethernet încorporat, utilizând cipul SMSC
LAN9514. [33] Raspberry Pi 3 și Pi Zero W (fără fir) sunt echipate cu 2.4 GHz WiFi 802.11n (150
Mbit / s) și Bluetooth 4.1 (24 Mbit / s) bazate pe chipul Broadcom BCM43438 FullMAC fără suport
oficial pentru modul Monitor, Pa chetul de firmware neoficia l și Pi 3 are de asemenea un port
Ethernet 10/100.

1.8 Periferice

Plăcile actuale de tip B incorporează patru porturi USB pentru conectarea perifericelor.
Raspberry Pi poate fi operat cu orice tastatură US B și mouse -ul generic USB. Poate fi folosit și cu
memorie USB, convertoare USB la MIDI și practic orice alt dispozitiv / component cu capacități
USB. Alte periferice pot fi atașate prin diferitele conexiuni și conectori de pe suprafața ramei Pi .

10
1.9 Capacitați Video

Primul Raspberry Pi 1 Model A, cu un port HDMI si un port video compozit RCA standard
pentru afișaje mai vechi
Controlerul video poate emite rezoluții standard TV moderne, cum ar fi HD și Full HD,
rezoluții mai mari sau mai mici ale monitorului și rezoluți i TV standard mai vechi. După cum este
expediat (adică, fără overclocking personalizat), acesta poate emite următoarele: 640 × 350 EGA;
640 × 480 VGA; 800 × 600 SVGA; 1024 × 768 XGA; HDTV de 1280 x 720 720p; Varianta
WXGA de 1280 × 768; Varianta de 1280 × 800 WXGA; 1280 × 1024 SXGA; Varianta de 1366 ×
768 WXGA; 1400 × 1050 SXGA +; 1600 × 1200 pixeli UXGA; 1680 × 1050 WXGA +; 1920 ×
1080 108 0p HDTV; 1920 × 1200 WUXGA.
Rezoluții mai mari, cum ar fi, până la 2048 × 1152, pot funcționa sau chiar 3840 × 2160 la
15 Hz (o rată de cadre prea mică pentru a convinge videoclipul) Rețineți, de asemenea, că
permiterea rezoluțiilor cele mai înalte nu implică faptul că GPU -ul poate decoda formate video la
acestea; De fapt, Pis este cunoscut pentru a nu lucra în mod fiabil pentru H.265 (la acele rezoluții
înalte), utilizate în mod obișnuit pentru rezoluții foarte înalte (cele mai multe formate, utilizate în
mod obișnuit, până la Full HD, nu funcționează).
Deși Raspberry Pi 3 nu are hardware -ul de decodare H.265, CPU -ul este mai puternic decât
predecesorii săi, potențial suficient de rapid pentru a permite decodarea videoclipurilor codate
H.265 în software. GPU -ul din Raspberry Pi 3 rulează la frecvențe mai mari ale ceasului de 300
MHz sau 400 MHz, comparativ cu versiunile an terioar e care au rulat la 250 MHz.
De asemenea, Raspberry Pis poate genera semnale video compozite 576i și 480i, așa cum se
utilizează pe ecrane de televiziune vechi (CRT) și monitoare mai puțin costisitoare prin conectorii
standard – fie conector RCA, fi e conector de 3,5 mm în funcție de modele. Standardele de semnal
TV acceptate sunt PAL -BGHID, PA L-M, PAL -N, NTSC și NTSC -J.
Niciunul dintre modelele actuale Raspberry Pi nu au un ceas încorporat în timp real, deci nu
pot să țină evidența timpului independ ent. Ca soluție, un program care rulează pe Pi poate recupera
timpul de la un server de timp din rețea sau de la intrarea utilizatorului la momentul încărcării,
cunoscând astfel timpul în timp ce este pornit. Pentru a asigura coerența timpului pentru siste mul de
fișiere, Pi salvează automat timpul pe care îl are la închidere și reinstalează acest timp la boot.
Se poate adăuga un ceas hardware în timp real cu baterie, cum ar fi DS1307, care este
complet codificat binar (adesea prin interfața I²C).

11
1.10 Desc riere conectori GPIO

Conectori GPIO Raspberry Pi 1 (Figura1.7) Modelele A + și B +, Pi 2 Modelul B, Pi 3
Modelul B și Pi Zero (și Zero W) GPIO J8 au un pinout de 40 de pini. Modelele A și B au numai
primi 26 de pini.
GPIO# 2nd func. Pin# Pin# 2nd func. GPIO#
+3.3 V 1 2 +5 V
2 SDA1 (I²C) 3 4 +5 V
3 SCL1 (I²C) 5 6 GND
4 GCLK 7 8 TXD0 (UART) 14
GND 9 10 RXD0 (UART) 15
17 GEN0 11 12 GEN1 18
27 GEN2 13 14 GND
22 GEN3 15 16 GEN4 23
+3.3 V 17 18 GEN5 24
10 MOSI (SPI) 19 20 GND
9 MISO (SPI) 21 22 GEN6 25
11 SCLK (SPI) 23 24 CE0_N (SPI) 8

12
GND 25 26 CE1_N (SPI) 7
(Modelele Pi 1, A si B se opresc aici)
EEPROM ID_SD 27 28 ID_SC EEPROM
5 N/A 29 30 GND
6 N/A 31 32 12
13 N/A 33 34 GND
19 N/A 35 36 N/A 16
26 N/A 37 38 Digital IN 20
GND 39 40 Digital OUT 21

Figura 1.7

Model B rev. 2 (Figura 1.8) are de asemenea, un pad (numit P5 pe placă și P6 pe schema) de 8 pini care oferă
acces la alte 4 conexiuni GPIO.

Function 2nd func. Pin# Pin# 2nd func. Function
N/A +5 V 1 2 +3.3 V N/A
GPIO28 GPIO_GEN7 3 4 GPIO_GEN8 GPIO29

13
GPIO30 GPIO_GEN9 5 6 GPIO_GEN10 GPIO31
N/A GND 7 8 GND N/A

Figura 1.8
Modelele A și B oferă acces GPIO la LED -ul de stare ACT folosind GPIO 16. Modelele A +
și B + oferă accesul GPIO la LED -ul de stare ACT utilizând GPIO 47 și LED -ul de stare a puterii
utilizând GPIO 35.
1.11 Accesorii care se pot atasa la Raspberry Pi

Camera – Placa de cameră este livrat ă cu un cablu flexibil care se conectează la conectorul CSI
situat între porturile Ethernet și HDMI. În Raspbian, utilizatorul trebuie să permită utilizarea
panoului de cameră prin rularea Raspi -config și selectarea opțiunii pentru cameră. Costul modulului
camerei este de 20 EUR în Europa . Poate produce video de 1080p, 720p și 640x480p. Dimensiunile
sunt de 25 mm × 20 mm × 9 mm. În mai 2016, camera v2 a fost lansata este o cameră o camera cu
rezoluția de 8 mega pixeli .
Gertboard – Dispozitiv achi ționat de Fundația Raspberry Pi, conceput în scopuri educaționale, care
extinde pinii GPIO de la Raspberry Pi pentru a permite interfața și controlul LED -urilor,
comutatoarelor, semnalelor analogice, senzorilor și altor dispozitive. Acesta include, de asemenea,
un controler opțional compa tibil cu Arduino pentru in terfața cu dispozitivul Pi. Camera cu
infraroșu – În octombrie 2013, fundația a anunțat că va începe să producă un modul de cameră fără
filtru infraroșu numit Pi NoIR.
HAT (Hardware Attached on Top) placi de expansiune – Impreuna cu modelul B + , inspirat de
placile pentru dezvoltarea Arduino, interfața pentru plăcile HAT a fost creata de Fundația Raspberry
Pi. Fiecare placă HAT poartă un mic EEPROM (de obicei un CAT24C32WI -GT3) care conține
detaliile relevante ale plăcii , astfel î ncât OS -ul Raspberry Pi să fie informată despre HAT și detaliile
tehnice ale acestuia, relevante pentru OS ut ilizând HAT. Detaliile mecanice ale unei plăci HAT,
care utilizează cele patru găuri de montare în formația lor dreptunghiulară, sunt disponibile o nline.

14
Capitolul 2
Sistemul de operare si cont rolul pinilor
2.1 Sistemul de operare Raspbian

Raspbian [4] este un sistem de operare bazat pe Debian pentru computerul Raspberry Pi.
Acum este oficial oferită de Fundația Raspberry Pi, ca sistem principal de operare pentru familia
computerelor single -board Raspberry Pi. Raspbian a fost creat de Mike Thompson și Peter Gr een ca
un proiect independent. Construcția inițială a fost finalizată în iunie 2012. Sistemul de operare este
încă în curs de dez voltare activă. Raspbian este foarte optimizat pentru procesoarele ARM cu
performanțe reduse ale liniei Raspberry Pi. Raspbian foloseste PIXEL, Pi Improved Xwindows
Environment, Lightweight ca mediul de lucru principal al desktop -ului ca cea mai recenta
actualizare. Acesta este alcătuit dintr -un mediu desktop LXDE modificat și managerul de ferestre de
stivuire Openbox cu o temă nouă și câteva alte modificări. Distribuția este livrată cu o copie a
programului de calcul algebră Mathematica și o versiune a Min ecraft numită Minecraft Pi, precum
și o versiune ușoară a lui Chromium ca cea mai recentă versiune.

2.2 Controlarea pinilor de Intrare/ Iesire din linie de comanda

Se seteaza permisiune de root(administrator) prin comanda:
sudo -i
Configurare pentru a controla pinul ca ieșire. Se inlocuieste numarul 17 în următoarele
comenzi pentru numărul GPIO de iesire (nu pentru numărul PIN -ului).
echo "17 " > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio23/direction
Controlul statusul pinului de ieșire
echo "1" > /sys/class/gpio/gpio17 /value
echo "0" > /sys/class/gpio/gpio17 /value
Configurație pentru a seta PIN -ul ca intrare
Se inlocuieste numarul 17 în următoarele comenzi pentru numărul GPIO de iesire (nu pentru
numărul PIN -ului)
echo "17 " > /sys/class/g pio/export
echo "in" > /sys/class/gpio/gpio23/direction

15
Pentru a citi starea sa se foloseste comanda
cat /sys/class/gpio/gpio23/value
Pentru a elibera un pin dupa folosire se foloseste comanda
echo "17 " > /sys/class/gpio/unexport

Capitolul 3
Software utilizat
3.1 Apache HTTP Server

Pentru a reuși comandarea dispozitivului de la distanta via internet, este nevoie de un de un software
dedicat. Pentru aceasta am folosit Apache HTTP Server [5], fiind unul dintre cele mai stabile, gratuit si relativ
usor de configurat. Mai jos este descrierea acestui software. Mare parte din informatie este preluata de pe
https://httpd.apache.org/ .
Apache HTTP Server P roject este un efort de dezvoltare colaborativă a software -ului, menit
să creeze o implementare robustă, comercială, funcțională și liberă a codului sursă a unui server
HTTP (Web). Proiectul este gestionat în comun de un grup de voluntari localizați în înt reaga lume,
folosind Internetul și Web -ul pentru a comunica, planifica și dezvolta serverul și documentația
aferentă. Acest proiect face parte din Apache Software Foundation. În plus, sute de utilizatori au
contribuit cu idei, cod și documentație la proiec t. Acest fișier este destinat să descrie pe scurt istoria
serverului HTTP Apache și să recunoască numeroși contribuabili. Serverul Apache HTTP, este un
software gratuit pentru serverul de tip open -source, cu platformă open -source, lansat în condițiile
Apac he License 2.0. Apache este dezvoltat și întreținut de o comunitate deschisă de dezvoltatori,
sub auspiciile Apache Software Foundation. Cel mai frecvent utilizat pe un sistem asemănător
sistemu lui Unix (de obicei Linux), programul este disponibil și pentr u Microsoft Windows.
Versiunea 2.0 a îmbunătățit suportul pentru non -Unix, de ex. Windows și OS / 2 (și eComStation).
Versiunile vechi ale Apache au fost portate pe ntru a rula, de ex. OpenVMS și NetWare. Inițial bazat
pe serverul NCSA HTTPd, dezvoltarea Ap ache a început la începutul anului 1995, după ce sa lucrat
la codul NCSA stagnat. Apache a jucat un rol -cheie în creșter ea inițială a World Wide Web ,
depășind repede NCSA HTTPd ca server HTTP dominant și a rămas cel mai popular din aprilie
1996. În 2009, a devenit primul software de servere w eb pentru a servi mai mult de 100 de milioane

16
de site -uri web. Începând cu iulie 2016, Apache a rămas cel mai utilizat software de server web,
estimat a servi 46% din toate site -urile web active și 43% din cele mai multe milioane de site -uri
web. Mai mult, Apache Software Foundation este o entitate organică; Cei care beneficiază de acest
software prin folosirea acestuia contribuie adesea la aceasta prin furnizarea de îmbunătățiri ale
caracteristicilor, reparații de erori și sprijin pentru alții în listele publice și grupurile de știri. Efortul
depus de un anumit indiv id este de obicei destul de ușor, dar produsul rezultat este foarte puternic.
Aceste tipuri de comunități se pot întâmpla numai cu software liber disponibil – atunci când cineva a
plătit pentru software -ul, de obicei nu sunt dispuși să -și repare bug -urile gratuit. Se poate
argumenta, prin urmare, că puterea lui Apache provine din faptul că este gratuită și dacă ar fi făcut
"nu liberă", ar suferi enorm, chiar dacă acești bani au fost cheltuite într -o echipă reală de dezvoltare.
În conformitate cu întrebările frecvente de pe site -ul proiectului Apache, numele Apache a
fost ales din respectul tribului nativ american Apache și abilitățile lor superioare în război și
strategie. Numele a fost considerat pe scară largă a fi un joc de cuvinte pe serverul "A Patchy"
(deoarece a fost un s et de patch -uri software). Atunci când apare Apache, numele procesului este
uneori httpd, care este scurt pentru "daemon HTTP".
Prezentare generală . Apache acceptă o varietate de caracteristici, multe implementate ca
module compilate care extind funcționalitatea de bază. Acestea pot varia de la suportul limbajului
de programare din partea serverului la schemele de autentificare. Unele interfețe lingvistice comune
acceptă Perl, Python, Tcl și PHP. Modulele de autentificare populare incl ud mod_access, mod_auth,
mod_digest și mod_auth_digest, succesorul mod_digest. Un exemplu de alte caracteristici includ
suportul Secure Sockets Layer și Transport Layer Security (mod_ssl), un modul proxy
(mod_proxy), un modul de rescriere a adreselor URL ( mod_rewrite), fișierele jurnal personalizate
(mod_log_config) și suportul de filtrare (mod_include și mod_ext_filter). Metodele populare de
comprimare de pe Apache includ modulul extensie externă, mod_gzip, implementat pentru a ajuta
la reducerea mărimii ( greutății) paginilor Web difuzate prin HTTP. ModSecurity este un motor de
detectare și prevenire a intruziunilor deschise pentru aplicații Web. Apache -urile pot fi analizate
printr -un browser web folosind scripturi gratuite, cum ar fi AWStats / W3Perl sau Visitors.
Virtualizarea permite o instalare Apache pentru a servi multe site -uri web diferite. De exemplu, o
mașină cu o singură instalare Apache ar putea să ruleze simultan www.example.com,
www.example.org, test47.test -server.example.edu etc. Apache oferă mesaje de eroare configurabile,
baze de date de autentificare bazate pe DBMS și conținut negociere. Este, de asemenea, susținută de
mai multe interfețe grafice de utilizator (GUI). Acesta acceptă autentificarea parolei și autentificarea
certificatului dig ital. Deoarece codul sursă este disponibil în mod liber, oricine poate adapta serverul
pentru nevoi specifice și există o mare bibliotecă publică de programe de completare Apache.

17
3.2 Performanță

În loc să implementeze o singură arhitectură, Apache oferă o varietate de module de
multiprocesare (MPM), care permit Apache să ruleze într -un proces hibrid (proces și thread) sau
hibrid pentru evenimente, pentru a se potrivi mai bine cu cerințele A fiecărei infrastructuri
particulare. Aceasta implică faptul că a legerea MPM corectă și configurarea corectă sunt
importante. În cazul în care trebuie realizate compromisuri în ceea ce privește performanța, designul
Apache este acela de a reduce latența și de a mări capacitatea de producție, relativ la manipularea
pur ș i simplu a mai multor cereri, asigurând astfel o prelucrare consecventă și fiabilă a cererilor în
termenele rezonabile. Pentru livrarea de pagini statice, seria Apache 2.2 a fost considerată
semnificativ mai lent decât nginx și lac. Pentru a rezolva aceast ă problemă, dezvoltatorii Apache au
creat Event MPM, care combină utilizarea mai multor procese și mai multe fire pe proces într -o
buclă asin cronă bazată pe evenimente. Această arhitectură, și modul în care a fost implementat în
seria Apache 2.4, oferă per formanțe echivalente sau ușor mai bune decât serverele bazate pe
evenimente, după cum citează Jim Jagielski și alte sur se independente. Cu toate acestea, unele
valori de referință independente, dar semnificativ depășite, arată că acestea sunt încă la jumăt ate.

3.3 Licențiere

Aplicația de licențiere Apache 2.0 (din licența precedentă 1.1) a fost relicentiata în baza de
date Codul Apache HTTP Server și Apache HTTP Server 1.3.31 și 2.0.49 au fost primele versiuni
utilizând O nouă licență. Proiectul OpenBSD nu le -a plăcut schimbarea și a continuat utilizarea
versiunilor Apache de pre -2.0, în mod efectiv forțându -l pe Apache 1.3.x în scopurile sale. Ei au
înlocuit -o inițial cu Nginx și, imediat după aceea, au făcut propria lor înlocuire, OpenBSD Httpd, pe
baza proiectului relayed. Versiuni 1.1: Licența Apache 1.1 a fost aprobată de ASF în 2000:
Schimbarea primară a licenței 1.0 este în "clauza de publicitate" (secțiunea 3 a licenței 1.0);
Produsele derivate nu mai sunt obligate să includă atribuirea în materialele lor publicitare, ci numai
în documentația lor. Versiunea 2.0: ASF a adoptat licența Apache 2.0 în ianuarie 2004. Scopurile
declarate ale licenței au inclus facilitarea licenței pentru proiectele non -ASF, îmbunătățirea
compatibilității cu softwa re-ul GPL, permițând ca licența să fie inclusă prin referință. Enumerate în
fiecare dosar, clarificând licența pentru contribuții și solicitând o licență de brevet pentru contribuții
care ar încălca în mod necesar brevetele proprii ale contribuabilului.

18
3.4 Dezvoltar e

Apache HTTP Server Project este un efort de dezvoltare colaborativă a software -ului, menit
să creeze o implementare robustă, comercială, bogată în funcții și disponibilă în mod gratuit a unui
cod HTTP (Web). Proiectul este gestionat în comun de un grup de voluntari localizați în întreaga
lume, folosind Internetul și Web -ul pentru a comunica, planifica și dezvolta serverul și
documentația aferentă. Acest proiect face parte din Apache Software Foundation. În plus, sute de
utilizatori au contribuit cu idei, cod și document ație la proiect. Apache 2.4 a renunțat la suport
pentr u platformele BeOS, TPF și chiar mai în vârstă .

3.5 Limbajul de programare PHP

PHP [6] este un limbaj de scripting din partea serverului conceput în primul rând pentru
dezvoltarea web, dar folosit și ca limbaj de programare cu scop general. Inițial creat de Rasmus
Lerdorf în 1994, implementarea de referință PHP este acum produsă d e The PHP Development
Team. PHP iniția l a st at pentru Personal Home Page , dar acum se referă la acronimul recursiv P HP:
Hypertext Preprocessor. Codul PHP poate fi încorporat în marcajul HTML sau HTML5 sau poate fi
utilizat în combinație cu diferite sisteme de șabloane web, sisteme de gestionar e a conținutului web
și cadre web. Codul PHP este de obicei prelucrat de un interpret PHP implementat ca modul în
serverul web sau ca executabil al Interfeței Generale Gateway (CGI). Programul de server web
combină rezultatele codului PHP interpretat și ex ecutat, care poate fi orice tip de date, inclusiv
imagini, cu pagina web generată. Codul PHP poate fi executat și cu o interfață de linie de comandă
(CLI) și poate fi folosit pentru implementarea ap licațiilor grafice separate. Interpretul standard PHP,
alimentat de Zend Engine, este un software liber lansat sub licența PHP. PHP a fost portat pe scară
largă și poate fi implementat pe majoritatea serverelor web pe aproape toate sistemele de o perare și
platformă, gratuit . Limbajul PHP a evoluat fără o specific are sau un standard formal, până în 2014,
lăsând interpretorul canonic PHP drept standard de facto. Începând cu anul 2014, lucrările au
continuat să cree ze o specificare PHP formală . Arhitectura LAMP a devenit populară în industria
web ca o modalitate de impleme ntare a aplicațiilor web. PHP este folosit în mod obișnuit ca P în
acest pachet alături de Linux, Apache și MySQL, deși P poate de asemenea să se refere la Python,
Perl sau la un amestec din cele trei. Pachete similare, WAMP și MAMP, sunt de asemene a
disponibile pentru Windows și MacOS, cu prima literă în picioare pentru sistemul de operare
respectiv. Deși atât PHP cât și Apache sunt furnizate ca parte a instalării bazei de date macOS,
utilizatorii acestor pachete caută un mecanism de instalare mai s implu, care poate fi mai ușor de
actualizat.

19

3.6 Despre limbajul PHP

Dezvoltarea PHP [6] a început în 1995, când Rasmus Lerdorf a scris mai multe programe
Common Gatew ay Interface (CGI) în C pe care le folosea pentru a -și menține pagina personală. El
le-a extins pentru a lucra cu formularele web și pentru a comunica cu bazele de date și a numit
această implementare "Personal Home Page / Forms Interpreter" sau PHP / FI. PHP / FI ar putea
ajuta la construirea de aplicații web simple și dinamice. Pentru a a ccelera raportarea de erori și
pentru a îmbunătăți codul, Lerdorf a anunțat inițial lansarea lui PHP / FI ca "Instrumente personale
de acasă pagină (Instrumente PHP) versiunea 1.0" pe grupul de discuții Usenet
comp.infosystems.www.authoring. cgi la 8 iunie, 1995. Această versiune a avut deja funcționalitatea
de bază pe care o are PHP în 2013. Aceasta include variabilele asemănătoare cu Perl, manipularea
formularelor și capacitatea de a încorpora codul HTML. Sintaxa seamănă cu cea a lui Perl, dar era
mai simp lă, mai limitat ă și mai puțin consecventă. Lerdorf nu intenționa ca PHP să devină un nou
limbaj de programare, dar a crescut organic, iar Lerdorf observând retrospectiv: "Nu știu cum să o
opresc, nu a fost niciodată intenția de a scri e un limbaj de program are. Nu am nici o idee cum să
scriu un limbaj de programare, tocmai am adăugat următorul pas logic pe drum ". O echipă de
dezvoltare a început să se formeze și, după luni de lucru și testări beta, a lansat oficial PHP / FI 2 în
Noiembrie 1997. Faptul că PH P nu avea un design general original, ci a fost dezvoltat în mod
organic, a condus la denumirea incoerentă a funcțiilor și la ordonarea inconsecventă a parametrilor
lor. În unele cazuri, numele funcțiilor au fost alese pentru a se potrivi cu librăriile de nivel inferio r
pe care PHP le "înfășura" , în timp ce în unele versiuni foarte timpurii ale PHP lungimea numelor
funcțiilor a fost folosită intern ca o funcție hash, Au fost alese pentru a îmbunătăți distribuția
valorilor hash.
PHP 3 și Zeev Suraski și Andi Gutmans au rescris parserul în 1997 și au format baza PHP 3,
schimbând numele limbii în acronimul recursiv PHP: Hypertext Preprocesso r Ulterior, testarea
publică a PHP 3 a început și lansarea oficială a venit în iunie 1998. Suraski și Gutmans au î nceput
apoi o nouă rescriere a nucleului PHP, produ când motorul Zend în 1999. Ei au fondat, de asemenea,
Zend Techno logies în Ramat Gan, Israel. La 22 mai 2000, a fost lansat PHP 4, ali mentat de motorul
Zend 1.0. Începând cu luna august 2008, această sucur sală a ajuns la versiunea 4.4.9. PHP 4 nu mai
este în curs de dezvoltare și nu va fi lansată nicio actualizare de securi tate. PHP 5 [modificat] Pe 13
iulie 2004, PHP 5 a fost lansat, alim entat de noul Zend Engine II . PHP 5 a inclus funcții noi precum
supor t îmbunătățit pentru programarea orientată pe obiecte, extensia PHP Data Objects (PDO) (care
definește o interfață ușoară și consistentă pentru accesarea bazelor de date) și numeroase
îmbunătățiri ale performanței. În 2008, PHP 5 a devenit singura versiune stabilă aflată în curs de

20
dezvoltare. Legarea statică târzie lipsea de la PHP și a fost adăugată în versi unea 5.3. Multe proiecte
cu surse deschise de tip open -source au încetat să susțină PHP 4 în noul cod începând cu data de 5
februarie 2008, d atorită i nițiativei GoPHP5 furnizată de un consorțiu de dezvoltatori PHP care
promovau trecerea de l a PHP 4 la PHP 5. În timp, interpreții PHP au devenit disponibili în
majoritatea sistemelor de operare existente pe 32 de biți și pe 64 de biți, fie prin construirea lor din
codul sursă PHP, fie prin utilizar ea binarelor pre -construite . Pentru versiunile 5.3 și 5.4 ale PHP,
singurele distribuții binare Microsoft Windows disponibile au fost construi te pe 32 de biți x86,
necesitând un mod de compatibilitate Windows pe 3 2 de biți în timp ce utilizează Internet
Information Services (IIS) pe o platformă Windows pe 64 de biți . Versiunea PHP de 5.5 a generat
versiuni disponibile pe 64 de biți x86 -64 pentru Microsoft Windows. PHP 6 și Unicode PHP a
primit critici din cauza lip sei suportului nativ Unicode la nivel de limbă centrală, în loc să sprijine
numai șiruri de octeți. În 2005, un proiect condus de Andrei Zmievski a fost inițiat pentru a aduce
suportul nativ Unicode pe tot parcursul PHP, prin încorporarea bibliotecii Compo nente
Internaționale pentru Unicode (ICU) și reprezentând strings de te xt ca UTF -16 pe plan intern .
Deoarece acest lucru ar determina schimbări majore atât în interiorul limbii, cât și în codul de
utilizator, a fost planificată lansarea acestei versiuni ca versiune 6.0 a limbii, împreună cu alte
caracteristici majore care au fost a poi în curs de dezvoltare. Cu toate acestea, un deficit de
dezvoltatori care au înțeles modificările necesare și problemele de performanță generate de
conversia către și din UTF -16, care este rar folosit într -un context web, a dus la întârzieri în proiect.
Ca rezultat, o versiune PHP 5.3 a fost creată în 2009, cu multe funcții non -Unicode retransferate din
PHP 6, în special spații de nume. În martie 2010, proiectul în forma sa ac tuală a fost abandonat
oficial și a fost pregătită o versiune PHP 5.4 care conține cele mai multe caracteristici rămase non –
Unicode din PHP 6, cum ar fi trasaturile ș i închiderea re -obligatorie . Speranțele inițiale au fost că va
fi format un nou plan pentr u integrarea Unicode, dar din 2014 nici unul nu a fost adoptat.
În perioada 2014 -2015, a fost dezvoltată o nouă versiune PHP majoră, care a fost
numerotată în PHP 7. Numerotarea acestei versiuni a implicat o dezbatere. În timp ce experimentul
PHP 6 Unicode nu a fost lansat niciodată, mai multe articole și titluri de carte au făcut referire la
numele PHP 6, ceea ce ar fi putut provoca confuzie în cazul în care o nouă versiune va reutiliza
numele. După vot, a fost ales numele PHP 7. Fundația PHP 7 este o fili ală PHP care a fost inițial
denumită PHP next generation (phpng). Acesta a fost realizat de Dmitry Stogov, Xinchen Hui și
Nikita Popov și a avut ca scop optimizarea performanței PHP prin refăcând Zend Engine pentru a
utiliza structuri de date mai compacte cu o localitate îmbunătățită a cache -ului, păstrând în același
timp compatibilitatea lingvistică aproape completă. Începând cu 14 iulie 2014, referințele bazate pe
WordPress, care au servit ca principală suită de referință pentru proiectul phpng, au arătat o creștere
de aproape 100% a performanței. Modificările de la phpng ar trebui, de asemenea, să ușureze

21
îmbunătățirea performanței în viitor, deoarece structurile de date mai compacte și alte modificări
sunt considerate mai potrivite pentru o migrare reuși tă la un compilator just -in-time (JIT). Din cauza
modificărilor semnificative, motorul Zend redesenat este numit Zend Engine 3, urmând Zend
Engine 2 utilizat în PHP 5. Din cauza schimbărilor interne majore în phpng, trebuie să primească un
nou număr de ver siune majoră a PHP, mai degrabă decât o mică versiune PHP 5, în conformitate cu
procesul de lansare al PHP. Versiunile majore ale PHP au permisiunea de a rupe compatibilitatea
înapoi a codului și, prin urmare, PHP 7 a prezentat o oportunitate pentru alte î mbunătățiri dincolo de
phpng care necesită pauze de compatibilitate înapoi, inclusiv utilizarea mai extinsă a excepțiilor,
redeschiderea sintaxei variabile pentru a fi mai mu lt Consecventă și completă și deprecierea sau
îndepărtarea diferitelor caracter istici ale moștenirii. De asemenea, PHP 7 a introdus noi
caracteristici ale limbajului, inclusiv declarațiile de tip intoarcere pentru funcții, care completează
declarațiile de tip de parametru existente și suport pentru tipurile scalare (întreg, float, șir ș i
boolean) în declarațiile de tip parametru și retur.
Începând cu data de 28 iunie 2011, grupul PHP a implementat o cronologie pentru lansare a
noilor versiuni ale PHP. În acest sistem, cel puțin o eliberare ar trebui să aibă loc în fiecare lună. O
dată pe an, ar trebui să apară o versiune minoră care poate include noi caracteristici. Fiecare
versiune minoră ar trebui să fie cel puțin susținută timp de doi ani cu soluții de securitate și bug -uri,
urmate de cel puțin un an de remediere a securității, pentru u n total de trei ani de eliberare pentru
fiecare eliberare minoră. Nu există caracteristici noi, cu excepția cazului în care sunt mici și
autonome, să fie introduse într -o eliberare minoră în timpul procesului de eliberare de trei ani.
Următoarele "Bună ziu a, lume!" Programul este scris în cod PHP încorporat într -un
document HTML:
<!DOCTYPE html>
<html >
<head >
<title>PHP Test</ title>
</head >
<body >
<?php echo '<p>Bună ziua, lume! </p>' ; ?>
</body >
</html >
Cu toate acestea, deoarece nu există o cerință pentru ca codul PHP să fie încorporat în
HTML, cea mai simplă versiune de „Bună ziua, lume !”. Pot fi scrise astfel, cu eticheta de închidere
omisă ca preferată în fișiere care conțin cod PHP pur.

22
<?=" Bună ziua, lume! ";?>
Interpretul PHP execută doar codul PHP în cadrul delimitatorilor săi. Orice în afara
delimitatorilor săi nu este procesat de PHP, deși textul non -PHP este încă supus structurilor de
control descrise în cod PHP. Cele mai comune delimitari su nt <? Php to open și?> Pentru a închide
secțiunile PHP. Forma scurtată <? Există de asemenea. Acest delimiter scurt face ca fișierele de
script să fie mai puțin portabile, deoarece suportul pentru acestea poate fi dezactivat în configurația
locală PHP și, prin urm are, este descurajat. Cu toate acestea, nu există recomandări împotriva
utilizări i etichetei scurte <? =. Înainte de PHP 5.4.0, această sintaxă scurtă pentru ecou ()
funcționează numai cu setarea de configurare short_open_tag activată, în timp ce p entru PHP 5.4.0
și ulterior este întotde auna disponibilă. Scopul acestor delimitatori este de a separa codul PHP de
conținut non -PHP, cum ar fi codul Ja vaScript sau marcajul HTML. Prima formă de delimitatori, <?
Php și?>, În XHTML și în alte documente XML, creează instrucțiuni de pro cesare XML corect
formate. Aceasta înseamnă că amestecul rezultat de cod PHP și alte marcări în fișierul de pe server
este în sine XML bine format. Variabilele sunt prefixate cu un simbol al dolarului, iar un tip nu
trebuie spec ificat în prealabil. PHP 5 a introdus sugestii de tip care permit funcțiilor să -și forțeze
parametrii să fie obiecte dintr -o anumită clasă, rețele, interfețe sau funcții de apel invers. Cu toate
acestea, înainte de PHP 7.0, tip sugestii nu ar putea fi folo site cu tipuri scalare, cum ar fi întreg sau
șir. Spre deosebire de nume de funcții și de clase, numele variabilelor sunt sensibile la minuscule.
Ambele șiruri duble ("") și heredoc oferă posibilitatea de a interpola valoa rea unei variabile în șir.
PHP tratează liniile noi ca spații libere în forma unei limbi libere, iar declarațiile sunt term inate cu
punct și virgulă. PHP are trei tipuri de sintaxă de comentariu: / * * / marchează bloc și comentarii
inline; // precum și # sunt utilizate pentru comenta rii dintr -o singură linie. Instrucțiunea ecou este
una din mai multe facilități pe care PHP le oferă pentru a scoate text, de ex., Într -un browser web. În
ceea ce privește cuvintele cheie și sintaxa limbajului, PHP este similar cu sintaxa stilului C. Dacă
condițiile, pentru și în timp ce buclele și funcțiile returnate sunt similare în sintaxă cu limbi precum
C, C ++, C #, Java și Perl. Următorul este un exemplu de PHP pentru buclă:
<?php
for ($x = 0; $x <= 100; $x++) {
echo "The number is: $x <br>" ;
}
?>

23
Tipuri de date PHP stochează numere întregi într -o gamă dependentă de platformă, fie un
număr întreg semnat pe 64 de biți sau pe 32 de biți. Unitățile nesemnate sunt convertite în valori
semnate în anumite situații; Acest comportament este diferit de ce l al altor limbi de programare.
Integer variabilele pot fi atribuite folosind zecimal (pozitiv și negativ), octale, hexazecimal, și
notații binare. Numerele punctelor în virgulă sunt de asemenea stocate într -o gamă specifică
platformei. Acestea pot fi spec ificate folosind notarea cu puncte în virgulă sau două fo rme de
notație științifică. PHP are un tip boolean nativ care este similar cu tipurile booleene native din Java
și C ++. Utilizând regulile de conversie de tipul Boolean, valorile non -zero sunt inter pretate ca
adevărate și zero ca false, ca în Perl și C ++. Tipul de date nul reprezintă o variabilă care nu are
nicio valoare; NULL este singura valoare permisă pentru acest tip de date. Variabilele de tip
"resursă" reprezintă referiri la resurse din surse externe. Acestea sunt de obicei create de funcții
dintr -o extensie specială și pot fi procesate numai de funcții din aceeași extensie; Exemplele includ
resurse de fișiere , imagini și baze de date. Arrays pot conține elemente de orice tip pe care PHP le
poate gestiona, inclusiv resurse, obiecte și alte rețele. Ordinea este păstrată în liste de valori și în
hashes cu ambele chei și valori, iar cel e două pot fi amestecate. De asemenea, PHP acceptă șiruri de
caractere, care pot fi folosite cu citate simple, ci tate dublă, s intaxă nowdoc sau heredoc. Biblioteca
Standard PHP (SPL) încearcă să rezolve problemele standard și implementează interfețe și clase
eficiente de acces la date. Funcții [edit] PHP definește o gamă largă de funcții în limba centrală și
multe su nt de asemenea disponibile în diferite extensii; Aceste funcții sunt bine documentate în
documentația PHP online . Cu toate acestea, biblioteca încorporată are o mare varietate de convenții
de numire și inconsecvențe asociate, așa cum este descris în istoricul de mai sus. Funcțiile
personalizate pot fi definite de dezvoltator, de exemplu:

function myAge ($birthYear ) { // defines a function, this one is named "myAge"
$yearsOld = date('Y') – $birthYear ; // calculates the age
return $yearsOld . ' year' . ($yearsOld != 1 ? 's' : ''); // returns the age in a descriptive form
}

echo 'I am currently ' . myAge (1981 ) . ' old.' ; // outputs the text concatenated
// with the return value of myAge()
// As the result of this syntax, myAge() is called.

24
În 2017, rezultatul programului de eșantion de mai sus este "în prezent am 36 de ani". În
locul indicato rilor de funcții, funcțiile din PHP pot fi menționate de un șir care conține numele lor.
În acest mod, funcțiile normale PHP pot fi utilizate, de exemplu, ca callbacks s au în tabelele de
funcții. Funcțiile definite de utilizator pot fi create în orice mome nt fără a fi prototipate. Funcțiile
pot fi definite în interiorul blocurilor de coduri, permițând o decizie privind timpul de execuție în
ceea ce privește definirea sau nu a unei funcții. Există o funcție function_exists care determină dacă
o funcție cu un nume dat a fost deja definită. Apelurile de funcții trebuie să utilizeze paranteze, cu
excepția funcțiilor de constructor de clasă zero -argument numite cu operatorul PHP nou, caz în care
parantezele sunt opționale. Până la PHP 5.3, suportul pentru funcții și închideri anonime nu exista în
PHP. În timp ce create_function există încă de la PHP 4.0.1, este vorba doar de un wrapple subț ire
în jurul valorii de eval , care permite ca funcțiile PHP să fie create în timpul execuției programului.
PHP 5.3 a adăugat o sintaxă pentru a defini o funcți e anonimă sau "închidere" care poate capta
variabile din domeniul de aplicare înconjurător:
function getAdder ($x) {
return function ($y) use ($x) {
return $x + $y;
};
}

$adder = getAdder( 8);
echo $adder (2); // prints "10"

În exemplul de mai sus, funcț ia getAdder creează o închidere folosind argumentul $ x (cuvântul
cheie importă o variabilă din contextul lexical), care ia un argument suplimentar $ y și returnează
închiderea creată apelantului. O astfel de funcție este un obiect de primă clasă, adică poate fi stoc at
într-o variabilă, trecut ca parametr u pentru alte funcții etc. În mod neobișnuit, pentru o limbă
dinamică, PHP acceptă declarații de tip privind parametrii de funcții, care sunt aplicați în timpul
execuției. Acest lucru a fost acceptat pentru clase și interfețe de la PHP 5.0, pentru arrays de la PHP
5.1, pentru "callabile" de la PHP 5.4, și scalare (integer, float, string și boolean) de la PHP 7.0. PHP
7.0 are, de asemenea, declarații de tip pentru tipurile de retur de funcții, exprimate prin plasarea
numelui de tip după lista de parametri, precedată de un colon. De exemplu, funcția getAdder din
exemplul anterior ar putea fi adnotată cu tipuri asemănătoare în PHP 7:

25
function getAdder (int $x): \Closure {
return function (int $y) use ($x) : int {
return $x + $y;
};
}

$adder = getAdder (8);
echo $adder (2); // prints "10"
echo $adder (null); // throws an exception because an incorrect type was passed
$adder = getAdder ([]); // would also throw an exception
Implicit, declarațiile de tip scalar respectă principiile slabe de tiparire. De exemplu, dacă un tip de
parametru este int, PHP ar permite nu numai numere întregi, ci și caractere numerice convertibile,
flotoare sau booleani să fie transmise acelei funcții și să le convertească. Cu toate acestea, PHP 7
are un mod de "tastare strictă", care, atunci când este utilizat, nu permite astfel de conversii pentru
apeluri de funcții și returnează într -un fișier. Programarea orientată pe obiecte [edit] Funcția de bază
de programare orientată spre obiect a fost adăugată în PHP 3 și îmbunătățită în PHP 4. Acest lucru a
permis PHP să obțină o abstractizare suplimentară, făcând sarcini creative mai ușoare pentru
programatorii care folosesc limba. Manipularea obiectului a f ost complet rescrisă pentru PHP 5,
extinderea setului de caracteristici ș i sporirea performanței. În versiunile anterioare de PHP,
obiectele au fost manipu late ca tipuri de valori. Dezavantajul acestei metode a fost că acel cod a
trebuit să utilizeze greu variabilele "de referință" ale PHP dacă dorea să modifice un obiect care a
fost trecut, mai degrabă decât să creeze o copie a acestuia. În noua abordare, obiectele sunt
menționate de mâner, și nu de valoare. PHP 5 a introdus variabile și metode particulare private și
protejate, împreună cu clase abstracte, clase finale, metode abstracte și metode finale. De asemenea,
a introdus un mod standard de declarare a constructorilor și a distrugătorilor, similar cu cel al altor
limbi orientate pe obiecte, cum ar fi C ++, și un model standard de tratare a excepțiilor. Mai mult,
PHP 5 a adăugat interfețe și a permis ca mai multe interfețe să fie implementate. Există interfețe
speciale care permit obiectelor să interacționeze cu sistemul runtime. Obiectele care implemen tează
ArrayAccess pot fi utilizate cu sintaxa array și obiectele care implementează Iterator sau
IteratorAggregate pot fi utilizate cu constructul de limbaj foreach. Nu există nicio caracteristică
tabelă virtuală în motor, deci variabilele statice sunt leg ate de un nume în locul unei referinț e la
momentul compilării. Dacă dezvoltatorul creează o copie a unui obiect utilizând clona de cuvinte
rezervate, motorul Zend va verifica dacă a fost definită o metodă __clone (). Dacă nu, se va apela un
default __clone () care va copia proprietățile obiectului. Dacă este definită o metodă __clone (), ea
va fi responsabilă pentru setarea proprietăților necesare în obiectul creat. Pentru comoditate,
motorul va furniza o funcție care importează proprietățile obiectului sur să, astfel încât

26
programatorul poate începe cu o replică de valoare a obiectului sursă și numai suprascrie
proprietățil e care trebuie schimbate. Următorul exemplu este un exemplu de bază pentru
programarea orientată pe obiecte în PHP:
class Person
{
public $firstName ;
public $lastName ;

public function __construct ($firstName , $lastName = '') { // optional second argument
$this ->firstName = $firstName ;
$this ->lastName = $lastName ;
}

public function greet () {
return 'Hello, my name is ' . $this ->firstName .
(($this ->lastName != '') ? (' ' . $this ->lastName ) : '') . '.';
}

public static function staticGreet ($firstName , $lastName ) {
return 'Hello, my name is ' . $firstName . ' ' . $lastName . '.';
}
}

$he = new Person( 'John' , 'Smith' );
$she = new Person( 'Sally' , 'Davis' );
$other = new Person( 'iAmine' );

echo $he->greet (); // prints "Hello, my name is John Smith."
echo '<br />' ;

echo $she->greet (); // prints "Hello, my name is Sally Davis."
echo '<br />' ;

echo $other ->greet (); // prints "Hello, my name is iAmine."
echo '<br />' ;

echo Person ::staticGreet ('Jane' , 'Doe' ); // prints "Hello, my name is Jane Doe."

27
Vizibilitatea proprietăților și metodelor PHP este definită cu ajutorul cuvintelor cheie publice,
private și protejate. Valoarea implicită este publică, dacă se utilizează numai var; Var este un
sinonim pentru public. Elementele declarate publice pot fi accesate peste tot. Limitează accesul la
clasele moștenite (și la clasa care definește elementul). Vizibilitatea privată limitează numai la clasa
care definește elementul. Obiectele de același tip au acces la membrii lor privați și protejați, chiar
dacă nu sunt aceiași instanță. Funcțiile de vizibilitate ale membrilor din cadrul PHP au fost uneori
descrise ca fiind "extrem de utile" . Cu toate acestea, acestea au fost, uneori , descrise ca fiind "în cel
mai bun caz irelevante și în cel mai r ău caz pozitiv dăunătoare" . Cea mai utilizată implementare
PHP este alimentată de motorul Zend și cunoscută pur și simplu ca PHP. Pentru a dezambigua de la
alte implementări, uneori se numeș te neoficial "Zend PHP". Zend Engine compilează codul sursă
PHP într -un format intern pe care îl poate executa, funcționând ast fel ca un interpret. Este, de
asemenea, "implementarea de referință" a PHP, deoarece PHP nu are o specificație formală, astfel
încât semantica lui Zend PHP definește semantica PHP -ului în sine. Datorită complexității și
nuanțării semantice a PHP, definită prin modul în care funcționează Zend, este dificil pentru
implementările concurente să ofere compatibilitate completă. Modulul de executare a unui singur
model de cerere pe script, iar faptul că motorul Zend este un interpret, conduce la ineficiență; Ca
rezultat, au fost dezvoltate diverse produse care să contribuie la îmbunătățirea performanței PHP.
Pentru a accelera timpul de exec uție și nu trebuie să compilați codul sursă PHP de fiecare dată când
este accesată pagina web, scripturile PHP pot fi de asemenea implementate în format intern al
motorului PHP, utilizând o memorie cache opcode, care funcționează prin cache -ul formularului
compilat Un script PHP (opcodes) în memoria partajată pentru a evita supraîncărcarea parsării și
compilarea codului de fiecare dată când scriptul rulează. O cache opcode, Zend Opcache, este
construit în PHP de la versiunea 5.5. Un alt exemplu de cache de opcode utilizat pe scară largă este
Alternative PHP Cache (APC), care este di sponibil ca extensie PECL. În timp ce Zend PHP este
încă cea mai populară implementare, au fost dezvoltate alte câteva implementări. Unele dintre
acestea sunt compilatoare sau sup ort pentru compilarea JIT și, prin urmare, oferă avantaje de
performanță peste Zend PHP în detrimentul lipsei de compatibilitate completă cu PHP.
Implementările alternative includ următoarele: HipHop Virtual Machine (HHVM) – dezvoltat la
Facebook și dispon ibil ca open source, convertește codul PHP într -un bytecode de nivel înalt
(cunoscut sub numele de limbă intermediară), care este apoi tradus în x86 -64 machine Cod dinamic
la timpul de execuție de către un compilator just -in-time (JIT), rezultând până la 6 îmbun ătățiri ale
performanței. Parrot – o mașină virtuală concepută pentru a rula eficient limbile dinamice; Pipp
transformă codul sursă PHP în reprezentarea intermediară Parrot, care este apoi tradusă în octetul
lui Parrot și executată de mașina virtuală . Phalanger – compilează PHP în limbajul Common
Intermediary Language (CIL) bytecode HipHop – dezvoltat la Facebook și disponibil ca open
source, transformă scripturile PHP în cod C ++ și apoi compilează codul rezultat, reducând

28
încărcarea serverului până la 50%. La începutul anului 2013, Facebook a depreciat -o în favoarea
HHVM din mai multe motive, inclusiv dificultățile de instalare și lipsa suportului pentru întreaga
limbă PHP, inclusiv construcții le (create_function) și (eval) .
Produsele derivate d in acest software nu pot fi numite "PHP", nici nu pot apărea "PHP" în
numele lor, fără permisiunea scrisă prealabilă din partea grupului @ php.net. Puteți indica faptul că
software -ul dvs. funcționează împreună cu PHP prin a spune "Foo pentru PHP" în loc s ă-l numiți
"PHP Foo" sau "phpfoo". Această restricție privind utilizarea "PHP" face ca licența PHP să fie
incompatibilă cu Licența Publică Generală (GPL), în timp ce licența Zend este incompatibilă
datorită unei clauze de publicitate asemănătoare cu ce a a licenței originale BSD . Dezvoltarea și
comunitatea [modifică] PHP include diverse biblioteci gratuite și open -source în distribuția sa sursă
sau le folosește în construirea binară PHP rezultată. PHP este fundamental un sistem bazat pe
Internet cu module in tegrate pentru accesarea serverelor FTP (File Transfer Protocol) și a multor
servere de baze de date, inclusiv PostgreSQL, MySQL, Microsoft SQL Server și SQLite (o bază de
date încorporată), servere LDAP și altele. Numeroase funcții familiare programatoril or C, cum ar fi
cele din familia stdio, sunt disponibile în versiunile standard PHP. [119] PHP permite
dezvoltatorilor să scrie extensii în C pentru a adăuga funcționalitate în limba PHP. Extensiile PHP
pot fi compilate static în PHP sau încărcate dinamic în timpul execuției. Au fost adăugate
numeroase extensii pentru a adăuga suport pentru API -ul Windows, gestionarea proceselor pe
sisteme de operare asemănătoare Unix, șiruri de caractere (Unicode), cURL și mai multe formate
populare de compresie. Alte cara cteristici PHP puse la dispoziție prin extensii includ integrarea cu
IRC, generarea dinamică a imaginilor și conținutul Adobe Flash, PHP Data Objects (PDO) ca strat
de abstractizare folosit p entru accesarea bazelor de date și chiar sinteza discursului. Une le dintre
funcțiile de bază ale limbii, cum ar fi cele care se ocupă cu șiruri de caractere și matrice, sunt de
asemenea implementate ca extensii. Proiectul Biblioteca comunitară de extensii PHP (PECL) este
un depozit pent ru extensii la limba PHP. Unele al te proiecte, cum ar fi Zephir, oferă posibilitatea ca
extensiile PHP să fie create într -un limbaj de nivel înalt și compilate în extensii native PHP. O astfel
de abordare, în loc să scrie direct extensii PHP în C, simplifică dezvoltarea extensiilor și redu ce
timpul necesar pent ru programare și testare. Grupul PHP cuprinde zece persoane (în 2015): Thies C.
Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha
Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski. Zend Technologi es oferă o certificare
PHP b azată pe examenul PHP 5.5 pentru ca programatorii să devină dezvoltatori de certificare PHP.

3.7 Instalare și configurare PHP

29
Există două moduri principale pentru adăugarea suportului pentru PHP către un server web – ca
modul de server nativ web sau ca executabil CGI. PHP are o interfață directă de module numită
Server Application Interface Programming (SAPI), care este susținută de mai multe servere web,
inclusiv Apache HTTP Server, Microsoft IIS, Netscape (acum defunct) și iP lanet. Unele alte servere
web, cum ar fi OmniHTTPd, suportă interfața de programare a aplicațiilor pe Internet Server
(ISAPI), care este o interfață a modulului de server web Microsoft. Dacă PHP nu are suport de
modul pentru un server web, acesta poate fi folosit întotdeauna ca un procesor Common Gateway
Interface (CGI) sau FastCGI; În acest caz, serverul web este configurat să utilizeze executabilul
CGI al PHP pentru a procesa toate cer erile către fișierele PHP. PHP-FPM (FastCGI Process
Manager) este o implementare alternativă FastCGI pentru PHP, alături de distribuția oficială PHP
de la versiunea 5.3.3. În comparație cu implementarea FastCGI mai veche, aceasta conține câteva
caracteristici suplimentare, mai ales utile pentru serverele w eb încărcate foarte puternic. Atunci
când folosiți PHP pentru scripting de linie de comandă, este necesară execuția unei interfețe de
interfață de linie de comandă (CLI). PHP suportă un CLI SA PI începând cu PHP 4.3.0. Principalul
obiectiv al acestui SAPI e ste dezvoltarea de aplicații shell folosind PHP. Există destul de puține
diferențe între CLI SAPI și alte SAPI, deși aceștia împărtășesc multe din tre aceleași
comportamente . PHP are o interfață directă de module numită SAPI pen tru diferite servere web; în
cazul PHP 5 și Apache 2.0 pe Windows, este furnizată sub forma unui fișier D LL numit
php5apache2.dll, care este un modul care, Printre alte funcții, oferă o interfață între PHP și serverul
web, implementată într -o formă pe care serverul o înțelege. Această formă este ceea ce este
cunoscut ca SAPI. Există diferite tipuri de SAPI pentru diferite extensii de servere web. De
exemplu, pe lângă cele listate mai sus, alte SAPI -uri pentru limbajul PHP includ interfața Common
Gateway Interface (CGI) și interfața de linie de comandă (CLI). PHP poate fi, de asemenea, utilizat
pentru scrierea aplicațiilor interfeței grafice desktop (GUI), utilizând extensia PHP -GTK. PHP -GTK
nu este inclus în distribuția oficială PHP și ca extensie poate fi folosit numai cu versiuni PHP 5.1.0
și mai noi. Cea mai obișnuită metodă de a instala PHP -GTK îl compilează din codul sursă. Când
PHP este instalat și utilizat în medii de tip cloud, kiturile de dezvoltare software (SDK) sunt
furnizate pentru utilizarea funcțiilor specifice cloud -ului. De exemplu: Amazon Web Services
furnizează AWS SDK pentru PHP Windows Azure poate fi utilizat împreună cu Wind ows Azure
SDK pentru PHP. Sunt suportate numeroase opțiuni de configurare, care afectează atât
caracteristicile principale ale PHP, cât și extens iile. Fișierul de configurare php.ini este căutat în
locații diferite, în funcție de modul în care este folosit PHP. Fișierul de configurare este împă rțit în
diferite secțiuni, în timp ce unele dintre opțiunile de configurare pot fi de asemenea setate în
configurația serverului web.
3.8 Securitate

30
În 2013, 9% din toate vulnerabilitățile enumerate de către Baza de date a Vulnerabilității
Naționale au fost legate de PHP; istoric, aproximativ 30% din toate vulnerabilitățile enumerate în
1996 în această bază de date sunt legate de PHP. Deficiențele de securitate tehnică ale limbii în sine
sau ale bibliotecilor sale principale nu sunt frecvente (acestea au fost numerotate în 2009, care
reprezintă aproximativ 1% din total, deși PHP se aplică la aproximativ 20% din programele listate.
Recunoscând că programatorii fac Greșelile, unele limbi includ verificarea tentativă pentru a detecta
automat lipsa de validare a intrărilor, care provoacă multe probleme. O astfel de caracteristică e ste
dezvoltată pentru PHP, dar includerea sa într -o eliberare a fost respinsă de mai multe ori în trecut.
Există patch -uri de protecție avansate, cum ar fi Suhosin și Hardening -Patch, care sunt special
concepute pentru mediile de găzduire web, în primul rând datorită faptului că aceste medii sunt
văzute ca locuri în care poate apărea un cod scurs nepăsător. Există anumite caracteristici de limbă
și parametri de configurare (în primul rând valorile implicite pentru astfel de setări de runtime) care
fac ca aplicațiile PHP să fie predispuse la probleme de securitate. Dintre acestea, direcțiile de
configurare magic_quot es_gpc și register_globals sunt cele mai cunoscute; Acesta din urmă a făcut
ca parametrii URL să devină variabile PHP, deschizând o cale pentru vulnerabilități grave de
securit ate, permițând unui atacator să stabilească valoarea oricărei variabile globale neinitializate și
să interfereze cu executarea unui script PHP. Sprijinul pentru "citatele magice" și "înregistrarea
globalelor" a fost depreciat din PHP 5.3.0 ș i eliminat din PHP 5.4.0. Un alt exemplu de
vulnerabilitate a setărilor de rulare provine din imposibilitatea de a dezactiva execuția PHP (prin
intermediul directivei d e configurare a motorului) pentru directorul în care sunt stocate imaginile
încărcate; Lăsând setările implicite poate duce la executarea codului PHP rău intenționat încorporat
în imagin ile încărcate. De asemenea, lăsarea activată a încărcării dinamice a extensiilor PHP (prin
intermediul directivei enable_dl de configurare) într-un mediu de găzduire web partajat poate duce
la prob leme de securitate. De asemenea, conversiile de tip implicite care duc la tratarea unor valori
incompatibile ca fiind identice cu intenția programatorului pot duce la probleme de securitate. De
exemplu, rezultatul comparației "0e1234" == "0" este adevărat deoarece prima valoare comparată
este tratată ca notație științifică având valoarea (0 × 101234), adică zero. Această caracteristică a
avut ca rezultat vul nerabilități de autentificare î n Forumul Simple Machines, Typo3 și phpBB [198]
când s -au comparat pașii de parole MD5. În schimb, trebuie utilizată fie funcția strcmp, fie
operatorul de identitate (===); "0e12 34" === "0" duce la false. Într-o analiză de pe ste 170.000 de
defecțiuni de pe site -uri, publicată de Zone -H, cea mai frecventă tehnică utilizată (53%) a fost
exploatarea vulnerabilității incluziunii fișierelor, cea mai mare parte a utilizării nesigure a funcțiilor
PHP includ, necesită și (allow_url_fo pen).

31
Capitolul 4
Com ponente electronice folosite in circuit ul de comanda
4.1 Tranzistorul NPN Figura 4.7

Figura 4.7
Un tranzistor [7] este un dispozitiv semiconductor folosit pentru a amplifica sau comuta
semnale electronice și energie electrică. Acesta este compus din material semiconductor, de obicei
cu cel puțin trei terminale pentru conectarea la un circuit extern. O tensiune sau cur ent aplicat unei
perechi de borne ale tranzistorului controlează curentul printr -o altă pereche de terminale. Deoarece
puterea controlată (ieșire) poate fi mai mare decât puterea de control (intrare), un tranzistor poate
amplifica un semnal. Astăzi, unele tranzistoare sunt ambalate individual, dar multe altele se găsesc
încorporate în circuite integrate. Tranzistorul este blocul fundamental al dispozitivelor electronice
moderne și este omniprezent în sistemele electronice moderne.
Tranzistorul NPN este un ul dintre cele două tipuri de tranzistoare bipolare, constând dintr –
un strat de semiconductor dopat cu P ("baza") între două straturi dopate cu N. Un mic curent care
intră în bază este amplificat pentru a produce un curent colector și emițător mare. Adică atunci când
există o diferență de potențial pozitivă măsurată de la baza unui tranzistor NPN la emițătorul său
(adică atunci când baza este ridicată față de emițător), precum și o diferență de potențial pozitivă
măsurată de la colector la emițător , Tranzi storul devine activ. În această stare "on", debitul se varsă
de la colector la emițătorul tranzistorului. Cea mai mare parte a curentului este transportată de
electroni care se deplasează de la emițător la colector ca transportatori minoritari în regiunea de
bază tip P. Pentru a permite o funcționare mai mare curentă și mai rapidă, cele mai multe
tranzistoare bipolare utilizate astăzi sunt NPN, deoarece mobilitatea electronilor este mai mare decât
mobilitatea gaurului. Un dispozitiv mnemonic pentru simbolul tranzistorului NPN "nu indică", pe
baza săgeților din simbol și a literelor din nume.

32
Transistor ca întrerupător . Tranzistorii sunt utilizați în mod obișnuit în circuitele digitale ca
întrerupătoare electronice care pot fi fie în starea "on", fie în starea "off", atât pentru aplicații de
mare putere, cum ar fi surse de alimentare comutate, cât și pentru aplicații cu p utere redusă, cum ar
fi porțile logice. Parametrii importanți pentru această aplicație includ curentul comutat, tensiunea
manipulată și viteza de comutare, caracterizată de timpii de creștere și cădere. Într -un circuit cu
tranzistor împământat, cum ar fi c ircuitul comutatorului de lumină arătat, pe măsură ce tensiunea de
bază crește, emițătorul și curenții colectori cresc exponențial. Tensiunea colectorului scade din
cauza rezistenței reduse de la colector la emițător. Dacă diferența de tensiune dintre cole ctor și
emițător a fost zero (sau aproape de zero), curentul colectorului ar fi limitat numai de rezistența de
sarcină (becul) și de tensiunea de alimentare. Aceasta se numește saturație deoarece curentul curge
liber de la colector la emițător. Când este s aturat, comutator ul se spune că este pornit. Asigurarea
unui curent suficient de bază este o problemă -cheie în utilizarea tranzistoarelor bipolare ca
comutatoare. Transistor asigură câștig curent, permițând ca un curent relativ mare în colector să fie
comu tat de un curent mult mai mic în terminalul de bază. Raportul dintre aceste curenți variază în
funcție de tipul de tranzistor și chiar și pentru un anumit tip, variază în funcție de curentul
colectorului. În exemplul circuitului comutatorului de lumină pre zentat, rezistența este aleasă pentru
a asigura un curent de bază suficient pentru a asigura saturarea tranzistorului. Într -un circuit de
comutare, ideea este de a simula, cât mai aproape posibil, comutatorul ideal care are proprietățile
circuitului deschi s atunci când este oprit, scurtcircuitat atunci când este pornit și o tranziție
instantanee între cele două stări. Parametrii sunt aleși astfel încât ieșirea "off" să fie limitată la
curenți de scurgere prea mici pentru a afecta circuitele conectate; Rezis tența tranzistorului în starea
"on" este prea mică pentru a afecta circuitele; Iar tranziția dintre cele două state este suficient de
rapidă pentru a nu avea un efect dăunător.

4.2 Rezistorul

Figura 4.8
Un rezistor Figura 4 .8 [8] este o componentă pasivă cu două terminale electrice care
implementează rezistența electrică ca element de circuit. În circuitele electronice, rezistoarele sunt
utilizate pentru a reduce debitul curent, pentru a ajusta nivelele de semnal, pentru a împărți
tensiunile, a dete rmina părțile active active și a termina liniile de transmisie, printre alte utilizări.
Rezistoarele de înaltă rezistență care pot disipa mai multe watte de energie electrică ca și căldură

33
pot fi utilizate ca parte a comenzilor motorului, în sistemele de d istribuție a energiei electrice sau ca
sarcini de încercare pentru generatoare. Rezistențele fixe au rezistențe care se schimbă ușor doar cu
temperatură, timp sau tensiune de operare. Rezistențele variabile pot fi folosite pentru reglarea
elementelor de ci rcuit (cum ar fi un control al volumului sau un dimmer al lămpii) sau ca
dispozitive de detectare pentru căldură, lumină, umiditate, forță sau activitate chimică. Rezistoarele
sunt elemente comune ale rețelelor electrice și circuitelor electronice și sunt omniprezente în
echipamentele electronice. Rezistoarele practice ca componente discrete pot fi compuse din diferiți
compuși și forme. Rezistoarele sunt de asemenea implementate în circuite integrate. Funcția
electrică a unui rezistor este specificată de re zistența sa: rezistorii comerciali obișnuiți sunt fabricați
pe o serie de mai mult de nouă ordine de mărime. Valoarea nominală a rezistenței intră în toleranța
de fabricație indicată pe componentă. Comportamentul unui rezistor ideal este dictat de relația
specificată de legea lui Ohm: I=U/R. Legea lui Ohm afirmă că tensiunea (V) pe un rezistor este
proporțională cu curentul (I), unde constanta proporționalității este rezistența (R). De exemplu, dacă
un rezistor de 300 ohmi este atașat la bornele unei bateri i de 12 volți, atunci un curent de 12/300 =
0,04 amperi curge prin acest rezistor. Rezistențele practice au, de asemenea, o anumită inductanță și
capacitate care afectează relația dintre tensiune și curent în circuitele de curent alternativ.

4.3 Releul

Figura 4.9

Un releu (Figura 4 .9) [9] este un comutator acționat electric. Multe relee utilizează un
electromagnet pentru a acționa mecanic un întrerupător, dar se folosesc și alte principii de

34
funcționare, cum ar fi releele de stare solidă. Releele sunt utilizate acolo unde este necesar să se
controleze un circuit printr -un semnal separat de putere mică sau în cazul în care mai multe circuite
trebuie să fie controlate de un singur semnal. Primele relee au fost utilizate în circuitele telegrafice
de lungă distanță ca amplificatoare: au repetat semnalul care vine de la un circuit și l -au re -transmis
pe un alt circuit. Releele au fost utilizate pe scară largă în centrale telefonice și computere timpurii
pentru a efectua operații logice. Un tip de releu care poate manevra puterea mare necesară pentru a
controla direct un motor electric sau alte sarcini se numește contactor. Solid -state releele de control
circuite de putere, fără părți în mișcare, în loc de a folosi un dispozitiv semiconductor pentru a
efectua comutare. Releele cu caracteristici de funcționare calibrate și uneori bobine de operare
multiple sunt folosite pentru a proteja circuitele electrice de supraîncărcare sau defecțiuni; În
sistemele moderne de alimentare cu energie electrică, aceste funcții sunt realizate de instrumente
digitale numite în continuare "relee de protecție". Releele magnetice de blocare necesită un impuls
al puterii bobinei pentru a -și mișca contactele într -o direcție, iar un alt impuls redirecționat pentru a
le mișca înapoi. Imp ulsurile repetate din aceeași intrare nu au efect. Releele magnetice de blocare
sunt utile în aplicațiile în care energia întreruptă nu ar trebui să poată trece de la contacte. Releele
magnetice de blocare pot avea fie bobine singulare, fie duale. Pe un si ngur dispozitiv de bobină,
releul va funcționa într -o direcție când se aplică o singură polaritate și se va reseta când polaritatea
va fi inversată. Pe un dispozitiv cu bobină dublă, când tensiunea polarizată este aplicată bobinei de
resetare, contactele v or trece. Comenzile magnetice controlate cu comandă AC au bobine
individuale care utilizează diode de direcție pentru a diferenția comenzile de operare și resetare.

4.4 Ledul

Figura 4.10
O diodă care emite lumina este o componenta electronica care este numita (LED) (Figura
4.10) este un semiconductor cu două surse. Este o diodă de joncțiune p -n care emite lumină când

35
este activată. Atunci când o tensiune adecvată este aplicată pe conductori, electronii sunt capabili să
se recombine cu găuri de electroni în interiorul dispozitivului, eliberând energia sub formă de
fotoni. Acest efect se numește electroluminescență, iar culoarea luminii (care corespunde energiei
fotonului) este determinată de distanța benzii energetice a sem iconductorului. LED -urile sunt de
obicei mici (mai puțin de 1 mm2), iar componente optice integrate pot fi utilizate pentru a modela
modelul de radiație. LED -urile timpurii au fost adesea folosite ca lămpi indicatoare pentru
dispozitive electronice, înlocu ind becurile cu incandescență mici. Acestea au fost în curând
ambalate în citiri numerice, sub formă de afișaje pe șapte segmente și au fost frecvent observate în
ceasuri digitale. Evoluțiile recente au produs LED -uri potrivite pentru iluminatul ambiental și de
sarcină. LED -urile au condus la noi afișaje și senzori, în timp ce ratele lor ridicate de comutare sunt
utile în tehnologia avansată de comunicații. LED -urile au multe avantaje față de sursele de lumină
incandescentă, incluzând consumul redus de ener gie, durata de viață mai lungă, robustețea fizică
îmbunătățită, dimensiunea mai mică și comutarea mai rapidă. Diodele cu diode luminoase sunt
utilizate în aplicații diverse, cum ar fi iluminatul de aviație, farurile de automobile, publicitatea,
iluminatul general, semnalele de trafic, blitzurile camerei și tapetul luminat.

36
Capitolul 5
Detalier ea aplicatie i create
5.1 Descrierea functionarii aplicatie i

Considerente preliminare . Pentru functionarea coresp. a aplicatie care controleaza sistemul
de aspersoare prin intermediul sistem ului de operare si implicit a Rasp berry Pi , sunt necesare
configurari pentru activarea si setarea pinilor GPIO. Vom activa pinul cu nr 17 care va putea fi
controlat moficand fisierele de configurare aferente l ui. Pentru ca aceste setari sa ramana persistente
va fi necesar sa le adaugam in fisierul de configurarea, care va fi apelat la pornirea sistemului de
operarea (/etc/rc.local). Pentru activarea pinului cu nr 17, o sa folosim comanda:
echo "17" > /sys/clas s/gpio/export
Pinii GPIO ai Rasp berry Pi pot fi configurati sa functioneze in 2 directii , IN sau OUT. Pentru a
folosi pinul 17 pe post de intrerupator, il vom seta sa functioneze in modul OUT cu urmatoarea
comanda.
echo "out" > /sys/class/gpio/gpio17/ direction
Adaugand in continuarea aceste 2 comenzi in fisierul RC.local pentru a pastra setarile la respornirea
sistemului. Controlul tensiuni de 3.3V pe acest pin se va face, in fisierul de configurare:
/sys/class/gpio/gpio17/value
Astfel daca acesta cont ine valoarea 1, va aparea tensiune de 3.3 v pe acest pin, iar daca in fisier va
aparea valoarea 0, pinul nu va avea tensiune. Este neaparat necesar ca toate aceste modificari din
fisierele de mai sus sa fie facute cu userul ROOT. Acests fiind de altfel sin gurul care area
permisiuni de scriere a fisierelor de configurare respective. Aplicatiei scrise in PHP cu care
utilizatorul final va interactiona, va avea rolul trivial de a controla valoare de configurare a pinului
17.
Datorita faptului ca pe pini de cont rol cu tensiune de 3.3V intensitatea curentului este foarte mica,
acesta nu va avea capabilitatea de a sustine un consumator de dimensiunea uni releu de control.
Pentru aceasta vom folosi montajul din Figura 5.1 . Tranzistorul NPN din figura functioneaza ca un
releu si inchide circuitul de alimentate al bobinei consumatorului in momentu l in care pinul 17 va
alimenta b aza tranzistorului. Asadar consumatorul final (releul in cazul de fata pentru prezentare, un
led si un ventilator ) va fi alimentat din pinul de 5V cu nr.1 care are o intensitate a curentului de
500ma.

37

Figura 5.1
In mod evident in cazul in care se va lega un consumator care depaseste putera furnizata de pinul de
control 17, se poate ajunge pana la deter iorarea circuitul de pe placa de baza Rasp berry Pi la o
expunere prelungita.
Etrapola nd se pot realiza ma i multe montaje de acest fel, folo sind p ini de control GPIO al
Rasperry Pi fiind astfel posibila controlarea mai multor sisteme de la distanta via inte rnet. Mai
trebuie precizat ca in cazul unei pe ne de curent sau a restartari Rasp berry Pi din vari motive
sistemul se initializeaza pe pozitia de control oprit.

5.2 Descriera aplicatiei de control

Aplicatia de control a dispozitivului este o pagina simpla HTML la o adresa proprie care
contine butoanele de comanda.

Figura 5.1

Figura 5.2

38

Aplicatia de control a sistemului (Figura 5.1 si Figura 5.2) este scrisa in PHP si este acesata de catre
utilizator prin intermediul s erverului Apache2 instalat pe Rasp berry Pi . Prototipul nostru de
aplicatie contine un formular construi in HTML . Cu un element de tip select care contine 2 valori:
Pornit/Oprit precum si un buton de tip Trimite (executa) .
<div>
<center>
Sistem de control aspersoare<br><br>
<form action="procesare.php" method="POST">
<select name="setare">
<option value="on">PORNIT</option>
<option value="off">OPRIT</option>
</select>
<input type="submit" value="TRIMITE">
</form>
</center>
</div>

<style>
div {
height: auto;
width: auto;
background: white;

position: fixed;
top: 50%;
left: 50%;
margin -top: -100px;
margin -left: -100px;
}
</style>

39
Utilizatorul va selecta una dintre valoari Pornit sau Oprit din select, dupa care la apasare butonului
Trimite , dupa care aplicatia va scrie valoarea respectiva a pinului 17.

(/sys/class/gpio/gpio17/value).

Acest lucru se va intampla in scriptul procesate.PHP din atributul target al formularului, unde se va
citi valoarea din variabila „$_pos t”. La apasarea butonului Trimite in scriptul PHP, vectorul
„$_post” va contiu ne la cheia „setare” valoarea Pornit sau Oprit , in functie de optiunea
utilizatorului.

In continuare tot ce ramane de facut este sa scriem valoare corespunzatore in fisierul de configurare
a pinului 17, dar utilizatorul din sistem sub care ruleaza serverul APACHE (www -data) nu are
permisiuni de scriere in fisierele de configurare din motive de securitate.
Pentru a e vita aceasta problema, va fi necesar sa c rem doua fishiere bash, in care vom avea
comenzile de modificare a continutului fisierelor de configurare si anume:

pi@raspberrypi:/var/www/html $ cat /home/pi/porneste.sh sudo echo "1" > /sys/class/gpio/gpio17/val ue
pi@raspberrypi:/var/www/html $ cat /home/pi/opreste.sh sudo echo "0" > /sys/class/gpio/gpio17/value

Este necesar ca aceste doua fisiere sa fie executabile, adica sa aibe setata in felul urmator:
Chmod+x /home/pi/porneste.sh /home/pi/opreste.sh . Comand a „sudo” permite utilizatorilor din
sistem cu drepturi speciale „sudoers” sa ruleze comenzi si aplicatii in numele, cu drepturile si
permisiunile superutilizatorului „root”. Din motive de securite vom permite utilizatorului Apache
(www -data) sa ruleze cu d repturi de „root” doar aceste doua scripturi. Pentru acesta vom adauga in
fisierul de configurare sistem (/etc/sudoers) urmatoarele linii:

www -data ALL = NOPASSWD: /home/pi/porneste.sh
www -data ALL = NOPASSWD: /home/pi/opreste.sh \

40
Asadar aplicatia PHP va apela cele 2 scripturi (avand de data acesta acces) si va seta pinul 17 in
functie de optiunea utilizatorului.

pi@raspberrypi:/var/www/html $ cat procesare.php
<?php
//print $_POST['setare'];
if ($_POST['setare'] == 'on') {
print exec('sudo /home/ pi/porneste.sh');
} else {
print exec('sudo /home/pi/opreste.sh');
}

header("Location: index.html");
die();
Dupa setarea valorii corespunzatoare pinului pentru continuuitate vom face o redirectionare inapoi
catre fisierul HTML care contine formularul de control.
In concluzie componentele software si hardware care compun sistemul de control cor functiona in
felul urmator:
Utilizatorul aceseaza formularul de control pentru a selecta starea „Pornit” sau „Oprit” si pasa
butonul „Seteaza”.
Valoa re selectata de utilizator, va ajunge in scriptu „proceseaza.PHP” care va executa scriptul
„*.sh” corespunzator.
Scriptul sh selectat la pasul anterior va seta valoarea corespunzatoare (1 sau 0), in fisierul de
configurare al pinului GPIO cu nr 17.
In func tie de setarea pinului acesta va satura sau nu baza tranzistorului NPN, care la randul sau va
inchide sau deschide circuitul prin care este setat releul de control (reprezenta printr -un led si un
ventilator in prototipul de fata).
Releul de control, va gestiona mai departe starea sistemului final.
Rasp berry Pi este conectat la internet si poate fi accesat de la distanta din orice locatioe. Asadar
unul sau mai multi utilizatori , accesand formularul de control pot controla in orice moment starea
sistemului .

41

Bibliografie
1. https://www.raspberrypi.org/help/
2. https://www.raspberrypi.org/ documentation/hardware/raspberrypi/schematics/Raspberry -Pi-
3B-V1.2 -Schematics.pdf
3. https://github.com/raspberrypi/documentation/blob/master/hardware/raspberrypi/schematics/
Raspberry -Pi-3B-V1.2 -Schematics.pdf
4. https://www.raspberrypi.org/downloads/raspbian/
5. http://httpd.apache.org/ABOUT_APACHE.html
6. https://en.wikipedia.org/wiki/PHP
7. https://en.wikipedia.org/wiki/Tran sistor
8. https://en.wikipedia.org/wiki/Resistor
9. https://en.wikipedia.org/wiki/Relay
10. https://en.wikipedia.org/wiki/Light -emitting_diode

Similar Posts