Limbaje de programare pentru server

Tehnologiile Server Side Scripting permit crearea de aplicații Web complexe prin procesarea datelor pe server și generarea unor pagini în mod dinamic. În felul acesta se pot interfața aplicațiile Web cu servere de baze de date sau servere de poștă electronică. Limbajele Server Side Script au posibilitatea de a accesa datele din formulare HTML și de a accesa resurse externe cum ar fi o bază de date. Spre deosebire de tehnologii mai vechi care realizau același deziderat (Ex. CGI) server side scripting asigura o viteză și o securitate sporită. În general interpretoarele limbajelor SSS sunt integrate sub formă de module în serverul Web. Exemple de limbaje SSS: ASP și ASP.NET, ColdFusion Markup Language, JSP, PHP, Perl, Phyton, Rubi, Node.js etc.

Dezvoltarea limbajului PHP. Caracteristici de bază.

PHP, înseamnă "PHP: Hypertext Preprocessor" este un limbaj de scripting de uz general, cu cod-sursă deschis (Open Source), utilizat pe scară largă, și care este potrivit în special pentru dezvoltarea aplicațiilor Web și poate fi integrat în HTML. Sintaxa sa provine de la limbajele C, Java și Perl și este ușor de învățat. Scopul principal al limbajului este acela de a permite programatorilor web să creeze rapid pagini web generate dinamic, însă cu PHP se poate de realizat mult mai mult.

PHP/FI

PHP succede un produs mai vechi, numit PHP/FI. PHP/FI a fost creat de către Rasmus Lerdorf în 1995, inițial doar ca un simplu set de scripturi Perl pentru a urmări accesele la rezumatul său online. El a denumit acest set de scripturi 'Personal Home Page Tools — Instrumente pentru paginile personale'. Deoarece era necesară mai multă funcționalitate, Rasmus a scris o implementare mult mai largă în C, care era în stare să comunice cu baze de date și dădea posibilitate utilizatorilor să dezvolte simple aplicații Web dinamice. Rasmus a hotărît să lanseze codurile-sursă ale PHP/FI pentru ca oricine să le poată vedea, utiliza, corecta erorile și să îmbunătățească codul-sursă.

PHP/FI, care se descifra ca Personal Home Page / Forms Interpreter — Interpretor al paginilor personale / al formularelor, includea unele funcționalități de bază ale PHP pe care îl cunoaștem astăzi. El poseda variabile asemănătoare cu cele din Perl, interpretare automată a variabilelor din formulare și sintaxă inclusă în HTML. Insăși sintaxa era similară cu cea din Perl, cu toate că era mult mai limitată, simplă și într-un anumit fel inconsistentă.

În 1997, PHP/FI 2.0, a doua re-scriere a implementării în C, avea un cult din cîțiva mii de utilizatori din lume (estimat), cu aproximativ 50,000 domenii, care raportau că îl au instalat, ceea ce reprezenta aproximativ 1% din toate domeniile din Internet. Cu toate că erau cîteva persoane, care contribuiau cu porțiuni de coduri-sursă în acest proiect, el era totuși în mare măsură un proiect al unui singur om.

PHP/FI 2.0 a fost oficial lansat doar în noiembrie 1997, după ce și-a petrecut o bună parte a vieții în versiuni beta. În scurt timp el a fost înlocuit de versiunile alfa ale PHP 3.0.

PHP 3

PHP 3.0 a fost prima versiune care se aseamănă mult cu PHP, așa cum îl cunoaștem astăzi. El a fost creat de către Andi Gutmans și Zeev Suraski în 1997 ca o re-scriere completă, după ce ei au descoperit că PHP/FI 2.0 avea o capacitate foarte redusă pentru a dezvolta o aplicație de comerț electronic, asupra cărei ei lucrau într-un proiect al Universității. Într-un efort de a coopera și a continua dezvoltarea PHP/FI cu baza existentă de utilizatori, Andi, Rasmus și Zeev au decis să coopereze și au anunțat PHP 3.0 în calitate de succesor oficial al PHP/FI 2.0, iar dezvoltarea PHP/FI 2.0 a fost în mare măsură stopată.

Unul din cele mai mari avantaje ale PHP 3.0 erau facilitățile sale largi de extindere. În afară de faptul că oferea utilizatorilor finali o infrastructură solidă pentru o multitudine de baze de date, protocoale și interfețe API, facilitățile de extindere ale PHP 3.0 au impulsionat zeci de programatori să se alăture și să înainteze noi module de extindere. Indiscutabil, aceastea au fost cheia succesului enorm al PHP 3.0. Alte facilități de bază introduse în PHP 3.0 au fost susținerea sintaxei orientate pe obiecte și o sintaxă a limbajului mult mai puternică și consistentă.

Noul limbaj a fost lansat sub un nou nume, care excludea implicarea unei utilizări personale limitate, pe care o avea numele PHP/FI 2.0. El a fost numit pur și simplu 'PHP', sensul fiind un acronim recursiv - PHP: Hypertext Preprocessor — Preprocesor al Hipertextului.

Spre sfîrșitul anului 1998, PHP a atins un număr de zeci de mii de utilizatori (estimat) și sute de mii de site-uri Web raportau că îl au instalat. În punctul său de vîrf, PHP 3.0 a fost instalat aproximativ pe 10% din toate serverele Web din Internet.

PHP 3.0 a fost lansat oficial în iunie 1998, după aproximativ 9 luni în faza de testare publică.

PHP 4

Către iarna anului 1998, la scurt timp după ce PHP 3.0 a fost lansat oficial, Andi Gutmans și Zeev Suraski au început lucrul asupra rescrierii nucleului PHP. Scopurile reproiectării erau de a îmbunătăți performanța aplicațiilor complexe și de a îmbunătăți modularitatea bazei de coduri-sursă ale PHP. Astfel de aplicații puteau fi realizate datorită noilor facilități din PHP 3.0, precum și a susținerii unei game largi de baze de date și interfețe API ale terților producători, însă PHP 3.0 nu fusese proiectat să lucreze cu astfel de aplicații complexe în mod eficient.

Noul nucleu, denumit 'Zend Engine' (compus din numele autorilor, Zeev și Andi), a făcut față cerințelor de proiect cu succes, și a fost prezentat pentru prima dată la mijlocul anului 1999. PHP 4.0, bazat pe acest nucleu și în cuplu cu o gamă largă de facilități noi a fost lansat oficial în mai 2000, aproape doi ani după predecesorul său, PHP 3.0. Suplimentar la performanța îmbunătățită substanțial în această versiune, PHP 4.0 a inclus alte facilități de bază, cum ar fi susținerea mult mai multor servere Web, sesiunilor HTTP, buferizarea ieșirii, metode mai securizate de gestionare a datelor introduse de utilizatori și cîteva construcții noi ale limbajului.

Astăzi PHP este utilizat de sute de mii de programatori (estimat) și cîteva milioane de site-uri raportează că îl au instalat, ceea ce alcătuiește peste 20% din toate domeniile din Internet.

Echipa de dezvoltare a PHP include zeci de programatori, precum și alte zeci de persoane ce lucrează asupra proiectelor asociate cu PHP, cum ar fi PEAR și proiectul de documentare.

PHP 5

Pe 13 iulie 2004 a fost lansat PHP 5, cu Zend Engine II, ce a adus și o orientare obiect mai pronunțată și suportînd mai multe caracteristici ale acestui tip de programare.

PHP 5 aduce mai multe noutăți față de versiunea 4:

  • Suport îmbunătățit pentru OOP
  • Introduce extensia PDO - PHP Data Objects, care definește o modalitate facilă și consistentă de accesare a diferitelor baze de date
  • Imbunătățiri de performanță
  • Suport îmbunătățit pentru MySQL ș MSSQL
  • Suport nativ pentru SQLite
  • Suport SOAP integrat
  • Iteratori pentru date
  • Controlul erorilor prin tratarea de excepții

La sfîrșitul lui 2007 doar versiunea 5.x mai era întreținută, deoarece în data de 13 iulie 2007 (exact la 3 ani după lansarea PHP5), PHP Group a anunțat că PHP4 va fi scos din uz pe 31 decembrie 2007 , deși prognozează că anumite upgrade-uri de securitate se vor oferi pînă pe 8 august.

PHP 6

La versiunea PHP 6 s-a lucrat mai bine de 5 ani cu rezultate modeste și după tot acest efort s-a renunțat la această versiune în 2010. Acest efort considerabil nu a rămas fără urmări iar diferite caracteristici se regăsesc în versiunile PHP 5.3 și PHP 5.4. Versiunile PHP 5.3 și PHP 5.4 au venit cu diferite caracteristici foarte impresionante și din acest motiv mulți programatori considera că versiunea PHP 5.4 ar fi trebuit să devină versiunea PHP 6.0 a limbajului însă nu a fost cazul.

Din cauza că diferite caracteristici ce trebuiau implementate în versiunea PHP 6 au fost implementate în PHP 5.3 și PHP 5.4 și întreaga documentație cu tot ce urma să vină în PHP 6 a fost publica timp de 5 ani atunci s-a luat decizia să se renunțe la versiunea PHP 6 și să fie omisă pentru a nu exista nici-o confuzie în legătură cu noile caracteristici ale limbajului PHP.

PHP 7

PHP 7 reprezintă singura lansare a acestui limbaj din ultimii 11 ani și înainte de a fi lansat a stat o perioada de 2 ani în care a fost dezvoltat. PHP 7 vine cu o nouă versiune a motorului ZEND, ceea ce îl face să fie de doua ori mai rapid folosind mai puțină memorie. PHP 7 vine cu un suport considerabil pentru platformele ce rulează pe 64 de biți.

PHP 7 a fost lansat în data de 3 Decembrie 2015.

PHP 7 este de doua ori mai rapid decât orice versiune anterioară. PHP 7 convertește mult mai rapid liniile noastre de cod în format binar și folosește mult mai putină memorie pentru acest proces. Pentru a înțelege mai bine uitați-vă la următoarele date ce reprezintă cererile pe care PHP 5.6 și PHP 7.0 le poate procesa într-o secundă pe diferite platforme.


PHP 5.6

PHP 7

WordPress

191 cereri/secundă

374 cereri/secundă

Drupal

182 cereri/secundă

316 cereri/secundă

Magento

41 cereri/secundă

69 cereri/secundă

Laravel

256 cereri/secundă

485 cereri/secundă

Zend Framework

250 cereri/secundă

489 cereri/secundă

PHP 7 este proiectat și refactored având în vedere volumul de lucru de astăzi.

PHP 8

PHP 8 a fost lansat pe 26 noiembrie 2020. PHP 8 este o versiune majoră și are modificări noi față de versiunile anterioare. Modificările noi includ:

Compilare just-in-time

Compilatorul JIT PHP 8 poate oferi îmbunătățiri substanțiale ale performanței pentru unele cazuri de utilizare. Dezvoltatorul PHP Nikita Popov a declarat că îmbunătățirile de performanță pentru majoritatea site-urilor vor fi mai puțin substanțiale decât actualizarea de la PHP 5 la PHP 7. Îmbunătățirile de performanță datorate adăugării compilatorului JIT sunt de așteptat să fie mai substanțiale pentru operațiunile de tip matematic decât pentru cazurile obișnuite de utilizare a dezvoltării web. În plus, compilatorul JIT oferă potențialul viitor de a muta un cod din C în PHP, datorită îmbunătățirilor de performanță pentru unele cazuri de utilizare.

Adăugarea expresiei match

PHP 8 a introdus expresia match. Expresia match este similară din punct de vedere conceptual cu o declarație switch și este mai compactă pentru unele cazuri de utilizare. Deoarece match este o expresie, rezultatul acesteia poate fi atribuit unei variabile sau returnat dintr-o funcție.

Modificări și adăugiri de sintaxă

PHP 8 include modificări pentru a permite sintaxe alternative, mai concise sau mai consistente într-un număr de scenarii.

Popularitate:

PHP-ul este unul din cele mai folosite limbaje de programare server-side, conform unui studiu efectuat de Netcraf în aprilie 2002, apărînd pe 9 din cele 37 milioane de domenii cercetate în studiu. De asemenea, există un grafic al creșterii folosirii PHP-ului pe site-ul oficial. Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor caracteristici:

  • Familiaritatea: sintaxa limbajului este foarte ușoară combinînd sintaxele unora din cele mai populare limbaje Perl sau C
  • Simplitatea: sintaxa limbajului este destul de liberă. Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document executîndu-se între marcajele speciale;
  • Eficiența: PHP-ul se folosește de mecanisme de alocare a resurselor, foarte necesare unui mediu multiutilizator, așa cum este web-ul;
  • Securitate: PHP-ul pune la dispoziția programatorului un set flexibil și eficient de măsuri de siguranță;
  • Flexibilitate: fiind apărut din necesitatea dezvoltării web-ului, PHP a fost modularizat pentru a bine pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web existente: Nginx, Apache, IIS, Zeus server, etc.
  • Gratuitate : este probabil cea mai importantă caracteristică a PHP-ului. Dezvoltarea PHP-ului sub licența open-source a determinat adaptarea rapidă a PHP-ului la nevoile web-ului, eficientizarea și securizarea codului.

Utilizare:

PHP este simplu de utilizat, fiind un limbaj de programare structurat, ca și C-ul ,Perl-ul sau începînd de la versiunea 5 chiar Java , sintaxa limbajului fiind o combinație a celor trei. Datorită modularității sale poate fi folosit și pentru a dezvolta aplicații de sine stătătorare, de exemplu în combinație cu PHP-GTK sau poate fi folosit ca Perl sau Python în linia de comandă. Probabil una din cele mai importante facilități ale limbajului este conlucrarea cu majoritatea bazelor de date relaționale, de la MySQL și pînă la Oracle, trecînd prin MS Sql Server, PostgreSQL, sau DB2.

PHP poate rula pe majoritatea sistemelor de operare UNIX, Windows sau Mac OS X și poate interacționa cu majoritatea serverelor web. Codul dumneavoastră PHP este interpretat de serverul WEB și generează un cod HTML care va fi văzut de utilizator (browserului clientului fiindu-i transmis numai cod HTML).

Arhitectura tip LAMP a devenit populară în industria web ca modalitate rapidă, gratuită și integrată de dezvoltare a aplicațiilor. Alături de Linux, Apache și Mysql, PHP reprezintă litera P, deși uneori aceasta se referă la Python sau Perl. Linux ocupă rolul de sistem de operare pentru toate celelalte aplicații, MySQL gestionează bazele de date, Apache are rol de server web, iar PHP are rol de interpretator și comunicator între acestea.

PHP folosește extensii specifice pentru fișierele sale: .php, .php3, .php4, .php5, .php7, .php8, .phps, .phpt, .phtml. Aceste fișiere sunt interpretate de catre serverul web iar rezultatul este trimis în formă de text sau cod HTML către browser-ul clientului.

Serverul Web încarcă pagina din sistemul de fișiere propriu și, constatând că este vorba de o pagină PHP o trimite interpretorului PHP. Interpretorul PHP parcurge pagina și execută instrucțiunile PHP întâlnite. Instrucțiunile PHP au ca și scop principal acela de a genera cod HTML. De asemenea, codul HTML din fișierul original este copiat pur și simplu la ieșire. Interpretorul PHP transmite înapoi către server fișierul transformat prin interpretarea codul PHP. Acest fișier va conține doar cod HTML (eventual și Client Side Script etc.) dar nu și cod PHP.

Server web local

Pentru a putea rula scenarii php(scripturi) avem nevoie să programăm calculatorul în calitate de server Web, server de aplicații PHP și nu în ultimul rînd server de BD MySQL. Aceste componente software de bază necesare (MySQL, Apache și PHP) sunt gratuite (din categoria "open source") și pot fi descărcate de pe site-ul oficial al producătorului. După instalarea fiecăruia din aceste aplicații apare necesitatea configurării lor, care uneori este dificilă pentru începători. Pentru a evita problemele configurării, putem instala un pachet complet ce conține Apache + PHP + MySQL + PHPMyAdmin care se numește XAMPP (alternative: PHPTriad, EasyPhp, Base, WampServer, Denver etc.). Aplicația PHPMyAdmin inclusă în pachetul XAMPP permite administrarea comodă a BD MySQL. Înainte de a rula scripturi PHP vom lansa aplicația XAMPP și anume din Start/All Programs/Apache Friends/XAMPP/XAMPP Control Panel, după care se va lansa panoul de control al aplicației XAMPP(vezi imaginea).

Pentru a lansa serverul Apache acționăm butonul start la modulul Apache și respectiv dacă lucrăm cu BD acționăm butonul start la la modulul MySql. Pentru a închide serverele deschise vom acționa respectiv pe butoanele stop iar pentru a închide aplicația XAMPP vom acționa exit.

Pentru a verifica dacă funcționează aplicațiile instalate, vom lansa browserul iar în cîmpul de adrese scriem:
http://localhost/xampp în loc de localhost se poate de scris și IP calculatorului sau 127.0.0.1 .Pentru a rula scripturile ele trebuiesc salvate(copiate) în C:\xampp\htdocs.

Editoare de cod

Întrucît sintaxa limbajului PHP este relativ simplă, iar structura codului sursă nu este una impusă, codul PHP poate fi scris cu orice editor text, cum ar fi Notepad. În realitate, acest lucru este posibil doar pentru scripturile de cîteva linii de cod, pentru fișiere mari și complexe, un editor PHP specializat este aproape indispensabil.

Exista mai multe editoare de cod-sursă ce pot fi folosite pentru PHP, de la IDE-uri complexe pînă la editoare simple. Toate oferă highlight pentru cuvintele cheie, completare automată a instrucțiunilor, facilități avansate de căutare și altele. Puteți folosi pe oricare dintre ele, în funcție de nevoile voastre.

  1. Dreamweaver - un program fascinant pentru creare de pagini web. Potențialul său este mai larg decît celelalte editoare de pagini web. Dreamweaver vă permite să creați obiecte și pagini web folosind DHTML, sprijină Cascading Style Sheets, precum și straturi și JavaScript.
  2. PHP Designer - un mediu de dezvoltare pentru limbaje ca PHP, HTML, XHTML, CSS și SQL (suporta Ingres, Interbase, MSSQL, MySQL, Oracle si Sybase). Pachetul mai include un browser, un client FTP, un file manager, biblioteci de coduri (pentru PHP, SQL si HTML) și un modul pentru conversia documentelor în formate ca LaTex, HTML si RTF.
  3. Notepad ++ - un editor de coduri sursă, care indeplinește foarte bine și funcțiile "Notepad" din windows. Limbajele de programare suportate sunt foarte variate ( ASP, Ada, ASCII art, Assembly, AutoIt, CSS, doxygen, FORTRAN, HTML, Haskell, Java, JavaScript, BAT, C, C#, C++, Caml, KiXtart, Lisp, Lua, makefile, Matlab, Objective-C, Pascal, Perl, PHP, Smalltalk, SQL, Tcl, TeX, Verilog, VHDL, VB/VBScript, XML, PostScript, Python, Ruby, Scheme, Unix Shell Script), suportă "drag and drop" și poate fi folosit în locul clasicului "Notepad" pentru editarea de texte fără nici un fel de problemă. Programul nu necesita resurse hardware mai mari decat "Notepad-ul" din Windows. Un plus în ceea ce privește editarea codurilor sursă este faptul că programul poate modifica (edita) același fișier în mai multe formate de vizualizare avînd loc sincronizarea fișierului în ambele formate și de asemenea se pot tipări codurile sursă pe hîrtie. Notepad++ - un notepad mult mai complex. Proiectul include foarte multe plug-in-uri ajutatoare pentru anumite editari complexe. Softul este gratuit (licenta GPL).
  4. ConTEXT - un editor mic, rapid și puternic de text freeware, dezvoltat pentru a servi ca un instrument secundar pentru dezvoltatorii de software.
  5. Zend Studio - un mediu de dezvoltare pentru limbajul de programare PHP, care include optiuni pentru editare cod, diagnosticare și testare.
  6. Eclipse - o platformă integrată de dezvoltare (IDE) extensibilă, ce dispune de o multitudine de funcționalități. Folosită inițial pentru dezvoltarea în limbajul Java, a fost ulterior extinsă și la alte limbaje de programare. Eclipse PDT (Eclipse PHP Development Tools) reprezinta la ora actuala cel mai avansat editor PHP. Este gratuit și poate rula pe orice sistem de operare. Mai multe informații pot fi gasite pe site-ul proiectului Eclipse PDT.
  7. Netbeans - vine din zona programării în Java. Este un IDE complet ce a fost extins recent pentru lucrul în PHP. Ca și Eclipse poate fi folosit pe orice sistem de operare întrucît rulează pe platforma Java. Poate fi descărcat gratuit de la http://netbeans.org/downloads/ (alegeti pachetul PHP). Modul de lucru în Netbeans este similar cu cel din Eclipse. Avem și aici conceptul de proiect iar pentru a putea crea scripturi PHP este nevoie să creați în prealabil un proiect de tip PHP. Toate celelalte observații făcute la editorul Eclipse rămîn valabile și aici.
  8. Sublime Text - Sublime Text este un editor de text care e la modă de ceva timp, datorită faptului că reușește să îmbine o mulțime de aspecte pe care ți le-ai dori de la un editor într-un program mic, dar foarte puternic. Sublime Text folosește un sistem de API Python pentru pluginuri și teme, care sunt incredibil de folositoare.
  9. Atom - Atom este un editor gratuit și open-source dezvoltat de cei de la GitHub ca răspuns la o serie de editoare extrem de populare cum ar fi Sublime Text, TextWrangler, TextMate si Textastic, preluând o parte din feature-urile acestora. Spre diferență de acestea însă, Atom oferă posibilitatea de a modifica aproape toate aspectele editorului de către utilizator.
  10. PhpStorm este un IDE comercial, multi-platformă, pentru PHP, construit de compania JetBrains din Republica Cehă. PhpStorm oferă un editor pentru PHP, HTML și JavaScript cu analize de cod din zbor, prevenirea erorilor și refactorii automate pentru codul PHP și JavaScript.
  11. Visual Studio Code este un editor de cod sursă dezvoltat de Microsoft pentru Windows, Linux și macOS. Include suport pentru depanare, control Git încorporat și GitHub, evidențierea sintaxei, completarea inteligentă a codului. Este foarte personalizabil, permițând utilizatorilor să schimbe tema, comenzile rapide de la tastatură, preferințele și să instaleze extensii care adaugă funcționalitate. Codul sursă este liber și open source și este eliberat sub licența MIT permisivă. În Studiul pentru dezvoltatori Stack Overflow 2019, Visual Studio Code a fost clasat cel mai popular instrument de mediu pentru dezvoltatori, 50,7% din 87.317 respondenți au susținut că îl folosesc.

Inițiere în PHP

Taguri PHP, instrucțiuni, punct și virgulă

Codul PHP trebuie inclus în fișierele ce vor fi deservite utilizatorilor finali și trebuie delimitat de restul conținutului prin tagul de început <?php și tagul de sfîrșit ?>. Practic tot ce se află în interiorul acestor etichete va fi interpretat ca fiind cod-sursa PHP (cod ce va fi executat de interpretorul PHP). Textul din afara celor 2 taguri este lăsat neschimbat, fiind ulterior interpretat de browser. Se pot folosi și alte etichete în funcție de configurația serverului web, dar acestea nu sunt recomandate.

Codul PHP este format din instrucțiuni - comenzi date către interpretor, în urma cărora se execută ceva. Așa cum s-a mai spus, PHP este folosit în principal pentru a genera cod HTML, așa că de cele mai multe ori instrucțiunile folosite sunt cele de afișare. În aplicații mai complexe se pot însă folosi și instrucțiuni de conectare la bazele de date, de citire/scriere/manipulare fișiere, instrucțiuni de trimitere email-uri și altele. Instrucțiunile se pot grupa în blocuri delimitate de acolade { }. Aceste blocuri, numite și "instrucțiuni complexe" se comportă ca și cum ar fi o singură instrucțiune (vezi mai jos exemple de blocuri).

Toate instructiunile (in afară de blocuri) trebuie să fie terminate cu punct si virgulă ( ; ). Lipsa acestuia generează o eroare.

Intrucțiuni uzuale în PHP: echo, print, printf

În multe din scripturile scrise de incepători (și nu numai) conținutul rezultat în urma execuției este un text (care poate fi sau nu cod HTML). Pentru a obține acest text, secvențele de cod trebuie să conțină instrucțiuni explicite care să "spună" intrepretorului ce anume trebuie afișat.

Instrucțiunile de afișare sunt print, echo și printf. Există și alte modalitați dar aceste 3 instrucțiuni sunt cele mai uzuale și usor de folosit. Diferențe între ele există, dar ca idee generală print și echo fac același lucru și poate fi folosită oricare dintre ele. printf este folosita mai rar datorită sintaxei oarecum greoaie.

În cazul paginilor statice create cu HTML utilizatorul poate vedea doar imagini și text. Folosind PHP însă vom putea crea așa numitele pagini dinamice în care apare elementul de interactivitate: se pot prelua date din formulare realizate în PHP, citi, prelucra și afișa. De asemenea se poate face interacțiunea cu o bază de date creată pe un server.

Crearea primului script php

Obs: echo - afișează un mesaj

Combinarea codului HTML cu cod PHP

Acest lucru se întîmplă foarte des. În interiorul unui script HTML poate exista script PHP delimitat de etichetele <?php și ?> însă fișierul final trebuie să fie PHP.

Exemplu:

Comentarii în scripturi:
# - un tip de comentariu pentru un rînd;
// - un alt tip de comentariu pentru un rînd;
/* și */ - pentru mai multe rînduri.

Variabile PHP

Variabilele sunt mărimi care pot lua diferite valori. Numele dat unei variabile începe întotdeauna cu simbolul $ urmat de o literă sau caracterul "_". Nu poate fi precedat niciodată de o cifră. Restul caracterelor care formează numele variabilei pot fi litere, cifre sau liniuțe de subliniere. În PHP, sunt considerate litere toate caracterele cuprinse între 'a' și 'z', cele cuprinse între 'A' și 'Z', precum și cele care au codul ASCII cuprins între 127 și 255.

Definim o variabilă astfel:
$<variabila>=<valoare>;

Exemplu :

Atenție: PHP face distincție între literele mari și mici. Astfel, cele 3 variabile de mai jos sunt TOTAL diferite:

Atribuirea de valori

Se realizează la fel ca și declararea prin intermediul instrucțiunii de atribuire.

Ștergerea variabilelor

De obicei nu e nevoie ca variabilele să fie șterse după ce au fost folosite. Totuși, lucrul acesta se poate face în următoarele moduri:

Afișarea variabilelor

Afișarea se realizează utilizând oricare din instrucțiunile de afișare:

Afișarea tipului de date a variabilei

Afișarea tipului de date a variabilei utilizând funcția gettype($var):

Output :

integer
boolean
string
NULL
array
object

Afișarea tipului de date a variabilei utilizând funcția var_dump($var):

Output:

bool(true)
float(3.14)
string(1) " "
NULL
array(0) { }
object(stdClass)#1 (0) { }

Variabile globale

$GLOBALS - pot fi accesate toate variabilele globale care sunt accesibile script-ului PHP curent.

$_SERVER - conține o serie de variabile ale căror valori sunt setate de server-ul web. Este o variabilă care conține informații cum ar fi headere, locația scriptului, sau informații despre vizitator și browser. Este posibil ca în funcție de setările fiecărui server și browser să nu fie active toate informațiile specificate de această variabilă. Această variabilă este de asemenea globală, adică se poate folosi oriunde în script, fără apelarea ei ca funcție globală (adică nu trebuie să o cereți cu global $_SERVER în funcțiile dvs.) În schimb $HTTP_SERVER_VARS conține aceleași informații dar nu este o funcție globală (atenție $HTTP_SERVER_VARSși $_SERVER sunt două variabile diferite, chiar dacă aparent fac aceleași lucruri) Dacă directiva register_globals este ON atunci aceste variabile vor deveni la rîndul lor variabile globale în cadrul scriptului. Elementele acestor variabile sunt cele de mai jos (atenție: în funcție de setările serverului și browserului unele elemente pot lipsi)

' PHP_SELF ' - conține numele fișierului unde se execută scriptul curent, relativ la rădacină (document root) De exemplu, $_SERVER['PHP_SELF'] într-un script la adresa http://example.com/test.php/foo.bar va fi /test.php/foo.bar . Constanta __FILE__ conține toată calea și numele fișierului curent.

' argv ' - Un array al argumentului trimis către script. Cînd scriptul rulează în linie de comandă, va da acces C-style la parametrii liniei de comanda. Cînd este accesat prin metoda GET, acesta va conține un sir de interogare.

' argc ' - Conține un număr al parametrilor liniei de comandă trimise către script (daca este rulat în linie de comanda).

' GATEWAY_INTERFACE ' - Returneaza versiunea CGI utilizată pe server (exemplu ' CGI/1.1 ').

' SERVER_NAME ' - Numele server-ului de hosting unde se execută scriptul curent. Dacă scriptul rulează pe un host virtual, aceasta va conține valoarea definită pentru acel host virtual.

' SERVER_SOFTWARE ' - Returnează un șir de identificare al server-ului dat în header ca raspuns la cerere.

' SERVER_PROTOCOL ' - Numele și versiunea protocolului prin care este cerută pagina (exemplu ' HTTP/1.0 ')

'REQUEST_METHOD' - returnează metoda utilizată pentru accesarea paginii (exemplu ' GET ', ' HEAD ', ' POST ', ' PUT ')

' REQUEST_TIME' - Valoarea timestamp dată la pornirea cererii. Este valabilă începînd de la versiunea PHP 5.1.0.

' QUERY_STRING ' - Sirul de interogare, dacă este, de la pagina care a fost accesată.

' DOCUMENT_ROOT ' - Directorul radăcină unde este rulat scriptul curent, așa cum este definit în fișierul de configurație al serverului.

' HTTP_ACCEPT ' - Conținutul header-ului acceptat de la cererea curentă, dacă este unul.

' HTTP_ACCEPT_CHARSET ' - Conține setul de caractere acceptate și care este trimis de header-ul cererii respective, dacă există. Exemplu: ' iso-8859-1,*,utf-8 '.

' HTTP_ACCEPT_ENCODING ' - Conține tipul de encodare trimis de cerera curentă prin header, dacă există.. Exemplu: ' gzip '.

' HTTP_ACCEPT_LANGUAGE ' - Conține limbajul trimis de cererea curentă prin header, dacă exista. Exemplu: ' en '.

' HTTP_CONNECTION ' - Conține informații despre conecsiiunea trimisă de cererea curentă prin header, dacă există. Exemplu: ' Keep-Alive '.

' HTTP_HOST ' - Conține informații despre host, header-ul de la cererea curentă, dacă există.

' HTTP_REFERER ' - Adresa paginii (dacă este) de unde a venit userul în pagina curentă. Aceasta este setată de către browser. Nu toate browserele setează această valoare, și chiar unele au posibilitatea de a modifica HTTP_REFERER așa cum vor. Pe scurt, nu este de încredere.

' HTTP_USER_AGENT ' - Conține semnătura browser-ului trimisă prin header la cererea curentă, dacă există. Un exemplu tipic este: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) . În afară de asta, puteți utiliza get_browser() pentru a vedea ce capabilitați are browserul folosit de user și astfel să returnați pagina specifică pentru acel browser.

' HTTPS ' - Setează o valoare dacă scriptul a fost cerut printr-un protocol securizat HTTPS

' REMOTE_ADDR ' - Adresa de IP a userului care accesează pagina curentă.

' REMOTE_HOST ' - Numele hostului userului care vede pagina curentă. Este inversul DNS-ului userului bazat pe REMOTE_ADDR. Atenție: Serverul web trebuie configurat pentru a crea această variabila. De exemplu în Apache va trebui HostnameLookups On în fișierul de configurare httpd.conf. Pentru alte detalii vedeți și funcția gethostbyaddr() .

' REMOTE_PORT ' - Portul prin care userul comunică cu serverul web.

' SCRIPT_FILENAME ' - Calea absolută unde se execută scriptul curent. Atenție: Dacă scriptul este rulat cu CLI, ca și cale relativă, cum ar fi file.php sau ../file.php , $_SERVER['SCRIPT_FILENAME'] va conține calea relativă specificată de către user.

' SERVER_ADMIN ' - Valoarea dată de directiva SERVER_ADMIN (pentru Apache) în fișierul de configurare al web serverului. Dacă scriptul rulează pe un host virtual, acesta va conține valoarea definită pentru acel host virtual.

' SERVER_PORT ' - Portul de pe server care este folosit pentru comunicare pe web. Pentru setările standard, acesta este ' 80 '; pentru SSL, de exemplu, se va schimba cu oricare port definit în transmisia securizată HTTP.

' SERVER_SIGNATURE ' - Conține un șir care cuprinde versiunea serverului și numele hostului virtual dacă este.

' PATH_TRANSLATED ' - Calea de bază a sistemul de fișiere (nu rădacina documentului) de la scriptul curent, după ce serverul a terminat maparea oricăror cai ( virtual-to-real mapping) Atenție: Începînd de la PHP 4.3.2, PATH_TRANSLATED nu mai este setat implicit în Apache 2 SAPI în contrast cu situația din Apache 1, unde este setată aceeași valoare ca și la SCRIPT_FILENAME. Această schimbare a fost făcută pentru a fi compatibilă cu specificațiile CGI în care PATH_TRANSLATED trebuie să existe doar dacă PATH_INFO este definit. Utilizatorii Apache 2 pot utiliza AcceptPathInfo = On în fișierul de configurație httpd.conf pentru a defini PATH_INFO .

' SCRIPT_NAME ' - Conține calea către scriptul curent. Acesta este util pentru pagini care trebuiesc definite către ele însuși. Constanta __FILE__ conține calea completă și numele de fișier al scriptului curent.

' REQUEST_URI ' - URI care este dat pentru accesarea paginii curente, de exemplu ' /index.html '.

' PHP_AUTH_DIGEST ' - Cînd rulați sub Apache ca modul, acțiunea Digest HTTP, valoarea acestei variabile este setată în 'Authorization' header trimis către client (care ar trebui utilizat pentru a face o validare corespunzătoare).

' PHP_AUTH_USER ' - Cînd este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul, actiunea HTTP authentication, această variabilă conține numele userului trimis de către user.

' PHP_AUTH_PW ' - Cînd este rulat sub Apache sau IIS (ISAPI pe PHP 5) ca modul, actiunea HTTP authentication, această variabilă conține parola userului trimisă de către user.

' AUTH_TYPE ' - Cînd este rulat sub Apache ca modul acțiunea HTTP authenticated , această variabilă seteaza tipul de autentificare.

Exemplu :

Variabilele pentru trimiterea datelor

$_GET este o variabilă array globală. A fost introdusă în versiunea 4.1.0. Pentru versiunile anterioare se folosește $HTTP_GET_VARS care nu este variabilă globală. Puteți folosi $_GET pentru a trimite variabile cu valori prin intermediul linkurilor.

$_POST este de asemenea o variabilă array globală. A fost introdusa în versiunea 4.1.0. Pentru versiunile anterioare se folosește $HTTP_POST_VARS care nu este variabilă globală. Puteți folosi $_POST pentru a trimite variabile cu valori prin intermediul formularelor.

$_GET și $_POST conțin variabile primite de script prin intermediul unor transferuri care folosesc metodele HTTP get, respectiv post. De exemplu, prin intermediul acestor vectori pot fi accesate valorile cîmpurilor dintr-un formular care a fost completat și transmis folosind una dintre cele doua metode.

Variabilele HTTP coockies

$_COOKIE conține valorile variabilelor care conțin informații referitoare la cookie-urile păstrate pe calculatorul utilizatorului care accesează pagina web. A fost introdus în versiunea 4.1.0. În versiunile anterioare, utilizați $HTTP_COOKIE_VARS.

Variabile pentru uploadul fișierelor

$_FILES conține variabile primite de script prin intermediul încărcărilor de fișiere prin metoda post. A fost introdus în versiunea 4.1.0. În versiunile anterioare se folosește $HTTP_POST_FILES care nu este variabilă globală.

Variabilele de mediu $_ENV

$_ENV conține variabile disponibile prin intermediul mediului în care este executat. A fost introdus în versiunea 4.1.0. În versiunile anterioare, utilizați $HTTP_ENV_VARS.

Variabilele pentru cereri

$_REQUEST conține variabile disponibile prin intermediul oricărui tip de mecanism cu ajutorul căruia utilizatorul poate introduce date. Este de tip array și conține valorile variabilelor $_GET , $_POST , și $_COOKIE. A fost introdusă în versiunea 4.1.0. Începînd de la versiunea 4.3.0, informațiile din $_FILES au fost de asemenea incluse în $_REQUEST.

Variabile de sesiune

$_SESSION conține variabile care corespund sesiunii curente a script-ului, sub formă de array. A fost introdusă în versiunea 4.1.0 și este de asemenea globală. În versiunile anterioare folosiți $HTTP_SESSION_VARS.

Tipuri de variabile

Variabilele pot fi de mai multe tipuri, nu doar numere. PHP are opt tipuri de variabile.
Patru dintre acestea sunt tipuri scalare: boolean, integer, float și string,
Două sunt tipuri compuse: array și object,
Două sunt tipuri speciale: resource și null.

În PHP, de obicei, tipul unei variabile nu este specificat de către programator, ci este stabilit în timpul execuției în funcție de contextul în care este folosită variabila.

Observație: Tipul de date este specificat prin valoarea atribuită variabilei inițiale.

Exemplu :

Se va afișa: Numarul 1

În cazul unui șir de caractere definit prin ghilimele duble se pot folosi următoarele secvențe:

Secvența
Semnificație
\n
rînd nou
\r
sfîrșit de linie
\t
tab orizontal
\\
backslash
\$
simbol dolar
\"
ghilimele duble

Constante PHP

O constantă, ca și variabila, stochează o valoare, dar această valoare, după ce a fost stabilită, nu mai paote fi modificată în script. Constantele sunt create cu ajutorul funcției define(), iar numele constantelor este scris cu majuscule, această opțiune nu este obligatorie, însă va face codul mai frumos și mai lizibil. O diferență importantă între constante și variabile, este faptul că o constantă nu are în fața ei semnul $.

Exemplu:

Este recomandat ca numele constantelor să fie scris cu majuscule (pentru a fi mai ușor identificate) deși nu este obligatoriu. Atunci cînd se folosesc, se specifică doar numele, fără ghilimele sau $:

Pentru a verifica dacă o constantă este definită, se folosește funcția defined

Operatori PHP

PHP permite folosirea a opt tipuri diferite de operatori:

  1. Operatori aritmetici
  2. Operatori de comparare
  3. Operatori pentru șiruri de caractere
  4. Operatori logici
  5. Operatori de atribuire
  6. Operatori de incrementare și decrementare
  7. Operatori pentru vectori
  8. Operatori de atribuire condiționată

Operatorii sunt folosiți pentru efectuarea diferitelor operații între una, două sau mai multe valori (sau expresii), numite operanzi. Rezultatul operației este o valoare/expresie.

1. Operatori aritmetici

Toți operatorii aritmetici operează asupra a două expresii (operanzi). Există șase astfel de operatori:

Operator

Nume

Exemplu

Rezultat

+
Adunare
$a + $b
Suma lui $a cu $b
-
Scădere
$a - $b
Diferența dintre $a și $b
*
Înmulțire
$a * $b
Înmulțirea lui $a la $b
/
Împărțire
$a / $b
Împărțirea lui $a la $b
%
Modulo(rest)
$a % $b
Restul de la împărțirea lui $a la $b
**
Exponențiere
$a ** $b
Ridicarea lui $a la puterea $b

Aceste operații se aplică asupra unor valori care reprezintă tipuri numerice. Dacă unul dintre operanzi nu are tip numeric, atunci el va fi convertit automat la o valoare întreagă. Dacă cel puțin unul dintre operanzi (după efectuarea eventualelor conversii necesare) este un număr real, atunci rezultatul operației va fi tot un număr real, cu excepția operatorului rest; rezultatul operației de determinare a restului este întotdeauna un număr întreg. Dacă ambii operanzi sunt numere întregi, atunci rezultatul va fi un număr întreg, cu excepția împărțirii al cărei rezultat este întotdeauna un număr real. Dacă operatorul rest este aplicat asupra unor numere reale, atunci rezultatul este un număr întreg. Nu este permisă împărțirea la valoarea 0. Dacă al doilea operand asupra căruia se aplică unul dintre operatorii '/' sau '%' are valoarea 0, va fi semnalată o eroare.

Exemple:

2. Operatori de comparare

Interpretorul PHP pune la dispozitie mai mulți operatori care pot fi folosiți pentru compararea a două valori. Expresiile în care apar astfel de operatori au ca rezultat valori logice (true sau false).

Cel mai des întîlnit operator este cel de atribuire, definit prin semnul =. Dacă scriem $x = 1 nu înseamnă că $x este egal cu 1 ci că i s-a acordat valoarea 1. Dacă scriem $rezultat = $x + $y nu înseamnă că $rezultat este egal cu suma celor două, ci că i-am atribuit (acordat) valoarea sumei celor două.

Operatorii folosiți pentru compararea valorilor variabilelor sunt:

Operator

Nume

Exemplu

Rezultat

== Egal $a==$b rezultatul este true dacă cele două expresii au aceeași valoare
=== Identic $a===$b rezultatul este true dacă cele două expresii au aceeași valoare și au același tip;
!=
sau
<>
Diferit a!=$b
sau
$a<>$b
rezultatul este true dacă cele două expresii au valori diferite;
!== Neidentic $a!==$b rezultatul este true dacă cele două expresii au valori diferite și au tipuri diferite;
< Mai mic $a<$b rezultatul este true dacă valoarea primei expresii este mai mică decât valoarea celei de-a doua expresii;
> Mai mare $a>$b rezultatul este true dacă valoarea primei expresii este mai mare decât valoarea celei de-a doua expresii
<= Mai mic sau egal $a<=$b rezultatul este true dacă valoarea primei expresii este mai mică sau egalăcu valoarea celei de-a doua expresii;
>= Mai mare sau egal $a>=$b rezultatul este true dacă valoarea primei expresii este mai mare sau egală valoarea celei de-a doua expresii;
<=> Spaceship $a<=>$b rezultatul este -1 dacă valoarea primei expresii($a) este mai mică ca valoarea expesiei a doua($b), rezultatul este 1 dacă valoarea primei expresii($a) este mai mare ca valoarea expesiei a doua($b) și rezultatul este 0 dacă valorile celor două expresii sunt egale;


Exemplu:

3. Operatori pentru șiruri de caractere

PHP are doi operatori special concepuți pentru șiruri.

Operator

Nume

Exemplu

Rezultat

. (punct)

Concatinarea

$a . $b

Concatinarea lui $a și $b

.= (punct și egal)

Concatinare prin atribuire

$a .= $b

Alipirea lui $b la $a

Acești operatori sunt folosiți pentru a uni stringuri, în felul urmator:

4. Operatori logici

Operatorii logici PHP sunt utilizați pentru a combina instrucțiuni condiționale.

Operator

Nume

Exemplu

Rezultat

and

Și

$a and $b

Adevărat dacă $a și $b sunt adevărate

or

Sau

$a or $b

Adevărat dacă $a sau $b sunt adevărate

xor

Sau exclusiv

$a xor $b

Adevărat dacă $a sau $b sunt adevărate, dar nu și ambele

&&

Și

$a && $b

Adevărat dacă $a și $b sunt adevărate

||

Sau

$a || $b

Adevărat dacă $a sau $b sunt adevărată

!

Nu

!$a

Adevărat, dacă $a nu este adevărat

Operatorii logici vă vor veni la îndemînă în execuția scriptului atunci cînd aveți nevoie să lucrați cu valori de adevăr. Să presupunem că la intrarea în secțiunea de administrare avem un formular care cere numele și parola de acces în secțiune. Pentru contruirea expresiilor logice operanzii trebuie să aibă tipul boolean; dacă operatorii au alt tip, valoarea este convertită la o valoare booleană. Scriptul PHP ar putea verifica aceste informații pentru a autoriza accesul în secțiune folosind operatorii logici.

5. Operatori de atribuire

Operatorul de atribuire de bază în PHP este "=". Înseamnă că operandul din stânga este setat la valoarea expresiei de atribuire din dreapta.

Operator

Varianta scurtă

Varianta standard

Descrierea

=

$a = $b

$a = $b

Operandul din stânga este setat la valoarea expresiei din dreapta

+=

$a += 2

$a = $a + 2

Adunare

-=

$a -= 2

$a = $a - 2

Scădere

*=

$a *= 2

$a = $a * 2

Înmulțire

/=

$a /= 2

$a = $a / 2

Împărțire

%=

$a %= 2

$a = $a % 2

Modulo

Exemplu:

Rezultatul codului de mai sus este:

 1 += 2 = 3
 1 -= 2 = -1
 1 *= 2 = 2
 1 /= 2 = 0.5

6. Operatori de incrementare și decrementare

Operatorii de incrementare PHP sunt folosiți pentru a crește valoarea unei variabile.

Operatorii de decrementare PHP sunt folosiți pentru a descrește valoarea unei variabile.

Operator

Exemplu

Nume

Rezultat

++

++$a

Pre-incrementare

Crește valoare lui $a cu 1, apoi returnează $a

++

$a++

Post-incrementare

Returnează $a, apoi crește valoare lui $a cu 1

--

--$a

Pre-decrementare

Descrește valoare lui $a cu 1, apoi returnează $a

--

$a--

Post-decrementare

Returnează $a, apoi descrește valoare lui $a cu 1

Operatorul de incrementare (++) are ca efect creșterea cu 1 a valorii unei variabile, iar cel de decrementare (--) are ca efect scăderea cu 1 a valorii variabilei. Tipul variabilei poate fi întreg sau real. Dacă operatorul precede variabila, atunci rezultatul expresiei este valoarea obținută după incrementare sau decrementare. Dacă variabila precede operatorul, atunci rezultatul expresiei este valoarea variabilei înaintea incrementării sau decrementării. Cu alte cuvinte, dacă operatorul precede variabila, atunci valoarea variabilei este mai întîi modificată și apoi utilizată, iar dacă variabila precede operatorul, atunci valoarea ei este mai întîi utilizată și apoi modificată.

Acești operatori pot fi utilizați și pentru variabile care conțin șiruri de caractere. Operatorul de incrementare duce la creșterea cu 1 a codului ASCII a ultimului caracter din șir dacă acesta este o litera sau cifră. În cazul în care litera este 'z', respectiv 'Z', sau cifra este '9', atunci ea devine 'a', respectiv 'A', sau cifra '0' și se încearcă incrementarea penultimului caracter. Dacă aceasta este tot '9', 'z' sau 'Z' se aplică același procedeu și se trece la antepenultimul caracter. Procedeul continuă pînă în momentul în care se ajunge la un caracter care nu este '9', 'z' sau 'Z' sau se ajunge la începutul șirului. În acest ultim caz, la începutul șirului se adaugă caracterul '1', 'a' sau 'A'. Incrementarea nu are nici un efect pentru caracterele care nu sunt cifre sau litere.

Decrementarea șirurilor de caractere nu are nici un efect, valorile variabilelor rămînînd nemodificate. Există o singură excepție și anume șirurile care reprezintă numere întregi sau reale. Acestea sunt incrementate sau decrementate potrivit regulilor pentru valorile numerice.

Exemplu:

Rezultatul codului de mai sus este:

a=7: Rezultatul operatiei a++ este 7. Noua valoare a variabilei a este 8.
a=8: Rezultatul operatiei ++a este 9. Noua valoare a variabilei a este 9.
a=9: Rezultatul operatiei a-- este 9. Noua valoare a variabilei a este 8.
a=8: Rezultatul operatiei --a este 7. Noua valoare a variabilei a este 7.
a=7.5: Rezultatul operatiei a++ este 7.5. Noua valoare a variabilei a este 8.5.
a=8.5: Rezultatul operatiei ++a este 9.5. Noua valoare a variabilei a este 9.5.
a=9.5: Rezultatul operatiei a-- este 9.5. Noua valoare a variabilei a este 8.5.
a=8.5: Rezultatul operatiei --a este 7.5. Noua valoare a variabilei a este 7.5.
a=PHP: Rezultatul operatiei a++ este PHP. Noua valoare a variabilei a este PHQ.
a=PHQ: Rezultatul operatiei ++a este PHR. Noua valoare a variabilei a este PHR.
a=PHR: Rezultatul operatiei a-- este PHR. Noua valoare a variabilei a este PHR.
a=PHR: Rezultatul operatiei --a este PHR. Noua valoare a variabilei a este PHR.

7. Operatori pentru vectori

Operator

Nume

Exemplu

Rezultat

+

Concatenare

$a + $b

Concatinarea lui $a cu $b

==

Egalitate

$a == $b

Returnează adevărat dacă $a și $b au aceleași perechi cheie/valoare

===

Identic

$a === $b

Returnează adevărat dacă $a și $b au aceleași perechi cheie/valoare în aceeași ordine și de aceleași tipuri

!=

Diferit

$a != $b

Returnează adevărat dacă $a nu este egal cu $b

<>

Diferit

$a <> $b

Returnează adevărat dacă $a nu este egal cu $b

!==

Neidentic

$a !== $b

Returnează adevărat dacă $a nu este identic cu $b

Rezultatul concaternării a doi vectori este un vector care conține elementele din cei doi vectori. Dacă cei doi vectori conțin elemente cu aceeași cheie, atunci este păstrat doar elementul din vectorul care reprezintă primul operand.

Exemplu:

Rezultatul codului de mai sus este:

100 2 300 4 5 7

8. Operatori de atribuire condiționată

Operatorii de atribuire condiționată PHP sunt utilizați pentru a seta o valoare în funcție de condiții:

Operator

Nume

Exemplu

Rezultat

?:

Ternar

$a=expr1 ? expr2 : expr3

Returnează valoarea lui $a
Valoarea lui $a este expr2 dacă expr1 = ADEVĂRAT.
Valoarea lui $a este expr3 dacă expr1 = FALS

??

Coaliere nulă

$a = expr1 ?? expr2

Returnează valoarea lui $a.
Valoarea lui $a este expr1 dacă expr1 există și nu este NULL.
Dacă expr1 nu există sau este NULL, valoarea $a este expr2.
Introdus în PHP 7

Exemplu:

Exercițiu:

Se dau două numere reale x și y. Să se calculeze următoarele expresii:
A=2+x-y
B=x*A+y
C=A-2*B+x

Structuri condiționale

Structura if

Una dintre cele mai importante structuri în orice limbaj este cea alternativă. În PHP sintaxa acestei structuri este următoarea:

Folosirea unei astfel de structuri indică faptul că instrucțiunile se vor executa dacă și numai dacă valoarea expresiei conditie (eventual după conversia la tipul boolean) va fi true.

Exemplu

se compară două variabile şi se afişează un mesaj:

Construcția if...else

În foarte multe cazuri dorim să se execute alte instrucțiuni dacă valoarea expresiei condiție este false. În PHP putem utiliza o construcție de tipul if..else în acest scop. Sintaxa este:

Exemplu

Construcția if...elseif...else

Uneori, suntem nevoiți să folosim structuri alternative imbricate în diferite scopuri. Folosind construcții de tipul if - else vom obține o secvență de tipul:

Limbajul PHP permite folosirea unei prescurtări și anume construcția elseif. Practic, aceasta înlocuieste un else urmat de un if. Folosind această structură, codul anterior poate fi scris astfel:

Exemplu:

Structura switch

În anumite cazuri trebuie să efectuăm anumite operații în funcție de anumite valori ale unei expresii. O soluție ar fi folosirea unor structuri if imbricate sau a uneia singure în care apar mai multe construcții elseif.
Să presupunem că o anumită variabilă poate avea cinci valori distincte și pentru fiecare valoare trebuie executată o anumită instrucțiune. Dacă folosim structura if, secvența de cod va fi următoarea:

Folosind structura switch, secvența echivalentă este:

Prezentăm în continuare sintaxa generală a structurii switch:

Pentru început se determină valoarea expresiei și apoi se verifică dacă aceasta apare ca valoare pentru una dintre construcțiile case. În caz afirmativ, toate instrucțiunile începînd cu cea corespunzătoare valorii respective (pînă la sfîrșitul blocului swich) vor fi executate. Execuția acestor instrucțiuni poate fi întreruptă dacă este folosită instrucțiunea break, care va fi prezentată mai jos. Dacă valoarea expresiei nu corespunde nici uneia dintre valorile corespunzătoare construcțiilor case, se execută instrucțiunile corespunzătoare construcției default. Dacă aceasta lipseste, atunci nu se execută nici o instrucțiune. Trebuie precizat faptul că valorile corespunzătoare construcțiilor case pot fi numere întregi, numere reale sau șiruri de caractere; nu pot fi utilizate obiecte sau vectori.

Exemplu: Transformă numărul zilei în numele ei

Exerciții:

1. Să se afle minimum și maximum din trei numere date a, b, c, cu ajutorul instrucțiunii if.
2. Sunt date trei numere a, b, c. De afișat numerele în ordine crescătoare(descrescătoare).

Structuri repetitive

Structura while

Majoritatea script-urilor PHP vor conține cicluri. Pentru a folosi o buclă anterior condiționată vom utiliza structura while. Sintaxa acestei structuri este:

Efectul acestei structuri este executarea instrucțiunii atît timp cît valoarea expresiei conditie (eventual după conversia la tipul boolean) este true. Trebuie observat faptul că este posibil ca instrucțiunile din acoladă să nu fie executată niciodată.

Exemplu:

Structura do - while

Uneori, dorim să folosim bucle posterior condiționate. În acest scop, în PHP avem la dispoziție structura do - while a cărei sintaxă este:

Singura diferență față de structura while este faptul că valoarea condiției este determinată, de fiecare dată, după executarea instrucțiunii. Ca urmare, instrucțiunea va fi executată cel puțin o dată. Nu există o sintaxă alternativă pentru această structură.

Exercițiu:

Se dă șirul 1..100, utilizând operatorul while. Să se afișeze numerele pare apoi și numerele impare din șirul dat.

Structura for

Sintaxa este foarte asemănătoare cu cea din limbajele C/C++ și Java și anume:

Prima expresie este evaluată o singură dată, înainte de începerea execuției ciclului. Expresia conditie este testată înaintea fiecarei repetari a buclei. Dacă expresia returneaza valoarea false, repetarea se oprește. expresie #2 este executata la fiecare repetare a buclei.
instructiuni se execută la fiecare repetare a buclei.
Oricare dintre cele trei expresii poate lipsi. În cazul în care o expresie lipsește, se consideră că ea are valoarea true.
Bucla WHILE și FOR sunt identice din punct de vedere funcțional însă bucla FOR este puțin mai complexă.

Exemple:

Exerciții:

1. Sunt date numerele K și N(N>0). De afișat de N ori numărul K;
2. De elaborat un script ce va afișa tabla înmulțirii;
3. De elaborat un script ce va afișa tabla de șah;
4. De elaborat un script care va calcula numărul exact de ani, luni și zile dela ziua de naștere.
5. Să se scrie un program care să afișeze următoarele valori:
1*9 + 2 = ?
12*9 + 3 = ?
123*9 + 4 = ?
.................
123456789*9 + 10 = ?
6. Să se scrie un program care să afișeze următoarea "piramidă" de numere:
1
1 2 3
1 2 3 4 5
..............
1 ......(2n-1)

Tipul tablou(matrice) în PHP

1.Generalitati: definitie, forme

Variabilele matrice (array, tablou), sunt acel tip de variabile, care pot sa stocheze o matrice de valori (mai multe valori). Variabilele matrice sunt variabilele care pot stoca colectii de valori, organizat ca seturi pereche, cheie - valoare.

Tipul acestor valori, poate fi de acelasi tip, dar poate fi si diferita. Variabilele matrice suporta orice tip de date suportate de PHP, inclusiv "tipul de date" matrice, cea ce face posibila crearea de variabile matrice multidimensionale.

În funcție de tipul, natura, cheii folosite, sunt două forme de variabile matrice:

  • indexate - cheile acestor variabile matrice sunt numere intregi, incepand cu 0
  • asociative - cheile acestor variabile matrice sunt siruri de caractere

In realitate, PHP trateaza toate variabilele matrice, ca variabile matrice asociative, cu diferenta ca cheile matricii indexate, sunt numere intregi. In ambele cazuri, cheile sunt unice, prin urmare nu putem sa avem doua elemente cu aceasi cheie. Reciproca nu este valabila, in sensul ca doua elemente cu chei diferite pot sa aiba aceasi valoare.

Variabilele matrice in PHP, au o ordine interna a elementelor lor, care este independenta de chei sau de valori. Ordinea normala este data de ordinea in care s-au initializat elementele, dar functiile de sortare despre care vom vorbi mai tarziu, dau posibilitatea schimbarii ordinii interne in functie de chei, de valori, sau oricum doriti.


2.Initializarea variabilelor matrice

Initializarea variabilelor matrice, se poate realiza simplu, initializand fiecare element separat, ca o variabila simpla, sau folosind unele functi interne ale PHP, dedicate pentru acest lucru, cum este array ().


2.1.Initializarea separata a variabilelor matrice

Pentru initializarea variabilelor matrice, cel mai la indemana, este initializarea fiecarui element separat:

Initializarea variabilelor matrice - fiecare element separat

Matrice indexata Matrice asociativa
$a[0]="Vasile";
$a[1]="Ion";
$a[2]="Gheorghe";
$a["Popescu"]="Vasile";
$a["Dascalu"]="Ion";
$a["Popa"]="Gheorghe";

Exemplu:

2.2. Initializarea variabilelor matrice cu functia array

Variabilele de tip tablou se mai pot initializa si prin constructia sau declaratia array(), care este, cel putin in cazul matricilor unidimensionale, mai usoara:

Initializarea variabilelor matrice cu constructia array()

Matrice indexata Matrice asociativa

$a=array("Vasile", "Ion", "Gheorghe");

$a=array("Popescu"=> "Vasile", "Dascalu"=> "Ion", "Popa"=> "Gheorghe");

Valorile (in cazul variabilelor cu index), sau perechile cheie - valoare (in cazul tablourilor asociative) sunt separate prin virgula.

Exemplu:

Cu ajutorul constructiei array (), variabilele matrice se mai pot initializa si dupa cum urmeaza:

  • se defineste o variabila matrice fara valori: $var=array();
  • se specifica o cheie de pornire, cu =>, si apoi o lista de valori; valorile sunt inserate in matrice, incepand cu cheia specificata

In cazul tablourilor indexate, urmatoarele chei vor fi in ordine crescatoare fata de cheia initiala

In cazul tablourilor a caror cheie de pornire este un sir, cheile urmatoare vor fi numere intregi, prima valoare fiind 0.

Exemplu:

2.3. Adaugarea de valori suplimentare, ulterior initializarii

Daca cunoastem indicele ultimei valori a variabilei, putem adauga noi elemente prin indicarea indexului:
$var[4] = "Nat";

Totusi, nu intodeauna cunostem cate elemente are o variabila, sau care este cheia ultimului element. PHP va furnizeaza o cale simpla, pentru a adauga variabilei un nou element:

$var[] = "val_sup";

Exemplu:

3.Identificarea elementelor unei variabile matrice

Pentru a accesa valoarea unui anumit element dintr-o variabila matrice, folosim numele variabilei, urmat de cheia elementului intre paranteze drepte:

$nume_var[numar]
$nume_var["sir_cheie"]

Cheia, sir_cheie poate sa fie, un sir sau un numar intreg. Cand este un numar intreg, este tratat ca atare. Astfel, $var[3] si $var["3"] sunt acelasi element, dar $var["03"] este alt element. Numerele negative sunt chei valide, si ele nu specifica pozitia la sfarsitul tabloului ca in Perl.

Exemplu:

Sirurile dintr-un singur cuvant, nu este obligatoriu sa fie puse intre ghilimele. De exemplu, $var[Popescu] este la fel ca $var["Popescu"]. Totusi, se considera ca o buna practica PHP, sa folositi intodeauna ghilimelele, deoarece cheile fara ghilimele, nu se pot deosebi de constantele introduse ca index:

Exemplu:

Cand aveti nevoie sa recuperati elemente prin indexul matricii (matrice asociativa cu index), trebuie sa folositi ghilimelele duble, pentru ca PHP sa recunoasca variabila indice.

Exemplu:

4.Variabilele matrice multi-dimensionale

Vom vorbii in particular despre matricile (tablourile) bidimensionale, deoarece sunt mai usor de vizualizat, atat vizual, cat si mental. Vom lua un tabel, valorile sale le vom introduce intr-o variabila matrice, ca sa avem o asociere buna.

Tabel exemplu

- Nume Prenume An nastere
Rand/Col 0 1 2
0 Popescu Vasile 1964
1 Dascalu Ion 1982
2 Popa Gheorghe 1955

Lasand la o parte capul de tabel, precum si randul, respectiv coloana, pentru numerotarea randurilor si coloanelor, avem un tabel cu trei randuri si trei coloane. Valorile acestui tabel se pot stoca intr-o variabila matrice bidimensionala in trei modalitati:

  • prin initializarea separata a fiecareui element

$a[0][0]="Popescu";
$a[0][1]="Vasile";
$a[0][2]="1964";
$a[1][0]="Dascalu";
$a[1][1]="Ion";
etc.

  • prin initializarea mixta, fiecare rand cu constructia array

$a[0]=array("Popescu", "Vasile", "1964");
$a[1]=array("Dascalu", "Ion", "1982");
$a[2]=array("Popa", "Gheorghe", "1955");

  • doar cu constructia array

$a=array(array("Popescu", "Vasile", "1964"), array("Dascalu", "Ion", "1982"), array("Popa", "Gheorghe", "1955") );

Observam ca matricile bidimensionale, au evident doi indici. Prin extrapolare, putem spune ca o matrice n dimensionala trebuie sa aiba n indici. Nu am vazut nicaieri vreo restrictie privind dimensiunea unei variabile matrice, eu am folosit in acest curs matrice cu 4 dimensiuni, dar nu este bine sa exagerati.

Recuperarea valorilor, elementelor unei matrici bidimensionale, este identic procedural ca a matricilor unidimensionale, adica prin indicarea cheilor variabilei, deci trebuie sa cunoastem cheile elementului a carei valoare vrem s-o recuperam:

$nume_var[cheie_1][cheie_2]

Deoarece PHP trateaza cele doua tipuri de variabila matrice, ca variabile asociative, putem sa spunem ca si variabilele asociative se initializeaza si recupereaza similar.

Exemplu:

5.Functiile specifice variabilelor matrice

Limbajul PHP chiar daca are un numar restrins de instructiuni, are in schimb un numar impresionant de funtii interne, care dau puterea acestui limbaj de programare.

Cele mai importante domenii privind variabilele matrice sunt legate de initializarea (crearea) lor, precum si identificarea elementelor sale. Alte domenii cel putin la fel de importante sunt modificarea si efectuarea de operatii cu elementele variabilelor matrice. Un alt domeniu interesant, este domeniul verificarilor. Functiile interne furnizate de PHP, incearca sa acopere aceste domenii, unele din ele, interferand chiar doua domenii.

5.1.Functii pentru crearea variabilelor matrice

Functiile doar pentru crearea variabilelor matrice sunt:

Functii pentru crearea de noi variabile matrice

Funcția Descriere
array() Creează o variabilă matrice.
range() Întoarce o variabilă matrice, a cărui elemente au valoarile ordonate de la o valoare minimă la una maxima, cu diferența între valorile elementelor consecutive egală cu un pas - ordonarea poate fi și descrescătoare.

5.1.1.funcția array()

Această funcție am văzut-o în acțiune, așa că vom vorbi foarte pe scurt despre ea. În primul rând este principala metodă pentru crearea variabilelor matrice.

Sintaxa:

$nume_var = array ("cheie_1" => "val_1", "cheie_2" => "val_2", ... );

Aceasta este sintaxa generala. Dupa cum am vazut sunt cazuri particulare.

  • cheie_1, cheie_2 - sunt valorile cheilor viitoarei variabile matrice - sunt optionale
  • val_1, val_2 - sunt valorile elementelor viitoarei variabile matrice, corespunzator cheii - si ele sunt optionale, daca sunt omise si ele, se defineste o variabila matrice fara valori
  • => - defineste corespondenta cheie - valoare - optional, in cazul in care cheile nu sunt definite, chiar trebuie sa lipseasca.

Cheile cheie_1, cheie_2 pot fi, fie numere intregi, fie sir de caractere. Cand este omisa atunci functia genereaza automat chei numerice incepand cu 0, cu rata de crestere 1.

Descriere si functionare

Aceasta functie creaza (intoarce) o variabila matrice, cu perechi chei valori, conform argumentelor setate.

5.1.2. functia range()

Sintaxa:

$nume_var = range (val_min, val_max, pas);

Argumentele functiei range()

Argument Descriere
val_min Necesar. Specifica valoarea minima a valorilor elementelor variabilei matrice, care in general se aloca elementului cu indicele 0.
val_max Necesar. Specifica valoarea maxima (cea mai mare) a valorilor elementelor variabilei matrice, care in general se aloca elementului cu indicele cel mai mare.
pas Optional. Specifica pasul cu care cresc valorile elementelor variabilei matrice. Predefinit (deci daca nu setam acest argument) este 1.

Descriere si functionare

Aceasta functie creaza o variabila matrice, care contine o clasa de elemente, ale carei valori sunt de la val_min pana la inclusiv val_max, cu pasul intre valori determinat de pas. Altfel spus, intoarce o variabila matrice, a carui elemente au valoarile ordonate de la val_min la val_max, cu diferenta intre valorile elementelor consecutive egala cu pas.

Nota: Daca parametrul val_min este mai mare decat val_max atunci ordonarea se va face de la mai mare spre mai mic.

Exemplu:

5.2.Functii pentru crearea variabilelor matrice prin procesarea altor variabile

Pentru acest caz, PHP furnizeaza mai multe functii, dintre care am selectat:

Functii pentru crearea de noi variabile matrice

Functia Descriere
array_pad() Intoarce o variabila matrice care are inserate un numar specificat de elemente, cu valoare definita, pe langa elementele matricii care se prelucreaza.
array_slice() Intoarce o variabila matrice, care are ca elemente, unele din elementele selectate ale variabilei matrice argument, fara a o afecta pe aceasta.
array_chunk() Intoarce o variabila matrice bidimensionala, prin impartirea variabilei matrice argument.
array_keys() Intoarce o variabila matrice, care are ca elemente, cheile altei variabile matrice.
array_values() Intoarce o variabila matrice, insa indexata, care are ca elemente, valorile altei variabile matrice, asociative.
explode() Intoarce o variabila matrice, dintr-un sir de caractere, prin impartirea sirului de caractere, in functie de un separator.
compact() Intoarce o variabila de matrice, cu valorile unor variabilelor simple.
array_reverse() Intoarce o variabila matrice, cu valorile elementelor in ordine inversata fata de variabila matrice argument.
array_flip() Intoarce o variabila matrice, care are ca chei, valorile variabilei matrice argument, iar ca valori, cheile acestei variabile.
array_keys() Intoarce o variabila matrice care contine valorile tuturor variabilelor matrice care sunt argumentele functiei.
array_chunk() Aceasta functie compara doua sau mai multe variabile matrice, si intoarce o alta variabila matrice, cu elementele primei variabile (cheile si valorile sale), din care se extrag elementele a caror valoare se gaseste in una din variabilele urmatoare.
array_unique() Aceasta functie intoarce o variabila matrice, care are valorile elementelor matricei argument, dintre care se inlatura valorile duplicate. Daca doua sau mai multe valori sunt la fel, prima aparitie va fi pastrata, iar celelalte vor fi inlaturate.
array_intersect() Aceasta functie compara doua sau mai multe variabile matrici, si intoarce o matrice cu cheile si valorile primei matrice, dar doar daca valorile sunt si in celelalte matrice. Daca mai multe chei au aceeasi valoare, prima cheie va fi pastrata.
array_filter() Aceasta functie trece fiecare valoare a variabilei, unei functi utilizator, de tip comparator, care intoarce fie TRUE fie FALSE. Functia intoarce o variabila matrice doar cu valorile care au intors TRUE.

5.2.1. functia array_pad()

Sintaxa

$nume_var = array_pad ($array, marime, valoare);

Argumentele functiei array_pad()

Argument Descriere
$array Necesar. Specifica matricea care se prelucreaza.
marime Necesar. Specifica numarul de elemente a noii variabile matrice intoarsa de functie.
valoare Necesar. Specifica valoarea noilor elemente din matrice intoarse de functie.

Descriere si functionare

Aceasta functie, intoarce o variabila matrice, care are ca elemente, elementele variabilei matrice argument, pe langa care sunt inserate un numar specificat de elemente (numarul de elemente este determinat de argumentul marime), cu o valoare specificata, (determinata de argumentul valoare).

Nota:

  • - nu taie din elementele matricii, cand parametrul marime, este mai mic decat numarul original de elemente.
  • - daca setam marime cu un numar negativ, functia va insera elementele noi in fata elementelor originale.

Exemplu


5.2.2. functia array_slice()

Sintaxa:

$nume_var = array_slice ($array, start, lungime, pastrare);

Argumentele functiei array_slice ()

Argument Descriere
$array
Necesar. Specifica variabila matrice care se prelucreaza.
start Necesar. Este o valoare numerica intraga. Specifica de la al catelea element al variabilei matrice argument ($array) incepe functia sa preia elemente.
0 - este incepand cu primul element.
Daca acest parametru este setat cu un numar negativ, functia va incepe numararea elementelor, de la ultimul element. (-2 inseamna ca va incepe cu penultimul element)
lungime Optional. Este o valoare numerica intreaga. Specifica numarul de elemente a variabilei matricei intoarse.
Daca acest parametru este setat cu un numar negativ, functia nu va mai numara elementele, ci va lua ca ultim element intors, elementul anterior elementului cu numarul setat, dar numarand de la ultimul element (vezi exemplul).
Predefinit functia intoarce toate elementele, incepand de la pozitia setata prin argumentul start.
pastrare Optional. Valori posibile:
true - pastreaza cheile variabilelor matrice indexate conform variabilei argument ($array)
false - predefinit, reface cheile variabilelor matrice indexate, incepand cu 0.

Descriere si functionare

Aceasta functie creaza o variabila matrice, taiand o parte dintr-o alta variabila matrice. Cu alte cuvinte, seteaza cheile si valorile unei noi variabile cu o parte din cheile si valorile corespunzatoare ale matricii argument. Partea cu care este setata noua variabila este determinata de argumentele functiei.

  • cheia de la care se incepe "taierea" este data de argumentul start - de la al start-lea element
  • cate elemente se transfera, este data de argumentul lungime

Nota:
Predefinit, variabilele matrice asociative, raman variabile matrice asociative.

Exemplu

Exemplu si cu functionarea valorii negative a argumentului lungime:

Exemplu cu variabile matrice asociative:

5.2.3. functia array_chunk()

Sintaxa

$nume_var = array_chunk ($array, marime, pastrare);

Argumentele functiei array_chunk ()

Argument Descriere
$array Necesar. Specifica variabila matrice care se prelucreaza.
marime Necesar. Specifica cate elemente va contine primul element al noi variabile matrice bidimensionale.
pastrare Optional. Valori posibile:
true - pastreaza cheile variabilelor matrice indexate conform variabilei argument
false - predefinit, reface cheile variabilelor matrice indexate, incepand cu 0.

Descriere si functionare

Aceasta functie, intoarce o variabila matrice bidimensionala, din elementele altei variabile matrice. Noua variabila matrice va avea primul element cu un numar de marime elemente, restul elementelor variabilei matrice argument, vor face parte din al doilea element a variabilei.

Daca argumentul marime, are valoarea mai mare decat numarul de elemente a variabilei originale, atunci toate elementele acestei variabile, vor fi alocate primului element a noi variabile.

Exemplu

5.2.4. functia array_keys()

Sintaxa

$nume_var = array_keys ($array, val_key, strict);

Argumentele functiei array_keys()

Argument Descriere
$array Necesar. Specifica variabila matrice argument, cea a carei chei le va prelua noua variabila, intoarsa de functie.
valoare Optional. Puteti specifica o valoare a matricii origine, astfel va fi intoarsa doar cheia cu aceasta valoare.
strict Optional. Folosit impreuna cu parametrul valoare. Valori posibile:
true - Intoarce cheia cu valoarea specificata, in functie de tip: numarul 5 nu este la fel cu sirul "5".
false - Valoarea predefinita. Nu depinde de tip, numarul 5 este la fel ca sirul "5".

Descriere si functionare

Aceasta functie, intoarce o variabila matrice, ale carei elemente vor fi cheile variabilei matrice argument $array.

Exemplu

5.2.5. functia array_values()

Sintaxa

$nume_var = array_values ($array);

Descriere si functionare

Aceasta functie, intoarce o variabila matrice indexata, ale carei elemente vor avea valorile variabilei matrice argument $array, care macar pentru logica, trebuie sa fie asociativa.

Exemplu

5.2.6. functia explode ()

Sintaxa

$nume_var = explode (separator, sir, limita);

Argumentele functiei explode ()

Argument Descriere
separator
Necesar. Specifica separatorul care indica unde se intrerupe sirul.
sir Necesar. Este sirul care se imparte, pentru a devenii variabila matrice.
limita Optional. Specifica numarul maxim de elemente a variabilei matrice care va fi intoarsa.

Descriere si functionare

Converteste un sir de caractere (string) intr-o variabila matrice, prin divizarea cu un separator specificat. Intoarce variabila matrice cu subsiruri, creat prin impartirea sirului, ori de cate ori intalneste separatorul.

Nota: Separatorul nu poate fi un sir gol.

Exemplu

5.2.7. functia compact ()

Sintaxa

$nume_var = compact (var1, var2,...);

Descriere si functionare

Aceasta functie creaza o variabila matrice, din mai multe variabile simple a caror nume sunt trecute ca argumente ale functiei ( var1, var2, ...), fara caracterul $. Argumentele functiei (numele functiilor simple, fara caracterul $), devin cheile noi variabile matrice, intoarse de functie, iar valorile variabilelor simple, devin valorile corespunzatoare ale noi variabile.

Exemplu

5.2.8. functia array_reverse ()

Sintaxa

$nume_var = array_reverse ($array, pastrare);

Argumentele functiei array_reverse ()

Argument Descriere
$array Necesar. Specifica variabila matrice care se proceseaza.
pastrare Optional. Specifica daca functia isi pastreaza cheile matricii sau nu.
Valori posibile:
- true - pastreaza cheile variabilei de origine
- false - predefinit - aloca chei noi

Descriere si functionare

Acesta funcție întoarce o nouă variabilă matrice, cu valorile elementelor in ordine inversa decat a variabilei matrice care se prelucreaza.

Exemplu

5.2.9. functia array_flip ()

Sintaxa

$nume_var = array_flip ($array);

Descriere si functionare

Aceasta functie creaza o variabila matrice, care preia valorile matricii care se proceseaza ca chei, iar cheile ca valori.

Exemplu

5.2.10. functia array_merge ()

Sintaxa

$nume_var = array_merge ($array1, $array2, ...);

Descriere si functionare

Aceasta functie uneste una $array1 (necesar), sau mai multe $array2, ... (optionale) variabile matrice intr-o noua variabila matrice $nume_var.

Nota: Daca doua sau mai multe elemente a variabilelor matrice au aceasi cheie (in cazul variabilelor asociative), cheia ultimei variabile, se suprapune peste celelalte, rezultand un numar de elemente mai redus.

Daca atribuiti o singura variabila functiei si cheile sunt numere intregi, functia va intoarce o noua variabila cu cheie numere intregi pornind de la 0 si crescand cu 1.

Exemplu

5.2.11. functia array_diff ()

Sintaxa

$nume_var = array_diff ($array1, $array2, ...);

Descriere si functionare

Aceasta functie intoarce o variabila matrice, care are ca elemente, elementele (chei si valori) matricii argument $array1, din care se retrag elementele a caror valoare se regaseste in una din variabilele matrice argument $array2, .... Atentie, se compara doar valorile, nu si cheile variabilelor.

Exemplu

5.2.12. functia array_unique ()

Sintaxa

$nume_var = array_unique ($array);

Descriere si functionare

Aceasta functie intoarce o variabila matrice, care are ca elemente, elementele matricii argument $array, dar pastreaza o singura valoare in cazul in care sunt mai multe elemente cu aceasi valoare.

Nota : Variabila intoarsa va pastra cheia primului element duplicat, al variabilei matrice argument.

Exemplu

5.2.13. functia array_intersect ()

Sintaxa

$nume_var = array_intersect ($array1, $array2, ...);

Descriere si functionare

Aceasta functie intoarce o variabila matrice, care are ca elemente, elementele matricii argument $array1 (necesar), dar doar valorile care se regasesc si in celelalte variabile matrice argument $array2, ... (necesar $array2, celelalte optionale).

Variabila intoarsa, va avea cheile si valorile primei variabile matrice argument, dar doar daca valorile se regasesc si in celelalte variabile matrice. Daca mai multe chei au aceeasi valoare, prima cheie va fi pastrata.

Exemplu

5.2.14. functia array_filter ()

Sintaxa

$nume_var = array_filter ($array, "nume_functie");

Descriere si functionare

Aceasta functie intoarce o variabila matrice $nume_var, din elementele care intorc TRUE ale unei variabile matrice $array atunci cant sunt aplicate unei functii utilizator de tip comparativ nume_functie, asociata functiei array_filter, ca argument.

Exemplu

Structura foreach

Această structură poate fi folosită pentru a realiza o iterație printre toate elementele unui vector. Așadar, ea nu poate fi folosită decît împreună cu vectorii; utilizarea sa asupra unei variabile de alt tip duce la apariția de erori. Există două sintaxe acceptate pentru această structură și anume:

sau

Dacă se utilizează prima variantă, atunci la fiecare iterație valoarea elementului curent este atribuită variabilei $valoare și apoi se trece la elementul următor (a cărui valoare va fi atribuită variabilei la următoarea iterație). Execuția ciclului se încheie în momentul în care nu mai există alte elemente în vector. Singura diferența care apare în cazul utilizării celei de-a doua variante este faptul că la fiecare iterație valoarea cheii elementului curent este atribuită variabilei $cheie.
În continuare este un exemplu de folosire a celor doua sintaxe ale structurii foreach.

și

Sortarea tablourilor

Sortarea tablourilor se realizează cu funcţiile următoare:


1. sort() – sortează ascendent un tablou în funcţie de valoarea elementelor
2. asort() – sortează ascendent un tablou asociativ în funcţie de valoarea elementelor
3. ksort() - sortează ascendent un tablou în funcţie de cheie
4. rsort() – sortează descendent un tablou în funcţie de valoarea elementelor
5. arsort() – sortează descendent un tablou asociativ în funcţie de valoarea elementelor
6. krsort() - sortează descendent un tablou în funcţie de cheie

Exemple:

Sortează ascendent un tablou în funcţie de valoarea elementelor.

Output

Array ( [0] => Anton [1] => Gheorghe [2] => Serghei [3] => Vasilescu )

Sortează ascendent un tablou asociativ în funcţie de valoarea elementelor.

Output

Array ( [Vasile] => 1000 [Anton] => 1250 [Gheorghe] => 1380 [Serghei] => 1440 )

Sortează ascendent un tablou în funcţie de cheie.

Output

Array ( [Anton] => 1250 [Gheorghe] => 1380 [Serghei] => 1440 [Vasile] => 1000 )

Sortează descendent un tablou asociativ în funcţie de valoarea elementelor.

Output

Array ( [Serghei] => 1440 [Gheorghe] => 1380 [Anton] => 1250 [Vasile] => 1000 )

Sortează descendent un tablou în funcţie de cheie.

Output

Array ( [Vasile] => 1000 [Serghei] => 1440 [Gheorghe] => 1380 [Anton] => 1250 )

Instrucțiunea break

Această instrucțiune poate fi folosită pentru a întrerupe forțat execuția unui ciclu sau a secvenței de instrucțiuni corespunzătoare unei structuri switch. Instrucțiunea poate fi urmată de un argument care indică numărul de structuri îmbricate a căror execuție se încheie. Valoarea implicită este 1, deci se întrerupe execuția unei singure structuri. Următoarea secvență de cod PHP realizează parcurgerea elementelor unui vector de numere întregi pînă în momentul în care se întîlnește un număr negativ.

Output

1
15
19
-1

Mai departe aveți cazul în care este întreruptă execuția mai multor cicluri; vom considera că parcurgem elementele unei matrice pătratice cu n elemente și n coloane pînă în momentul în care întîlnim o valoare nulă.

Instrucțiunea break poate fi utilizată pentru întreruperea execuției secvențelor de instrucțiuni corespunzătoare structurilor for, foreach, while, do - while și switch.

Instrucțiunea continue

Această instrucțiune este folosită pentru a întrerupe execuția secvenței de instrucțiuni din interiorul unui ciclu și trecerea la următoarea iterație. În cazul instrucțiunii for, înainte de următoarea iterație se evaluează (execută) expresia de incrementare (expresia #3 din sintaxa generală). La fel ca și în cazul instrucțiunii break, poate apărea un argument care indică numărul structurilor îmbricate asupra cărora are efect. Exemplul următor realizează afișarea elementelor unui șir de numere întregi care sunt mai mari decît 1000.

Cod

Următorul exemplu ilustrează efectul folosirii argumentelor pentru instrucțiunea continue.

Cod:

Rezultatul codului de mai sus este:

 Ciclul #1 
 Ciclul #2 
 Ciclul #3
 Ciclul #1 
 Ciclul #2
 Ciclul #3
 Ciclul #1 
 Ciclul #2 
 Ciclul #3
 Ciclul #1 
 Ciclul #2 
 Ciclul #3
 Ciclul #1 
 Ciclul #2 
 Ciclul #3

Exerciții:

1. Scrieți codul PHP care să sorteze crescător/decrescător un tablou de valori cu ajutorul algoritmului de sortare numit "metoda bulelor"(BubbleSort).

2. Este dat un tablou cu numere întregi. De calculat:

a) suma elementelor;

b) elementul maxim/minim și numărul lor;

c) numarul de elemente prime.

3. Este dat un tablou cu numere întregi. Scrieți codul PHP care verifica dacă cel puțin 3 numere dintr-un tablou sunt consecutive. Ex. (0,2,3,4,5) => 3,4,5 - sunt 3 numere consecutive

4. Se consideră un tablou bidimensional a[1..n, 1..n] format din numere întregi. Elaboraţi un script care determină o permutare a coloanelor tabloului astfel încît suma componentelor de pe diagonala principală să fi e minimă.

Tipul șir de caractere, în PHP

Șirurile de caractere sunt bucati de text, bine delimitate, folosite in codul-sursa pentru diferite scopuri. PHP prezinta particularitati in modul in care sunt folosite string-urile, dupa cum se poate vedea in exemplele de mai jos.

Important! Sirurile de caractere sunt expresii (entitati ce au si returneaza o valoare). Asadar, un string poate fi folosit, pe langa, afisare, in atribuiri, la verificari, etc. In exemplele ce urmeaza s-a optat pentru afisarea sirurilor.

Siruri de caractere delimitate de ghilimele duble

Sirurile delimitate prin ghilimele duble au particularitatea ca pot interpreta variabilele si caracterele speciale din interiorul lor. Astfel, la evaluarea textului, variabilele existente in interiorul lui sunt inlocuite cu valoarea lor iar rezultatul final este returnat.

Exemplu:

O alta particularitate a acestor siruri o reprezinta folosirea backslash-ului (caracterul \). Acesta are o functie speciala de marcare a anumitor caractere care nu pot fi incluse in mod normal intr-un text (din cauza ca sunt ele insele caractere speciale). Din acest motiv backslash-ul poarta numele de escape character.

Exemplu:

Siruri de caractere delimitate de ghilimele simple

Sirurile delimitate prin ghilimele simple nu permit interpretarea variabilelor continute si nici a caracterelor speciale cu exceptia \' si \\

Exemplu:

Siruri de caractere delimitate cu notatia speciala <<<

Aceste siruri de caractere au avantajul ca nu necesita marcarea (escaparea) delimitatorilor prin \' sau \". In rest, aceste stringuri sunt tratate in acelasi mod ca cele delimitate de ghilimele duble, in sensul ca permit interpretarea variabilelor si a altor caractere speciale.

Exemplu:

In versiunile mai noi de PHP (de la 5.3.0) a fost introdusa posibilitatea de a defini siruri prin notatia speciala <<< fara a interpreta variabilele continute. Exemplul de mai jos foloseste un sir astfel definit (vezi diferenta la delimitatorul de inceput).

Exemplu:

Operatii cu siruri de caractere

Mai jos sunt prezentate operatiile uzuale cu siruri de caractere si functiile oferite de limbajul PHP pentru realizarea lor.

Lungimea sirului

Exemplu:

Cautarea unei secvente

Exemplu:

Afisarea unui subsir

Exemplu:

Transformarea sirului

Exemplu:

Impartirea (spargerea) sirului

Exemplu:

Notă: implode si join sunt echivalente (nu exista nici o diferenta intre ele), pe cand explode si preg_split sunt diferite.

Concatenarea (legarea) sirurilor

Exemplu:

Nota: prin concatenarea sirurilor se obtine in final un singur sir, care este tratat ca atare, de sine statator. Altfel spus, prin legarea mai multor siruri se obtine o singura entitate (o singura expresie). Aceasta poate fi transmisa ca parametru unor functii sau instructiuni precum print care accepta un singur argument.

Interpretarea sirului

Exemplu:

Masuri de siguranta

In cazul in care textul provine din surse nesigure (cum ar fi un formular de comentarii), atunci este indicat sa fie "sterilizat" (sanitized), prin eliminarea elementelor ce pot fi daunatoare (tag-uri HTML, caractere speciale, etc).

Exemplu:

Exerciții:

  1. 1. Dintr-o listă ce conţine n candidaţi trebuie alese m persoane care vor fi incluse în echipa de fotbal a unui raion. Elaboraţi un script care afișează la ecran toate modalităţile de selecţie a celor m persoane.
  2. 2. Se dă șirul $sir = "Ion Vasile Petru Vitalie Dumitru";. De transformat șirul dat într-o matrice folosind funcția explode().

Numere în PHP

PHP convertește automat tipul de date. Adică, dacă atribuiți o valoare întreagă unei variabile, tipul acelei variabile va fi automat un integer. Apoi, dacă atribuiți un șir aceleiași variabile, tipul se va transforma într-un string.

Această conversie automată vă poate rupe uneori codul.

Numere întregi PHP

Un număr întreg este un număr fără partea zecimală. De ex: -62, 56, -256, 12345, -47956 sunt toate numere întregi.

Tipul de date integer este un număr nezecimal între -2147483648 și 2147483647 în sistemele pe 32 de biți și între -9223372036854775808 și 9223372036854775807 în sistemele pe 64 de biți. O valoare mai mare (sau mai mică) decât aceasta va fi stocată ca float, deoarece depășește limita unui număr întreg.


Notă: Chiar dacă valoarea expresiei 2 * 0.5 este 1, rezultatul este stocat ca float, deoarece unul dintre operanzi este float (0.5).

Output

float(1)

Reguli pentru numere întregi:

- Un număr întreg trebuie să aibă cel puțin o cifră
- Un număr întreg NU trebuie să aibă un punct zecimal
- Un număr întreg poate fi pozitiv sau negativ


Numerele întregi pot fi specificate în trei formate: zecimal (bazat pe 10), hexazecimal (bazat pe 16 - prefixat cu 0x) sau octal (bazat pe 8 - prefixat cu 0)

PHP are următoarele constante predefinite pentru numere întregi:

PHP_INT_MAX - Cel mai mare număr întreg acceptat
PHP_INT_MIN - Cel mai mic număr întreg acceptat
PHP_INT_SIZE - Dimensiunea unui număr întreg în octeți

Pentru a verifica dacă tipul unei variabile este întreg se folosește funcția: is_int ()

Exemplu:

Output

bool(true)
bool(true)
bool(false)

Numere float în PHP

Un float este un număr cu un punct zecimal sau un număr în formă exponențială. De exemplu, numerele 3.0, 56.1, 100.358, 1.23E+4, 5.67E-8 sunt toate numere float.

Tipul de date float poate stoca în mod obișnuit o valoare de până la 1,7976931348623E + 308 (depinde de platformă) și are o precizie maximă de 14 cifre.


PHP are următoarele constante predefinite pentru tipul float:

PHP_FLOAT_MAX - Cel mai mare număr reprezentabil în virgulă mobilă
PHP_FLOAT_MIN - Cel mai mic număr reprezentabil în virgulă mobilă pozitivă
- PHP_FLOAT_MAX - Cel mai mic număr negativ reprezentabil în virgulă mobilă
PHP_FLOAT_DIG - Numărul de cifre zecimale care pot fi rotunjite într-un float și înapoi fără pierderi de precizie
PHP_FLOAT_EPSILON - Cel mai mic număr pozitiv reprezentabil x, astfel încât x + 1.0 != 1.0


Pentru a verifica dacă tipul unei variabile este float se folosește funcția PHP is_float ()

PHP infinit

O valoare numerică mai mare decât PHP_FLOAT_MAX este considerată infinită.

PHP are următoarele funcții pentru a verifica dacă o valoare numerică este finită sau infinită:

is_finite ()
is_infinite ()

Exemplu:

Verifică dacă o valoare numerică este finită sau infinită

Output

1.7976931348623E+308
==================
float(INF)
bool(false)
bool(true)
bool(false)

PHP NaN

NaN înseamnă Not a Number.

NaN este utilizat pentru operații matematice imposibile.

Pentru a verifica dacă o valoare nu este un număr se folosește funcția is_nan ().

Exemplu:

Verifică dacă o valoare numerică este „nu un număr”

Output

bool(true)

Șiruri numerice în PHP

Funcția PHP is_numeric () poate fi utilizată pentru a afla dacă o variabilă este numerică. Funcția returnează adevărat dacă variabila este un număr sau un șir numeric, fals în caz contrar.

Exemplu:

Verifică dacă variabila este numerică

Output

bool(true)
bool(true)
bool(true)
bool(false)

Funcții în PHP

În limbajul PHP, funcțiile pot fi definite de către utilizator folosind următoarea sintaxă:

În PHP o funcție poate fi definită oriunde în cadrul script-ului și în interiorul unei funcții poate să apară orice secvență validă de cod care include definirea de alte funcții și definiții de clase. Argumentele unei funcții trebuie separate prin virgulă, și, implicit, acestea sunt transmise prin valoare. Pentru ca funcția să returneze un rezultat se folosește construcția return care primește ca parametru o expresie care reprezintă valoarea funcției. În momentul în care este întîlnită construcția return, execuția funcției se încheie. În exemplul următor se calculează cu ajutorul unei funcții PHP, pătratul unui număr.

Cod:

Rezultatul codului va fi:

4^2 = 16

Transmiterea parametrilor prin referință

Pentru a transmite parametri unei funcții prin referință, fapt care implică modificarea valorii parametrilor și păstrarea noii valori după ce execuția funcției s-a încheiat, se folosește operatorul '&' înaintea numelui parametrului formal, în momentul definirii funcției. Următorul exemplu indică modul în care se modifică valoarea unei variabile în interiorul unei funcții și modul în care această modificare este resimțită în exteriorul acesteia:

Cod:

Rezultat:

 In script: Iesire din 
 In modificInt: Iesire din prima functie.
 In script: Iesire din
 In modificExt: Iesire din a doua functie.
 In script: Iesire din a doua functie.

Nu există posibilitatea de supraîncărcare a unei funcții, de redefinire a ei după ce aceasta a fost definită în cadrul scriptului respectiv și nu există nici posibilitatea de anulare a unei funcții.

Parametri cu valori implicite

În PHP parametrii formali pot avea valori implicite, și, în cazul în care parametrul actual lipsește, atunci se va considera că are valoarea implicită. Următorul exemplu ilustrează modul de folosire al funcțiilor când acestea au parametri formali cu valori implicite:

Cod:

Rezultat:

Ati comandat cafea.
Ati comandat suc.

În cazul în care se folosesc parametri cu valori implicite este necesar ca orice parametru care are o valoare implicită să se afle în partea dreaptă a tuturor parametrilor pentru care nu se folosesc valori implicite, în caz contrar interpretorul PHP nu poate să decidă cărui parametru să-i atribuie valoarea de pe o anumită poziție din lista de parametri. De exemplu, dacă avem o funcție a cărei declarație este

și care returnează rezultatul transformării lui $nr din baza 16 în baza $baza, a cărei valoare implicită este 10, dacă se apeleaza transform (50), interpretatorul nu atribuie valoarea 50 parametrului $nr, ci parametrului $baza și generează o eroare deoarece lipseste valoarea parametrului $nr.

Funcții cu număr variabil de parametri

O altă facilitate a limbajului PHP este aceea că oferă programatorului posibilitatea de a utiliza funcții care au un număr nedeterminat de parametri. Funcțiile care folosesc un număr variabil de parametri nu au nici o particularitate în ceea ce privește definirea lor. Aceste funcții se definesc la fel ca cele prezentate anterior, dar pentru a putea accesa parametri se vor folosi următoarele funcții predefinite:

- func_num_args() - această funcție returnează numărul parametrilor funcției care a apelat-o; dacă această funcție este apelată din exteriorul unei funcții definite de utilizator se va genera un mesaj de avertizare;
- func_get_arg(arg_num) - returnează valoarea parametrului care se află pe pozitia arg_num în lista de parametri; primul parametru are numărul de ordine 0; dacă este apelată din exteriorul unei funcții definite de utilizator se va genera un mesaj de avertizare;
- func_get_args() - returnează un tablou unidimensional care conține valorile parametrilor pe care funcția apelantă i-a primit; dacă această funcție este apelată din exteriorul unei funcții definite de utilizator se va genera un mesaj de avertizare.

În continuare aveți 2 exemple de utilizare a acestor funcții. Primul exemplu afișează lista parametrilor funcției folosind funcția func_num_args și func_get_arg, iar al doilea exemplu afișează aceeași listă folosind numai funcția func_get_args.

Cod:

Cod:

Rezultat:

Comanda:
1
calculator
2
procesoare
configuratie
Array ([0] => local [1] => 2 [2] => 3 )

Domeniul variabilelor interne a funcțiilor

În PHP există patru domenii ale variabilelor:

  1. 1. domeniul local
  2. 2. domeniul global
  3. 3. domeniul static
  4. 4. domeniul argumentelor funcțiilor

1. Domeniul local a variabilelor interne a funcțiilor

Variabilele setate în funcții, sunt predefinit cu domeniul local, adică nu pot fi văzute și accesate decât în funcția unde sunt setate.

Să vedem un exemplu.

Observați că variabilele $suma, $prod și $rez au fost setate cu alte valori în funcție, și că această modificare nu s-a transmis și în exteriorul funcției. De asemenea trebuie remarcat, că ele nu au preluat valoarea din exteriorul funcției.

2. Domeniul global a variabilelor interne a funcțiilor

Prin declararea unei variabile ca global într-o funcție, ea preia valorile variabilei cu același nume, din programul principal (se pot seta, însă, și mai multe variabile ca global, într-o funcție). În același timp valoarea din funcție se transmite și în programul principal.

Exemplu.

Prin declararea variabilei interne a funcției $suma ca global, aceasta își ia valoarea din programul principal (5). Noua valoare a lui $suma în funcție va fi 21, cea ce se poate vedea și în valoarea variabilei $s[0], cât și prin valoarea din programul principal a variabilei după apelarea funcției.

Prin declararea variabilei interne a funcției $rez ca global, aceasta transmite în exteriorul funcției, valoarea obținută în funcție, și în mod normal nu ar fi nevoie de instrucțiunea return.

3. Domeniul static a variabilelor interne a funcțiilor

Variabilele declarate static, nu se pot accesa decât din interiorul funcției, dar au o proprietate suplimentara și anume la apelarea succesivă a funcției, mențin (preiau) valoarea variabilei din apelarea precedentă.

Exemplu:

4. Domeniul argumentelor funcțiilor

Argumentele funcțiilor au în mod predefinit domeniul local. Bineînțeles că și ele pot fi declarate în funcție ca global sau static, lucru care însă ar încurca lucrurile în mod inutil (programul nemaiștiind care valoare este bună), fapt pentru care va sfătuiesc sa nu o faceți.

Valorile returnate de funcții

Rezultatul obținut după apelarea unei funcții poate avea orice tip. O funcție poate să returneze chiar și liste sau obiecte. În PHP există un caz special de rezultat numit referință. Pentru ca o funcție să poată returna o referință, aceasta trebuie declarată folosindu-se operatorul '&' înaintea numelui funcției. Acest operator trebuie să apară înaintea numelui funcției și în momentul cînd o variabilă primește ca valoare referința rezultată din apelul funcției. În exemplul următor se definește o funcție al cărui rezultat îl constituie o referință:

Cod:

Rezultat:

Acesta este continutul variabilei referite cu ajutorul functiei.

Spre deosebire de majoritatea limbajelor de programare moderne, o funcție PHP poate să returneze o referință la o variabilă care a fost declarată în interiorul funcției, însă acest lucru nu este indicat deoarece, în anumite cazuri, poate duce la efecte neașteptate ale executării unui script PHP. În alte limbaje de programare efectele devin uneori fatale.

Variabilele de tip funcție

O altă facilitate a limbajului PHP în ceea ce privește funcțiile este aceea că suportă variabile de tip funcție. Acest lucru este util atunci cînd se folosesc liste de funcții pentru prelucrarea anumitor tipuri de date. Pentru a atribui un nume de funcție unei variabile în PHP se folosește aceeași construcție ca în cazul atribuirii unui șir de caractere, și anume, o variabilă va primi ca valoare numele funcției scris între ghilimele simple sau duble. În cazul în care interpretorul PHP găsește un nume de variabilă urmată de o listă de parametri, acesta caută funcția pe care variabila o referă și în cazul în care există, o execută. Variabilele de tip funcție nu funcționeaza cu construcții ale limbajului ca echo, unset, isset, empty, include etc. Mai jos aveți un exemplu care ilustrează modul de lucru cu variabilele de tip funcție.

Cod:

Rezultat:

4 * 5 = 20
4 + 5 = 9

Exerciții:

  1. 1. De elaborat 3 funcții care va calcula numărul permutărilor Pn, numărul aranjamentelor Amn și numărul combinărilor Cmn.
  2. 2. De elaborat funcția care calculează n!. Scriptul PHP va apela funcția dată pentru a calcula suma S=1!+3!+...+(2*n-1)! .
  3. 3. Se dă vectorul a[1..n] de numere întregi. De elaborat o funcție care calculează media componentelor unui vector.
  4. 4. De elaborat o funcție care calculează maximul dintre două numere x și y. De elaborat un program care afișează maximul dintre numerele a, b, c, d, e.
  5. 5. De elaborat o funcție care convertește literele minuscule în majuscule și viceversa.

Funcțiile predefinite în PHP

Funcțiile predefinite sunt funcțiile care aparțin limbajului PHP.
Aici sunt prezentate, cîteva din cele mai utilizate funcții PHP ce trebuie cunoscute de către cei care sunt pasionați de acest limbaj al programarii web sau lucrează în acest domeniu.

Funcții pentru Array

Aici gasiti cateva din cele mai utile functii PHP pentru Array (matrice).

1.array_change_key_case(array, case) - Transforma cheile din primul parametru (array) in majuscule sau litere mici, dupa cum e specificat la "case" (CASE_UPPER sau CASE_LOWER). Default e CASE_LOWER. Daca "array" nu e o matrice, returneaza FALSE. 2.array_chunk(array, nr)
- Imparte "array" intr-un numar de sub-matrici, precizat la "nr", indexate de la 0. Daca "array" nu are elemente, returneaza NULL.
3.array_combine(array_k, array_v)
- Creaza un array folosind valorile din "array_k" pentru chei, iar elementele din "array_v" pentru valorile lor. Numarul de elementele din cele 2 matrici trebuie sa fie egal, in caz contrar returneaza FALSE.
4.array_count_values(array)
- Returneaza o matrice cu numarul de repetari a fiecarui element din "array".
5.array_diff(array1, array2)
- Returneaza o matrice cu elementele din "array1" care nu se gasesc in "array2".
6.array_flip(array)
- Schimba valorile si cheile între ele. Din valorile care se repeta o pastreaza pe ultima.
7.array_intersect(array1, array2, ...)
- Returneaza o matrice cu toate valorile din "array1" care se gasesc in toati ceilalti "array" dati ca parametri.
8.array_key_exists(cheie, array)
- Returneaza TRUE daca "cheie" este o cheie (index) in matricea "array", in caz contrar returneaza FALSE.
9.array_keys(array, val)
- Returneaza o matrice cu toate cheile din "array". Parametrul "val" e optional, daca e specificat, va returna doar cheile cu valoarea "val".
10.array_map("functie", array)
- Aplica functia pentru fiecare element din "array"
11.array_merge($array1, $array2, ...)
- Uneste mai multe array in unul singur. Daca au cheie de tip sir identice, va fi pastrata valoarea ultimei chei.
12.array_pop(array)
- Elimina ultimul element din "array", care va fi transferat ca valoarea returnata de "array_pop()". Daca parametru nu e matrice sau e gol, returneaza NULL.
13.array_product(array)
- Returneaza produsul elementelor din "array"
14array_rand(aray, nr)
- Preia aleator un "nr" de chei din "array", respectand ordinea lor. Daca "nr" e 1, va returna o cheie aleasa aleator. Altfel, returneaza o matrice cu acele chei preluate aleator.
15.array_reverse(array)
- Returneaza "array" cu ordinea elementelor inversata.
16.array_search("val", array)
- Returneaza cheia din "array" care are valoarea "val", sau FALSE daca nu exista. Cautarea e "case-sensitive"
17.array_shift(array)
- Elimina primul element din "array", care va fi transferat ca valoarea returnata de "array_shift()". Cheile vor fi renumerotate de la 0. Daca parametru nu e matrice sau e gol, returneaza NULL.
18.array_slice(array, start, nr)
- Returneaza un "nr" din elementele lui "array', incepand de la elementul numarul "start" (primul e 0), cate elemente arata "nr". Daca "nr" nu e specificat, va fi considerat pana la ultimul.
19.array_sum(array)
- Returneaza suma elementelor din "array"
20.array_unique(array)
- Returneaza matricea "array" fara valorile duplicate, acestea fiind luate o singura data.
21.array_values(array)
- Returneaza o matrice cu toate valorile din "array", ordonate numeric de la 0.
22.arsort(array)
- Sorteaza un "array" cu valorile ordonate in ordine inversa alfabetic, pastrand corelatia dintre chei si valori. In caz de succes returneaza TRUE, altfel, FALSE.
23.asort(array)
- Sorteaza un "array" cu valorile ordonate in ordine alfabetica, pastrand corelatia dintre chei si valori. In caz de succes returneaza TRUE, altfel, FALSE.
24.count(array)
- Returneaza numarul de elemente din "array"
25.current(array);
- Returneaza valoarea elementului curent din "array", daca nu are elemente returneaza FALSE. Fiecare matrice are un pointer intern, care prima data e setat la primul element.
26.end(array);
- Muta pointerul din "array" la ultimul element si returneaza valoarea lui, daca nu are elemente returneaza FALSE.
27.implode("separator", array);
- Transforma "array" in sir (string), adaugand valorile intr-un sir, separate de ceea ce e specificat la "separator".
28.in_array("val", array)
- Verifica daca o matrice contine o anumita valoare. Returneaza TRUE daca vreunul din elementele din "array" are valoarea "val", in caz contrar FALSE.
29.key(array)
- Returneaza cheia elementului curent la care se afla pointerul
30.krsort(array)
- Sorteaza un "array" dupa chei ordonate in ordine inversa alfabetic, pastrand corelatia dintre chei si valori. In caz de succes returneaza TRUE, altfel, FALSE.
31.ksort(array)
- Sorteaza un "array" dupa chei ordonate in ordine alfabetica, pastrand corelatia dintre chei si valori. In caz de succes returneaza TRUE, altfel, FALSE.
32.natcasesort(array)
- Sorteaza un "array" in ordine alfabetica a valorilor, case-insensitive, folosind ordinea naturala a numerelor. In caz de succes returneaza TRUE, altfel, FALSE.
33.next(array);
- Avanseaza pointerul din "array" inainte cu un element si returneaza valoarea, daca nu are elemente returneaza FALSE.
34.prev(array);
- Muta pointerul din "array" inapoi cu un element si returneaza valoarea, daca nu are elemente returneaza FALSE.
35.reset(array);
- Readuce pointerul din "array" la primul element si returneaza valoarea lui, daca nu are elemente returneaza FALSE.
36.rsort(array)
- Sorteaza un "array" in ordine inversa alfabetic a valorilor (literele mici inaintea celor mari), stergand cheile initiale, devenind un Array asociativ cu chei de la 0. In caz de succes returneaza TRUE, altfel, FALSE.
37.sort(array)
- Sorteaza un "array" in ordine alfabetica a valorilor (literele mari inaintea celor mici), stergand cheile initiale, devenind un Array asociativ cu chei de la 0. In caz de succes returneaza TRUE, altfel, FALSE.
38.shuffle(array)
- Amesteca aleator elementele din "array". Sterge cheile initiale, devenind un Array asociativ cu chei de la 0. In caz de succes returneaza TRUE, altfel, FALSE.

Functii matematice

Aici gasiti functii PHP matematice, in special pentru lucrul cu numere.
1.abs(nr)
- Returneaza valoarea absoluta (cu +) a lui "nr".
2.base_convert(nr, baza1, baza2)
- Converteste un numar, "nr", din baza1 in baza2. Rezultatul returnat este un sir cu "nr" convertit in baza2.
3.bindec('sir_binar')
- Returneaza echivalentul numeric (decimal) al sirului binar din parametrul "sir_binar".
4.ceil(nr)
- Returneaza valoarea rotunjita a lui "nr" la urmatorul (mai mare) intreg.
5.cos(radian)
- Returneaza valoarea cosinus a gradelor de cerc specificate la "radian".
6.decbin(nr)
- Returneaza un sir cu valoarea binara a numarului "nr".
7.dechex(nr)
- Returneaza un sir cu valoarea hexazecimala a numarului "nr".
8.decoct(nr)
- Returneaza un sir cu valoarea octala a numarului "nr".
9.floor(nr)
- Returneaza valoarea rotunjita a lui "nr" la anteriorul (mai mic) intreg.
10.fmod(x, y)
- Returneaza valoarea ramasa a lui "x" impartit la "y", care nu mai e multiplu de "y".
11.hexdec('hex')
- Returneaza valoarea zecimala a sirului hexazecimal "hex".
12.hypot(c1, c2)
- Returneaza lungimea ipotenozei unui triunghi dreptunghic care are lungimea catetelor "c1" si "c2".
13.is_infinite(val)
- Returneaza TRUE daca valoarea lui "val" este un numar infinit (precum log(0)), altfel, returneaza FALSE.
14.lcg_value()
- Returneaza un numar aleator intre 0 si 1.
15.log10(nr)
- Returneaza logaritmul in baza 10 a lui "nr"..
16.log(nr, baza)
- Returneaza logaritm de "nr" in baza "baza". Daca al doilea parametru nu e specificat, va returna logaritmul natural (in baza e).
17.max(nr1, nr2, ...)
- Returneaza cel mai mare numar dintre cele date la parametri.
18.min(nr1, nr2, ...)
- Returneaza cel mai mic numar dintre cele date la parametri.
19.mt_rand(min, max)
- Returneaza un numar aleator cuprins intre numerele "min" si "max". Similara este si functia rand(), dar "mt_rand()" este de 4 ori mai rapida.
20.octdec('oct')
- Returneaza valoarea zecimala a sirului octal "oct".
21.pi()
- Returneaza valoarea aproximativa a lui PI. La fel ca si constanta M_PI.
22.pow(nr, putere)
- Returneaza valoarea obtinuta din "nr" la puterea "putere".
23.round(nr)
- Returneaza valoarea rotunjita a lui numar la intregul ce mai apropiat.
24.sin(radian)
- Returneaza valoarea sinus a gradelor de cerc specificate la "radian".
25.sqrt(nr)
- Returneaza radical din "nr".
26.tan(radian)
- Returneaza valoarea tangenta a gradelor de cerc specificate la "radian".
27.is_numeric(val)
- Returneaza TRUE daca "val" e o valoare numerica, altfel, FALSE.

Funcții pentru lucru cu functii

Aici gasiti functii PHP ce pot fi folosite in lucrul cu functii create /definite in script.
1.call_user_func("func", arg)
- Apeleaza functia "func" dandu-i valoarea argumentului "arg". Returneaza rezultatul functiei apelate, sau FALSE.
2.call_user_func_array("func", array_arg)
- Apeleaza o functie ("func") dandu-i valoarea argumentelor dintr-un Array (array_arg). Returneaza rezultatul functiei apelate, sau FALSE.
3.create_function("argumente", "cod_functie")
- Creaza dinamic o functie ce va avea argumentele "argumente" si codul ce-l executa "cod_functie". Returneaza functia creata (poate fi asociata cu un nume de variabila), sau FALSE. ("argumente" si "cod_functie" trebuie sa fie siruri)
4.func_num_args()
- Returneaza numarul de argumente primite de o functie. Se foloseste in interiorul acelei functii.
5.func_get_arg(nr)
- Returneaza argumentul cu index-ul "nr" din cele primite de o functie (primul argument are index 0). Se foloseste in interiorul acelei functii. Daca numarul de argumente e mai mic decat "nr", returneaza FALSE.
6.func_get_args()
- Returneaza o matrice cu argumentele primite de o functie. Se foloseste in interiorul acelei functii..
7.function_exists("function")
- Returneaza TRUE daca functia "function" (numele ei intre ghilimele) exista, altfel, returneaza FALSE.
8.register_shutdown_function("func", param1, param2, ...)
- Inregisteaza functia "func" sa fie executata la terminarea scriptului (dupa executarea comenzilor din el), sau dupa apelarea lui "exit()". "param1", "param2" sunt optionali si reprezinta parametri ce vor fi transferati la "func".

Funcții pentru șiruri (strings)

Aici gasiti cateva din cele mai utile functii PHP pentru siruri (strings).
1.addslashes("sir")
- Adaugă caracterul \ (backslash) înaintea ghilimelelor simple și duble, a lui backslash și NULL (NULL byte). Ca protecție, de exemplu când șirul e adăugat într-o bază de date.
2.bin2hex('sir')
- Returneaza forma hexadecimala a lui 'sir'
3.chr(ascii)
- Returneaza caracterul reprezentat de codul ASCII din parametru.
4.chunk_split("sir", nr, 'sep')
- Imparte "sir" in mai multe sub-siruri, avand lungimea de caractere "nr" si separate prin "sep".
5.echo 'sir'
- Afiseaza in browser continutul 'sir'.
6.explode('sep', "sir")
- Creaza un Array (matrice) cu partile din "sir" separate prin "sep". Fiecare sub-sir delimitat de "sep" devine un element in matrice. Este inversul lui "implode()".
7.html_entity_decode("sir")
- Decodeaza entitatile html din "sir". E opusul lui "htmlentities()"
8.htmlentities("sir")
- Converteste toate caracterele specifice din sir in entitati HTML.
9.htmlspecialchars_decode("sir")
- Converteste entitatile HTML, ce pot fi codificate cu "htmlspecialchars()", inapoi la forma de caracter.
10.htmlspecialchars("sir")
- Converteste doar caracterele ghilimele, & < si > din "sir" in entitati HTML.
11.md5("sir")
- Codifica sirul cu algoritmul MD5, returnand un sir codat cu 32 de caractere.
12.rtrim("sir", 'caracters')
- Sterge din partea dreapta a sirului caracterele specificate la "caracters", care poate fi un singur caracter sau un sir. Daca al doilea parametru nu e specificat, va sterge spatiile libere din dreappta.
13.sha1("sir")
- Similar cu "md5()", aceasta functie codifica sirul cu algoritmul SHA1 (US Secure Hash Algorithm 1), returnand un sir codat cu 40 de caractere.
14.str_ireplace("old", "new", "sir")
- Inlocuieste in "sir" caracterele specificate la "old" cu cele de la "new", fara a tine cont de majuscule sau litere mici. "old" si "new" pot fi si de tip Array.
14.str_replace("old", "new", "sir")
- Similar cu "str_ireplace()", inlocuieste in "sir" caracterele specificate la "old" cu cele de la "new", dar este case-sensitive (tine cont de majuscule si litere mici). "old" si "new" pot fi si de tip Array.
15.str_repeat("sir", nr)
- Returneaza un sir in cara parametrul "sir" e repetat de "nr" ori.
16.str_shuffle("sir")
- Amesteca aleator caracterele din "sir".
17.str_split("sir", nr)
- Transforma "sir" in Array, impartind pentru fiecare element sub-siruri cu lungimea de "nr" caractere. Daca "nr" nu e specifcat, fiecare caracter din sir va deveni un element in matrice.
18.str_word_count("sir")
- Returneaza numarul de cuvinte din sir.
19.strcasecmp("sir1", "sir2")
- Compara cele doua siruri date ca parametri, fara diferenta intre majuscule si litere mici. Returneaza 0 daca sirurile sunt egale, < 0 daca "sir1" e mai mic decat "sir2" sau > 0 daca "sir1" e mai mare decat "sir2"
20.strcmp("sir1", "sir2")
- Similar cu "strcasecmp()", diferenta fiind ca face o comparatie ce tine cont de majuscule si litere mici.
21.strcspn("sir", 'car')
- Returneaza lungimea primului segment din "sir" ce nu contine nici un caracter specificat la 'car'
22.strip_tags("sir")
- Sterge tag-urile HTML si PHP din "sir".
23.stripslashes("sir")
- Returneaza "sir" fara caracterele backslashes adaugate. Inversul lui "addslashes()"
24.stripos("sir", "sub-sir")
- Returneaza pozitia de unde incepe "sub-sir" in "sir" (incepand de la 0), fara diferenta intre litere mici si majuscule. Daca "sub-sir" nu e gasit, returneaza FALSE.
25.strpos("sir", "sub-sir")
- Returneaza pozitia de unde incepe "sub-sir" in "sir" (incepand de la 0), case-sensitive, tinand cont de litere mici si majuscule. Daca "sub-sir" nu e gasit, returneaza FALSE.
26.stristr("sir", 'car')
- Returneaza tot sub-sirul din "sir", care incepe de la prima aparitie a lui 'car', fara diferenta intre majuscule si litere mici. Daca nu e gasit 'car', returneaza FALSE.
27.strstr("sir", 'car')
- Returneaza tot sub-sirul din "sir", care incepe de la prima aparitie a lui 'car', case-sensitive (cu deosebire intre majuscule si litere mici). Daca nu e gasit 'car', returneaza FALSE.
28.strlen("sir")
- Returneaza lungimea lui "sir" (numarul de caractere).
29.strrchr("sir", "sub-sir")
- Returneaza bucata ramasa din "sir" incepand de la ultimul caracter din "sub-sir" gasit in "sir". Functia e case-sensitive. Daca "sub-sir" nu se gaseste in "sir", returneaza FALSE.
30.strrev("sir")
- Inverseaza sir-ul.
31.strtolower("sir")
- Transforma toate literele din sir in litere mici.
32.strtoupper("sir")
- Transforma toate literele din sir in majuscule (litere mici).
33.substr_count("sir", "sub_sir")
- Returneaza numarul de cate ori "sub_sir" se gaseste in "sir". Functia este case-sensitive.
34.substr("sir", start, lungime)
- Returneaza portiunea din "sir" care incepe de la "start", cu lungimea de caractere "lungime". Daca parametrul "lungime" nu e specificat, se considera pana la sfarsitul sirului.
35.trim("sir", 'del')
- Sterge din marginile sirului caracter-ul (caracterele) specificate la "del". Daca al doilea parametru, "del", nu e adaugat, sterge spatiile libere din marginile sirului.
36.ucfirst("sir")
- Transforma primul caracter din "sir" in litera mare.
37.ucwords("sir")
- Transforma primul caracter al fiecarui cuvant din "sir" in litera mare.
38.nl2br("sir")
- Inlocuieste caracterele de rand nou (\r\n si \n) cu tagul HTML BR. Functie utila cand sirul e preluat dintr-un textarea.
39.wordwrap("sir", lungime, "sep", true)
- Imparte "sir" la numarul de caractere specificat de "lungime", separand prin "sep" partile astfel obtinute. Functie utila cand se doreste scurtarea liniilor sau cuvintelor prea lungi. Daca "true" nu e specificat, va imparti doar randurile, lasand cuvintele neafectate.

Funcții pentru Data si Timp

Aici sunt cateva din cele mai utile functii PHP pentru lucrul cu Data si formate de Timp.
1.checkdate(nr_luna, nr_zi, nr_an)
- Verifică validitatea datei formate din argumenții din paranteza. O dată este considerată validă dacă fiecare parametru este definit corespunzător. "nr_luna" este numarul lunii, intre 1 și 12 inclusiv, "nr_zi" este numarul zilei cuprinse în domeniul zilelor permise pentru luna respectivă. Anii bisecți sunt luați în considerare, "nr_an" este anul intre 1 și 32767 inclusiv. Returneaza TRUE sau FALSE.
2.date_create('sir_data')
- Stil obiect-orientat: DateTime::__construct('sir_data')
Creaza o instanta de timp dupa data din "sir_data", ce poate fi folosit in alte functii pt. data si timp care necesita ca parametru o instanta de timp. In caz de esec returneaza FALSE.
3.date_format(obj_date, 'data_form')
- Stil obiect-orientat: DateTime::format('data_form')
Returneaza data comform formatului din "data_form". "obj_date" e o instanta de timp returnata de functia "date_create()". In caz de esec returneaza FALSE.
4.date_create_from_format('data_form', 'sir_data')
- Stil obiect-orientat: DateTime::createFromFormat(data_form, sir_data)
Creaza o instanta de timp a datei din "sir_data" care e recunoscuta si trebuie sa corespunda cu formatul de data din "data_form". Instanta obtinuta poate fi folosita pentru a afisa data din "sir_data" cu un alt format, cu functia "date_format()". In caz de esec returneaza FALSE.
5.date_date_set(obj_date_create, nr_an, nr_luna, nr_zi)
- Stil obiect-orientat: DateTime::setDate(nr_an, nr_luna, nr_zi)
Seteaza o instanta de timp, dupa parametri primiti, care apoi poate fi afisata intr-un format de data, cu functia "date_format()". In caz de esec returneaza FALSE.
6.date_default_timezone_set('zona_timp')
- Seteaza timpul folosit in script dupa zona specificata in "zona_timp", identificator din Lista zonelor orare susținute. Returneaza TRUE sau FALSE.
7. date_diff(obj_date1, obj_date2)
- Stil obiect-orientat: DateTime::diff(obj_date2)
Returneaza un obiect cu diferenta dintre doua instante de timp sau FALSE.
8.strong>date_modify(obj_date, 'sir_modificare'
- Stil obiect-orientat: DateTime::modify(sir_modificare)
Modifica instanta de timp din "obj_date" cu valoarea specificata in "sir_modificare", sau FALSE in caz de esec.
9.date_parse_from_format('data_form', 'sir_data')
- Returneaza un Array asociativ cu informatii detaliate despre data din "sir_data", aceasta trebuind sa aibe formatul din "data_form".
10.date_parse('sir_data')
- Returneaza un Array asociativ cu informatii detaliate despre data din "sir_data" (care sa fie intr-un format acceptat de "strtotime()").
11.date_sun_info(timp_UNIX, Latitudine, Longitudine)
- Returneaza un Array asociativ cu informatii despre rasaritul si apusul soarelui, sfarsitul si inceputul crepusculului din ziua ce se gaseste in timpul UNIX din parametrul "timp_UNIX", din zona data de parametri "Latitudine" si "Longitudine", in grade.
12.date_time_set(obj_date, nr_ora, nr_minut, nr_secunde)
- Stil obiect-orientat: DateTime::setTime(nr_ora, nr_minut, nr_secunde)
Reseteaza instanta de timp (din "obj_date"), definindu-i si ora, minutul, si optional secndele, specificate in ceilalti parametri. In caz de esec, FALSE..
13.date_timestamp_get(obj_date)
- Stil obiect-orientat: DateTime::getTimestamp()
Obtine timpul UNIX din instanta de timp "obj_date".
14.date_timestamp_set(obj_date, timp_UNIX)
- Stil obiect-orientat: DateTime::setTimestamp(timp_UNIX)
Modifica instanta de timp "obj_date" cu timpul UNIX din "timp_UNIX".
15.date('data_form', timp_UNIX)
- Returneaza un sir cu data, avand formatul din "data_form", al timpului UNIX din parametru "timp_UNIX". Daca "timp_UNIX" nu e mentionat, va returna data curenta.
16.getdate(timp_UNIX)
- Returneaza un Array asociativ conținînd informația despre dată și oră a parametrului "timp_UNIX", sau a datei/orei curente dacă parametrul "timp_UNIX" nu este furnizat.
17.localtime(timp_UNIX, bool)
- Returneaza un Array cu informatii despre ora locala (a serverului) la timpul specificat in parametrul "timp_UNIX" (sau timpul curent, daca acesta nu e adaugat).
"bool" poate fi true sau false, si e optional. Daca e specificat true, va returna un Array asociativ, in rest, un Array secvential.
18.strong>microtime(bool)
- Returneaza timpul curent Unix cu microsecunde. Dacă parametrul opțional "bool" este stabilit în TRUE, atunci este returnata o valoare Float (cu virgula, în secunde), altfel, returneaza sirul "msec. sec.", unde 'sec.' este timpul curent măsurat în numărul de secunde de la Epoca Unix (0:00:00 January 1, 1970 GMT) și 'msec.' este partea cu microsecunde.
19.mktime(ora, minut, secunde, luna, zi, an)
- Obtine timpul Unix al argumentelor furnizate, care sunt numere intregi ce reprezinta: "ora", "minutul", "secundele", "luna", "ziua" si "anul" din data ce o formeaza. Dacă argumentele nu sunt valide, funcția întoarce FALSE.
20.strtotime('data_form')
- Returneaza timpul UNIX a aproape oricarei descrieri textuale în limba engleză a datei și orei specificate in sirul "data_form".
Dacă anul este specificat cu două cifre, valorile între 00-69 sunt interpretate ca 2000-2069, iar valorile între 70-99 ca 1970-1999.
21.time()
- Returneaza timpul curent, in format UNIX, si anume numarul de secunde de la 1 Ianuarie 1970 ora 0 (1 Ianuarie 1970 00:00:00 GMT). Numarul returnat poate fi folosit cu functia "date()" pentru a obtine data intr-un format cunoscut sau parti din data (ziua, ora, luna, etc.).

Functii pentru fișiere și directoare

Aici gasiti cateva din cele mai utile functii PHP pentru lucru cu sistemul de fisiere si directoare.
1.basename(adresa, "sufix")
- Returneaza partea cu numele fisierului dintr-o adresa URL. "sufix" e optional, daca e specificat, functia elimina si pe acesta de la sfarsitul numelui.
2.chmod(file, mod)
- Modifica prmisunile CHMOD a lui "file" (cale si nume fiser) cu cele specificate la "mod" (0777, 0644, ...). Daca modificarea reuseste returneaza TRUE, in caz contrar, FALSE.
3.copy(sursa, destinatie)
- Copie fisierul specifical la "sursa", in locatia "destinatie" (aici poate fi specificata si denumirea fisierului la dstinatie). Aca fisierul deja exista, va fi inlocuit de cel copiat. Funtctia returneaza TRUE in caz de reusita sau FALSE.
4.dirname(adresa)
- Returneaza numele directorului din "adresa", fara numele fisierului sau alte extensii.
5.disk_free_space(cale_dir)
- Returneaza spatiul liber al sistemului in directorul specificat la "cale_dir".
6.disk_total_space(cale_dir)
- Returneaza spatiul total al sistemului in directorul specificat la "cale_dir". Returneaza numarul total de bytes sau FALSE daca functia esueaza.
7.fopen("fisier", "mod")
- Deschide un pointer la "fisier", in modul de lucru "mod". "mod" poate fi ("b" e indicat sa fie adaugat pentru sistemele windows):

  • r sau rb - pentru citire.
  • r+ sau r+b - citire si scriere.
  • w sau wb - creare si scriere fisier de la 0.
  • w+ sau w+b - citire si scriere fisier de la 0, il creaza daca nu exista.
  • a sau ab - scriere, adauga datele dupa cele deja existente. Creaza fisierul daca nu exista.
  • a+ sau a+b - citire si scriere, adauga datele dupa cele deja existente. Creaza fisierul daca nu exista
  • x sau xb - creare si scriere, daca fisierul exista deja, returneaza eroare.
  • x sau x+b - creare pentru citire si scriere, daca fisierul exista deja, returneaza eroare.

8.fclose(file_pointer)
- Inchide deschiderea unui fisier cu "fopen()" (transmisa la "file_pointer"), eliberand memoria folosita de acea deschidere. Returneaza TRUE daca functia reuseste, in caz contrar, FALSE.
9.feof(file_pointer)
- Testeaza sfarsitul unnui fisier cu deschiderea specificata la "file_pointer". Functie utila cand fisierul e citit linie cu linie. Returneaza TRUE daca pointer-ul e la sfarsitul fisierului, altfel, returneaza FALSE.
10.fgets("pointer", lungime")
- Citeste numarul de caractere specificat la "lungime" dintr-un fisier deschis si specificat la "pointer". Citirea se face din locul unde a ajuns pointer-ul in fisier, daca "lungime" nu e specificat citirea se va face pana la sfarsitul randului curent (daca lungimea liniei e mai mare de 8 KB, e indicata specificarea ei).
11.file_exists("fisier")
- Returneaza TRUE daca "fisier" exista, altfel, returneaza FALSE.
12.file_get_contents("fisier")
- Returneaza tot continutul din "fisier" intr-un sir. Daca "fisier" nu poate fi citit, returneaza FALSE.
13.file_put_contents("fisier", "continut")
- Scrie in "fisier" sirul specificat la "continut". Daca fisierul exista, suprascrie datele existente, daca nu exista, il creaza. Daca nu poate scrie in "fisier", returneaza FALSE.
14.file("fisier", flag)
- Preia continutul fisierului intr-un array, fiecare linie din "fisier" va fi un element din matrice. "flag" e optional, in locul lui se poate adauga: FILE_IGNORE_NEW_LINES (nu va prelua si caracterele de linie noua),FILE_SKIP_EMPTY_LINES (va sari peste randurile goale).
15.fileatime("file")
- Returneaza timestamp-ul (timpul UNIX) cand a fost accesat ultima data "file", sau in caz de nereusita, FALSE.
16.filectime("file")
- Returneaza timestamp-ul (timpul UNIX) cand a fost modificat ultima data "file", sau in caz de nereusita, FALSE. Similara cu aceasta e functia filemtime()
17.fileperms("file")
- Returneaza permisiunile CHMOD ale "file", sau FALSE.
18.filesize("file")
- Returneaza marimea lui "file", in bytes, sau FALSE.
19.flock(file_pointer, flag)
- Blocheaza / deblocheaza accesul de citire sau scriere la un fisier deschis cu "fopen()", specificat la "file_pointer". Returneaza TRUE, sau daca functia esueaza, FALSE. Modul de blocare, sau deblocarea, se specifica la "flag", acesta putand fi:

  • LOCK_SH- blocare acces citire.
  • LOCK_EX- blocare acces scriere.
  • LOCK_UN- deblocare

20.fseek(file_pointer, pozitie)
- Muta pozitia pointer-ului dintr-un fisier deschis cu "fopen()" la numarul de caractere specificat de "pozitie" (0 e primul caracter). In caz de succes returneaza 0, altfel, -1.
21.ftell(file_pointer)
- Returneaza pozitia curenta a indicatorului (pointer) dintr-un fisier deschis cu "fopen()" (specificat la "file_pointer"). In caz de esec returneaza FALSE.
22.fwrite(file_pointer, 'sir')
- Scrie intr-un fisier deschis cu "fopen()" (specificat la "file_pointer") continutul din "sir".
23.is_dir("nume")
- Returneaza TRUE daca "nume" exista si este un director, altfel returneaza FALSE.
24.is_file("nume")
- Returneaza TRUE daca "nume" exista si este un fisier, altfel returneaza FALSE.
25.is_readable("nume")
- Returneaza TRUE daca "nume" (fisier sau director) exista si poate fi citit, altfel returneaza FALSE.
26.is_uploaded_file("fisier_up")
- Returneaza TRUE daca "fisier_up" a fost incarcat pe server, prin upload si primit prin $_POST, altfel returneaza FALSE. Parametrul functiei trebuie sa fie de forma "$_FILES['userfile']['tmp_name']".
27.is_writable("nume")
- Returneaza TRUE daca "nume" (fisier sau director) exista si poate sa scrie in el, altfel returneaza FALSE.
28.mkdir("dir", chmod)
- Returneaza TRUE daca a putut crea directorul "dir" cu permisiunile specificate la "chmod", altfel returneaza FALSE.
29.pathinfo("adresa_file")
- Returneaza o matrice cu informatiile: ale "adresa_file".
30.readfile("fisier")
- Citeste si returneaza la browser (afiseaza) continutul din "fisier". In caz de esec returneaza FALSE.
31.realpath("cale_adresa")
- Returneaza calea reala in sistem a unei adrese din "cale_adresa", rezolvand referinte ca .. / ./ ../.
32.rename("nume", "nume_nou"
- Redenumeste un director sau fisier specificat la "nume", cu "nume_nou". In caz de succes returneaza TRUE, altfel FALSE.
33.rewind(file_pointer)
- Readuce pozitia pointer-ului dintr-un fisier deschis cu "fopen()" (specificat la "file_pointer") la inceputul fisierului (0, primul caracter). In caz de succes returneaza TRUE, altfel FALSE.
34.rmdir("dir")
- Sterge directorul specificat la "dir". Acesta trebuie sa fie gol. In caz de succes returneaza TRUE, altfel FALSE.
35.tempnam("dir", "prefix")
- Creaza un fisier cu nume unic, avand la inceput in nume sirul specificat la "prefix", in directorul "dir". Ii acorda CHMOD 0600. Daca directorul specificat nu exista, creaza fisierul in directorul "temp" al sistemului si returneaza numele fisierului. In caz de nereusita returneaza FALSE.
36.tmpfile()
- Creaza un fisier temporar, cu nume unic. Returneaza un pointer de fisier, ca si "fopen()", cu modul de deschidere "w+". In caz de nereusita returneaza FALSE. Cu "fclose()" fisierul temporar va fi sters.
37.unlink("fisier")
- Sterge fisierul specificat. In caz de succes returneaza TRUE, altfel FALSE.

Functii MySQL

Aici gasiti cateva din cele mai utilizate functii PHP pentru MySQL.
1.mysql_affected_rows($conn)
- Returneaza numarul de linii afectate in ultima operatie PHP-MySQL (INSERT, UPDATE, REPLACE ori DELETE) sau -1 daca acel "query" esueaza. "$conn" este optional si reprezinta conexiunea de lucru la MySQL.
Specificatie:Cand se foloseste REPLACE, aceasta intai sterge inregistrarile cu aceeasi cheie primara si dupa aia adauga noile inregistrari. Functia "mysql_affected_rows()" va returna numarul de inregistrari sterse plus cele adauggate.
2.mysql_client_encoding($conn)
- Returneaza tipul de codare a formatului de caractere folosit in conexiunea curenta ($conn).
3.mysql_connect('server_mysql', 'nume_utilizator', 'parola_myswql')
- Deschide o conexiune la MySQL. La argumentul "server_mysql" se poate adauga si portul de conectare, sintaxa devine astfel: 'server_mysql:port'.
4.mysql_close($conn)
- Inchide conexiunea la MySQL "$conn", daca nu e precizat "$conn", va inchide conexiunea curenta.
5.mysql_list_dbs($conn)
- Returneaza o lista cu bazele de date accesibile in conexiuea curenta ($conn), altfel, FALSE.
6.mysql_errno($conn)
- Returneaza numarul erorii de la ultima functie MySQL, sau 0 (zero) daca nu e vreo eroare.
7.mysql_error($conn)
- Returneaza mesajul de eroare (sir text) dat de MySQL la ultima functie executata, sau un sir gol daca nu sunt erori.
8.mysql_query("Comanda_mysql", $conn)
- Trimite o interogare SQL scrisa in "Comanda_mysql" la serverul MySQL. Returneaza un identificator in care e stocat raspunsul de la server, in functie de comanda SQL trimisa, sau in caz de esec (eroare), FALSE.
9.mysql_fetch_array(sql_rezult, tip)
- Returneaza un Array ce contine rezultatul dat de MySQL in urma unei interogari facute cu "mysql_query()" si transmis in "sql_rezult". In caz de esec, FALSE.
Daca "tip" are valoarea MYSQL_ASSOC, va returna un Array asociativ in care cheile sunt numele coloanelor din tabelul MySQL (ca si "mysql_fetch_assoc()"). Daca "tip" are valoarea MYSQL_NUM se va obtine o matrice secventiala, cu cheile numere consecutive (ca si "mysql_fetch_row()"). Iar daca "tip" are valoarea MYSQL_BOTH (care e default, daca tip nu e precizat) se va obtine un Array cu ambele tipuri.
10.mysql_fetch_assoc(sql_rezult)
- Returneaza un Array asociativ (in care cheile sunt numele coloanelor din tabelul MySQL) cu rezultatul dat de MySQL in urma unei interogari facute cu "mysql_query()" si continut in "sql_rezult". In caz de esec, FALSE.
- Muta si pointerul intern din tabelul MySQL deasupra.
11.mysql_fetch_row(sql_rezult)
- Returneaza un Array secvential (in care cheile sunt numere consecutive, de la 0) cu rezultatul dat de MySQL in urma unei interogari facute cu "mysql_query()" si continut in "sql_rezult". In caz de esec, FALSE.
- Muta si pointerul intern din tabelul MySQL deasupra.
12.mysql_fetch_object(sql_rezult)
- Returneaza un obiect cu rezultatul dat de MySQL in urma unei interogari facute cu "mysql_query()" si continut in "sql_rezult".Proprietatile acestui obiect sunt numele coloanelor. In caz de esec, FALSE.
- Muta si pointerul intern din tabelul MySQL deasupra.
13.mysql_fetch_field(sql_rezult)
- Obtine un obiect cu o lista de informatii despre coloanele dintr-o interogare cu "mysql_query()".
14.mysql_field_len(sql_rezult, nr_camp)
- Returneaza lungimea campului de la "nr_camp", acest parametru este numarul de ordine al coloanelor dintr-o interogare cu "mysql_query()" (a carui raspuns e continut in "sql_rezult"). Prima coloana are numarul 0. In caz de esec, FALSE.
15.mysql_field_name(sql_rezult, nr_camp)
- Obtine numele campului de la "nr_camp", acest parametru este numarul de ordine al coloanelor dintr-o interogare cu "mysql_query()" (a carui raspuns e continut in "sql_rezult"). Prima coloana are numarul 0. In caz de esec, FALSE.
16.mysql_field_type(sql_rezult, nr_camp)
- Obtine tipul campului de la "nr_camp" ("string", "int", "blob", sau altele ...), acest parametru este numarul de ordine al coloanelor dintr-o interogare cu "mysql_query()" (a carui raspuns e continut in "sql_rezult"). Prima coloana are numarul 0.
17.mysql_free_result(sql_rezult)
- Elibereaza memoria serverului dupa prelucrarea informatiilor obtinute cu o interogare "mysql_query()" (stocata in "sql_rezult").
18.mysql_get_client_info()
- Returneaza un sir cu date despre versiunea MySQL activa pe server. Nu necesita conectare la MySQL.
19.mysql_get_host_info($conn)
- Da informatii despre gazda serverului MySQL din conexiunea $conn.
20.mysql_insert_id($conn)
- Obtine ultimul ID generat de o coloana "AUTO_INCREMENT" in ultima interog

Prelucrarea datei și orei

Limbajul PHP oferă soluții simple pentru prelucrarea datei și orei. În versiunile mai noi sunt introduse facilități avansate cum ar fi DST (Daylight Saving Time), Timezones, Date Intervals, s.a. Înainte de acestea însă lucrul cu timpul se realiza folosind Unix timestamp. Conceptul de Unix timestamp desemnează numarul de secunde scurse de la 1 ianuarie 1970 (cand se considera ca a început era Unix).

Fiind vorba de un număr pozitiv ce are mereu aceeași referință, este ușor să se realizeze operații cum ar fi scăderea, adunarea sau compararea a două date reprezentate printr-un Unix timestamp. Mai jos sunt câteva aplicații menite să evidențieze cât de ușor se pot manipula date și ore în PHP.

Cum se formatează data sau ora?

Formatarea datei sau a orei se poate realiza ușor folosind funcția date. Cu ajutorul acesteia se pot "extrage" doar acele părți din data care sunt necesare și se poate specifica formatul dorit. Spre exemplu, folosind funcția date putem afișa data în format lung (de genul: "marti, 30 septembrie 2017") sau scurt (30.09.2017) sau cu aceeași funcție putem afișa ora sau oricare combinație a celor două. Formatul se specifică print-un text format din caractere ce au o semnificație anume, transmis ca parametru funcției date. Pentru detalii complete despre fiecare caracter în parte accesați http://www.php.net/manual/ro/function.date.php.

Cum determin ce zi și oră va fi peste 480 ore?

Pentru a efectua ușor operații cu zile și ore, se va folosi formatul de dată Unix (UNIX timestamp), returnat de funcția time(). Practic, data este afișată ca numarul de secunde scurs de la 1 ianuarie 1970, ora 00:00. Având această nouă perspectivă (de a privi datele ca un număr de secunde), operațiile cu date (de genul 'cât va fi peste 2 zile', 'ce oră a fost acum xxx minute', etc.) devin extrem de simple luând forma unor simple scăderi și adunări de secunde.

Cum afișez luna curentă și toate cele 12 luni în limba română?

Nota: această secvență de cod depinde de configurările serverului pe care este executată. Limba română trebuie instalată pe server pentru a avea rezultatele scontate.

Rezultatul este posibil să nu fie în limba română!

Cookie în PHP

Un cookie este adesea folosit pentru a identifica un utilizator. Un cookie este un fișier mic pe care serverul îl încorporează pe computerul utilizatorului. De fiecare dată când același computer solicită o pagină cu un browser, va trimite și cookie-ul. Cu PHP, puteți să creați și să preluați valorile cookie-urilor.

Creare cookie

Un cookie este creat cu funcția setcookie().

Sintaxă

Este necesar doar parametrul name. Toți ceilalți parametri sunt opționali.

Exemplu

Următorul exemplu creează un cookie numit „utilizator” cu valoarea „Mihai Eminescu”. Cookie-ul va expira după 30 de zile (86400 * 30). „/” înseamnă că cookie-ul este disponibil pe întregul site. Preluăm apoi valoarea cookie-ului „utilizator” (folosind variabila globală $_COOKIE). De asemenea, folosim funcția isset() pentru a afla dacă cookie-ul este setat:

Browser output:

Cookie 'utilizator' este setat!
Cu valoarea: Mihai Eminescu

Verificare dacă cookie-urile sunt activate

Următorul exemplu creează un mic script care verifică dacă cookie-urile sunt activate. Mai întâi, trebuie de creat un cookie de testare cu funcția setcookie(), apoi de numărat variabila matrice $_COOKIE:

Browser output:

Cookie-urile sunt activate.

Sesiuni în PHP

Sesiuni. Crearea unei sesiuni în PHP

Sesiunea reprezintă o modalitate prin care PHP reține informații de la o pagină la alta. Odată cu inițializarea unei sesiuni, utilizatorul poate păstra anumite variabile chiar dacă în continuare vizitează și alte pagini ale site-ului. În principiu informația se păstrează până la închiderea browser-ului, sau până când utilizatorul distruge în mod intenționat sesiunea curentă.

Lucrurile se desfășoară ca în felul următor: în momentul când un user s-a logat la site, PHP atribuie acestuia un identificator unic de sesiune: SID. Acest SID este inglobat într-un coockie cu numele PHPSESSID și trimis apoi către browserul utilizatorului. Dacă browserul nu suportă cookie-uri sau acestea sunt dezactivate, atunci acest SID este adăugat la adresa URL. În același timp se creează pe server un fișier cu numele SID. În continuare dacă utilizatorul dorește să stocheze anumite informații, acestea vor fi practic scrise în acest fișier SID de pe server.

Sesiunile au următoarele avantaje:

  •     • Pot fi folosite chiar dacă browserul utilizatorului nu suportă cookie-uri sau dacă acestea sunt dezactivate.
  •     • Permit stocarea unui volum mare de informații, spre deosebire de cookie-uri care sunt limitate în această privință.
  •     • Sunt mai sigure în raport cu cookie-urile deoarece informațiile nu sunt transmise în mod repetat între client și server.

Inițializarea unei sesiuni se face cu funcția: session_start()

Aceasta trebuie să fie printre primele linii de cod dintr-un script PHP, deoarece apelul acestei funcții trebuie făcut înainte de trimiterii către browser-ul Web a vreunui cod HTML sau chiar a unui spațiu vid.


Dacă folosim stocarea ieșirii în buffer, instrucțiunea session_start() nu trebuie inserată neaparat la inceputul codului.

Instrucțiunea session_start() nu este necesară dacă în fișierul de configurare "php.ini", variabila "session.auto_start" are valoarea true.

Pentru a ințelege mai bine modul de lucru cu sesiuni și funcția session_start(), folosim un exemplu în care avem o pagină principala "a.php" unde creăm o variabilă cu numele "userName", atribuindu-i valoarea "SD", pe care o stocăm într-o sesiune PHP, pagina conține o legatură către o altă pagină "b.php", aceasta din urmă va folosi funcția session_start() pentru a prelua, prin sesiune, valoarea variabilei "user_name" din pagina "a.php", astfel putem folosi valoarea acestei variabile într-un script din pagina "b.php".

Continutul fisierului "a.php" este următorul:

Browser output:

Aceasta este pagina "a.php"
Variabila de sesiune are valoarea: SD
Legatura spre pagina b.php

Continutul fisierului "b.php" este urmatorul:

Browser output:

Aceasta este pagina b.php
Variabila de sesiune are valoarea: SD

În acest exemplu se observă că pagina "b.php" deține informații despre variabila de sesiune creată în pagina "a.php".

Manipularea variabilelor sesiunii.

În anumite momente ar putea fi util să aflăm identificatorul sesiunii curente. Pentru aceasta folosim funcția session_id(), ca în exemplul următor:

Functia session_id() acceptă un parametru. Astfel putem seta un anumit SID pentru sesiunea curentă. În acest caz trebuie să apelăm funcția session_id() înainte de funcția session_start(), ca în exemplul urmator:

Browser output:

Identificatorul sesiunii curente SID = 123abc

Deoarece variabilele de sesiune pot fi citite de alți utilizatori neautorizați, nu este indicat să păstrămv aici informații esențiale cum sunt parolele.

Pentru a creea un minimum de securitate putem codifica aceste informații, folosind funcțiile de codare oferite de PHP: sha1() sau md5() sau crypt().

Functia md5(sir_de_caractere) codifică șirul de caractere furnizat ca parametru și returnează un șir de 32 charactere hexazecimale. Această funcție folosește algoritmul de criptare: "RSA Data Security, Inc. MD5 Message-Digest Algorithm".

Iată un exemplu de utilizare al acestei codificari:

Browser output:

User codificat = cfe86a1ce53f1c1323a31d22bcd96b3ce30dd986

Considerăm cazul în care avem o variabilă de sesiune "$parola" care păstrează o parolă și dorim să codificăm și să transmitem această variabilă astfel încât utilizatorii neautorizați să nu o poată folosi. Pentru aceasta folosim funcția md5(), pentru a o cripta. Mai mult inițializăm o variabilă globală cu numele "$secret", căreia îi atribuim ca valoare un șir de caractere oarecare. În continuare, înainte de a introduce parola într-o sesiune PHP, concatenam valorile "$secret" și "$parola" și criptăm rezultatul. Astfel, chiar dacă cineva reușește să decripteze variabila de sesiune, este puțin probabil să poată separa șirul "$secret" creat de noi.

Este bine să păstrăm acest fișier într-un director protejat, cum ar fi cu un nivel mai sus decât directorul pentru pagini de Web.

Iată cum se prezintă exemplul prezentat mai sus. Considerăm o variabilă "$parola" care verifică dacă valoarea acesteia este egală cu parola:

Browser output:

Parola acceptata

Astfel, dacă valoarea variabilei "$parola", care poate fi obținută, de exemplu, dintr-un formular HTML, este identică cu parola pastrată de noi, va fi afișat mesajul "Parola acceptata".

Ștergerea unei sesiuni

Pentru a putea șterge o sesiune este necesar să începem scriptul PHP cu instrucțiunea: session_start(), ca întotdeauna când folosim sesiuni.

Pentru a șterge toate variabilele memorate în matricea $_SESSION folosim: unset($_SESSION);

Pentru a șterge doar o variabilă memorată în sesiune folosim: unset($_SESSION['nume_variabila']);

Datele sesiunii sunt memorate în server în fișiere temporare. Pentru a șterge datele sesiunii din server folosiți: session_destroy().

Iată un exemplu care ilustrează această procedură:

Browser output:

Sesiunea curenta a fost inchisa

Lucrul cu directoare în PHP

La fel ca si fisierele, directoarele au un rol important in crearea unui site dinamic, deoarece ajuta la o buna structurare a paginilor si fisierelor siteului. Daca de exemplu dorim sa cream un site de socializare, unde fiecare persoana inregistrata poate sa isi uploadeze imagini, sa-si creeze anumite optiuni de profil si setari, este evident ca pentru fiecare persoana va trebui sa cream un director in care vor avea loc toate aceste operatii.

Cu php putem foarte usor sa manipulam directoarele si continutul acestora doar pe baza catorva functii de baza, care urmeaza a fi studiate in cadrul acestei lectii.

Obtinerea directorului curent

Pentru a obtine calea catre directorul curent de lucru folosim functia getcwd(). Aceasta returneaza directorul curent in care se afla scriptul php accesat (in caz ca nu s-a folosit o functie de schimbare a directorului de lucru). In cazul in care directorul de lucru este schimbat, functia nu mai returneaza directorul in care se afla fisierul accesat, ci returneaza directorul de lucru curent.

Acest director de lucru se poate schimba foarte usor folosind functia chdir(). Asta inseamna ca toate operatiile care urmeaza dupa functia de schimbare a directorului vor avea loc in acel nou director.

Exemplu:

Browser output:

Directorul curent de lucru este/home/fastwebp/public_html/php
Directorul curent de lucru este/home/fastwebp/public_html/php/asd

Observați ca după ce am schimbat directorul de lucru, am creat un fisier text, insa nu am specificat calea acestui fișier ca fiind directorul "asd". Dar totuși, fișierul s-a creat in directorul "asd" deoarece acesta a devenit directorul curent de lucru, in urma apelarii functiei chdir().

De retinut faptul ca functia chdir() schimba directorul de lucru doar in scripturile din pagina in care se afla. Daca parasim pagina, directorul de lucru va deveni cel in care se afla pagina pe care mergem.

Citirea continutului unui director

Atunci când citim conținutul unui director, citim de fapt toate fișierele si directoarele pe care le conține.

Pentru a obține conținutul unui director vom folosi funcțiile:

      opendir() - deschide directorul pentru citire

      readdir() - citește o intrare din director

      closedir() - închide directorul

Exemplu:

Browser output:

.
..
a.php
asd
b.php
files.jpg
image-1.png
globals.php
un_fisier.txt

Observati ca am folosit instructiunea while, asta din cauza ca functia readdir() citeste o singura intrare din directorul respectiv. Deci la fiecare citire va fi citit un nou fisier. O alta modalitate de a afisa continutul unui fisier este sa folosim functia scandir(). Aceasta creaza o matrice unde fiecare element al matricei va fi un fisier din folderul respectiv. Pe baza acestei functii putem crea un for() si sa prelucram fiecare fisier in parte.

Crearea unui director

Pentru a crea un director nou se foloseste functia mkdir(). Aceasta are sintaxa:

Unde "director" este numele directorului creat in folderul curent de lucru, iar "permisiuni" reprezinta permisiunile atribuite acelui director.

Pentru a intelege cum se atribuie permisiunile unui director sau fisier mergeti la tema Lucrul cu fisiere în PHP.

Exemplu:

Browser output:

Directorul a fost creat

Lucrul cu fișiere în PHP

Obținerea atributelor unui fișier

Privilegiile asociate unui fișier sau unui catalog determină operatiile pe care le poate executa un utilizator cu fisierul sau catalogul respectiv.

Pentru a adauga un fisier intr-un director, folosind PHP, trebuie sa aveti permisiunea de scriere in acel director, de asemenea, pentru a adauga date intr-un fisier, trebuie sa aveti permisiunea de scriere in fisierul respectiv.

Aceste permisiuni sunt date (configurate) de administratorul sistemului respectiv.

PHP furnizeaza numeroase functii care va permit sa obtineti informatii care descriu un fisier.

Tabelul urmator rezuma cele mai cunoscute dintre aceste functii.

Funcție
Descriere
file_exists() Returneaza TRUE daca fisierul specificat exista, respectiv FALSE în caz contrar
fileatime() Returneaza timpul de acces la fisier sub forma de amprenta de timp UNIX
filectime() Returneaza timpul de modificare al i-nodului (structura de date care contine informatii despre fisiere UNIX - N. T.) sub forma de amprenta de timp UNIX.
filegroup() Returneaza identificatorul numeric al grupului care detine fisierul
filemtime() Returneaza momentul de timp al modificarii fisierului sub forma de amprenta de timp UNIX
fileowner() Returneaza identificatorul numeric de utilizator al fisierului
fileperms() Returneaza permisiunile fisierului
filesize() Returneaza dimensiunea fisierului, în octeti
filetype() Returneaza tipul fisierului, în speta "fifo", "char", "dir", "block", "link", "file" sau "unknown"
is_dir() Returneaza TRUE daca directorul specificat exista; în caz contrar, returneaza FALSE
is_file() Returneaza TRUE daca fisierul specificat exista; în caz contrar, returneaza FALSE
is_readable() Returneaza TRUE daca fisierul specificat exista si poate fi citit; în caz contrar, returneaza FALSE
is_writable() Returneaza TRUE daca fisierul specificat exista si se poate scrie în acel fisier; în caz contrar, returneaza FALSE

Functiile fileowner() si filegroup() returneaza fiecare un identificator numeric. Puteti converti identificatorul numeric într-un sir prin invocarea functiei posix_getpwuid() cu un identificator de utilizator, respectiv a functiei posix_getgrgid() cu un identificat de grup. Acestea returneaza informatii despre identificatorul precizat.

Iata un exemplu in care puteti vedea, si intelege mai bine, cum sunt folosite functiile rezentate in tabelul anterior (fisierul 'test.txt' care va fi folosit de functii se afla in acelasi director cu scriptul php):

Browser output:

file_exists(): 1
fileowner(): 0
filegroup(): 0
filetype(): file
filesize(): 21
fileatime(): 10/31/2021 20:36
filectime(): 10/31/2021 20:36
filemtime(): 10/31/2021 20:03
fileperms(): 100666
is_file(): 1
is_dir():
is_readable(): 1
is_writable(): 1

Privilegii de fisier

Privilegiile asociate unui fisier (sau director) determina operatiile pe care utilizatorii le pot efectua cu fisierul (sau directorul) respectiv.

Privilegiile sunt date sub forma a trei grupuri alcatuite din câte trei caractere fiecare, cu alte cuvinte, trei triade. Prima triada indica privilegiile acordate posesorului fisierului. Cea de-a doua triada indica privilegiile acordate membrilor grupului posesor al fisierului. Cea de-a treia triada indica privilegiile acordate altor utilizatori.

Cele 3 caractere care alcatuiesc un grup sunt reprezentate, in sistemele UNIX, prin urmatoarele trei litere: 'r', 'w' și 'x'; acestea reprezintă:

     • r - fisierul poate fi citit

     • w - se poate scrie în fisier

     • x - continutul fisierului poate fi executat

Caracterele unei triade apar întotdeauna în secvența 'rwx'. Daca o anumita litera este înlocuita de o cratima (-), privilegiul asociat nu este accesibil.

Sa examinam privilegiile specificate in urmatorul exemplu:

     rwxr-xr--

Aceste caractere au urmatoarea semnificatie:

     • "rwx", posesorul fisierului poate citi, scrie sau executa fisierul

     • "r-x", membrii grupului posesor al fisierului pot citi sau executa fisierul, dar nu pot scrie în fisier

     • "r--", alti utilizatori pot citi fisierul, dar nu pot scrie în fisier sau executa continutul fisierului

Privilegiul 'x' este semnificativ numai pentru fisierele care includ un continut executabil, cum sunt fisierele binare executabile (.exe) sau anumite categorii de scripturi.

Posesorul unui fisier poate modifica privilegiile asociate fisierului emitând comanda chmod (aceasta functioneaza in sistemele de operare UNIX).

Aceasta comanda are doua forme. O forma va permite sa specificati privilegiile folosind cifre scrise în octal, cealalta va permite sa le specificati folosind litere.

Pentru a specifica privilegiile folosind cifre în octal, calculati valoarea numerica a fiecarei triade. Pentru aceasta, însumati numerele corespunzatoare fiecarui privilegiu disponibil din cadrul triadei. Numerele asociate privilegiilor sunt urmatoarele:

     r - 4

     w - 2

     x - 1

De exemplu, privilegiul "rwx" are valoarea 4 + 2 + 1 = 7. Similar, privilegiul "r-x" are valoarea 4 + 1 = 5, iar privilegiul "r--" are valoarea 4.

Dupa ce ati calculat valoarea numerica a fiecarei triade, formati un numar din trei cifre scris în octal, care este alcatuit din valoarea numerica a privilegiilor utilizatorilor, valoarea numerica a privilegiilor membrilor grupului, si valoarea numerica a privilegiilor altor utilizatori. Astfel, privilegiile "rwxr-xr--" corespund valorii în octal 754.

Modificarea privilegiilor unui fisier

Pentru a modifica privilegiile unui fisier, folositi functia chmod(), care are urmatoarea forma:

     chmod(nume_fisier, mod)

Argumentul 'nume_fisier' specifica numele si calea de acces a fisierului ale carui privilegii urmeaza a fi modificate, iar argumentul 'mod' specifica privilegiile dorite, în general, se prefera exprimarea privilegiilor sub forma unui numar scris în octal. Pentru aceasta, prefixati valoarea folosind cifra 0.

De exemplu, puteti atribui unui fisier "text.txt" privilegiile "rwxr-xr--" specificând pentru 'mod' valoarea 0754, functia "chmod" va fi chmod("text.txt", 0754).

Pentru ca functia chmod() sa se execute cu succes, PHP trebuie sa ruleze sub contul utilizatorului posesor al fisierului. Functia returneaza TRUE în caz de reusita, respectiv FALSE în caz contrar.

Pentru a modifica grupul posesor al unui fisier, invocari functia chgrp(), care are forma:

     chgrp("nume_fisier", grup)

- Unde "grup" este un nume sau numar care desemneaza grupul respectiv.

Functiile chmod() si chgrp() nu functioneaza sub Microsoft Windows.

Deschiderea unui fișier

Înainte de a putea citi sau scrie într-un fisier, trebuie sa deschideti fisierul folosind functia fopen().

     fopen("nume_fisier", "mod")

- unde 'nume_fisier' specifica numele si calea spre fisierul care urmeaza a fi deschis, iar 'mod' indica tipul de acces dorit.

Modurile de deschidere a unui fisier sunt urmatoarele:

     r - Permite doar citirea fisierului

     r+ - Citire sau scriere de la inceputul fisierului

     w - Creaza fisierul daca nu exista si suprascrie datele existente

     w+ - Citire sau scriere; la scriere , creeaza fisierul daca nu exista si suprascrie datele existente

     a - Adaugare; Creaza fisierul daca nu exista si adauga datele noi la sfarsitul fisierului existent

     a++ - Citire sau scriere; la scriere, creaza fisierul daca nu exista si adauga datele noi la sfarsitul fisierului existent

     x - Doar scriere; Creaza fisierul daca nu exista si genereaza un averisment daca acesta exista

     x+ - Citire sau scriere; Creaza fisierul daca nu exista si genereaza un averisment daca acesta exista

     b - Deschide fisierul in mod binar

Functia fopen() returneaza FALSE daca PHP nu a reusit sa deschida fisierul, în caz contrar, returneaza o valoare care contine un întreg, numit "identificator de fisier", care se foloseste pentru identificarea unui fisier de catre functiile care executa operatii cu fisiere.

De exemplu, instructiunea urmatoare deschide fisierul 'carte.txt' pentru citire:

     $fh = fopen("carte.txt", "r");

Sub Microsoft Windows, fisierele ASCII si fisierele binare sunt tratate în mod diferit. Când deschideti un fisier binar sub Windows, specificati b ca al doilea caracter al modului, de exemplu, "rb" pentru citire, "wb" pentru scriere, "a+b" pentru citire si adaugare. Daca nu procedati astfel, citirile din fisier si alte operatii se vor încheia prematur sau vor esua.

Verificarea finalizarii unei operatii cu un fisier

Operatiile cu fisiere (inclusiv cele legate de deschiderea, citirea unui fisier si scrierea într-un fisier) pot esua dintr-o varietate de motive. Deci, este important sa verificati daca fiecare operatie s-a încheiat cu succes.

Iata o modalitate în care puteti proceda:

Functia fopen() returneaza FALSE daca nu reuseste sa deschida fisierul. In acest caz, scriptul executa instructiunea echo care afisaza un mesaj.

O forma alternativa mai simpla foloseste operatorul OR (SAU):

Inchiderea unui fisier

Un fisier deschis consuma resursele sistemului. Când un script a terminat de utilizat un fisier, scriptul trebuie sa închida fisierul, eliberând aceste resurse.

La sfârsitul unui script, PHP închide în mod automat fisierele deschise. Totusi, la programare se recomanda sa închideti fisierele mai rapid, ori de câte ori este posibil.

Pentru a închide un fisier, folositi functia fclose():

     fclose(identificator_fisier)

- 'identificator_fisier' este identificatorul fisierului, returnat la deschiderea acestuia cu functia fopen().

Iata un exemplu caracteristic de deschidere, utilizare si închidere a unui fisier:

Functia fclose() returneaza valoarea TRUE daca fisierul a fost închis cu succes. Testarea acestei valori este rareori necesara, deoarece nu se mai pot face prea multe dupa ce s-a ratat o încercare de a închide un fisier.

Citirea dintr-un fisier

PHP furnizeaza o varietate de functii pentru citirea fisierelor. Una dintre acestea este fread(), care are urmatoarea forma:

     fread(identificator_fisier, lungime)

Argumentul 'identificator_fisier' este valoarea returnata de functia fopen(), iar argumentul 'lungime' specifica numarul maxim de octeti care vor fi cititi. Octetii cititi din fisier sunt returnati sub forma de valoare de tip sir. Daca operatia de citire întâlneste sfârsitul fisierului, PHP va returna mai putin de lungime octeti data.

Iata un exemplu de citire si de afisare a unui text dintr-un fisier, folosind functia fopen() (Fisierul "carte.txt" folosit ca test in exemplele de mai jos trebuie sa se afle in acelasi director in care este si scriptul php):

Exemplul citeste maximum 256 de octeti din fisier daca fisierul a fost deschis.

Am folosit caracterul @ in fata functiei "fopen()" pentru a impedica afisarea erorilor de la server in cazul cand fisierul nu poate fi deschis. Este deja functia "if()" care verifica si afiseaza mesaj in caz de nedeschidere a fisierului.

Pentru a citi un numar mai mare sau mai mic de octeti, modificati valoarea argumentului lungime al functiei fread().

PHP include o functie conexa, denumita fgetc(), care citeste un octet din fisierul specificat.

Pentru a citi si a afisa întregul continut al fisierului, puteti folosi functia filesize() pentru a furniza valoarea argumentului lungime, astfel:

Citirea unei linii de text

Se obisnuieste frecvent citirea linie cu linie a unui text dintr-un fisier.

Functia fgets() citeste o linie dintr-un fisier, functia are urmatoarea forma:

     fgets(identificator_fisier, lungime)

Argumentul 'identificator_fisier' este o valoare returnata de functia fopen() aici, argumentul 'lungime' specifica numarul maxim de octeti dintr-o linie care vor fi cititi, minus o unitate, pentru a permite includerea caracterului de terminare a liniei (acesta poate fi omis si va citi toata linia). Octetii cititi din fisier sunt returnati ca valoare de tip sir.

Iata un exemplu care prezinta modul de citire si de afisare a primilor 125 octeti din prima linii a unui fisier:

In exemplul de mai sus, daca prima linie din fisierul "carte.txt" are mai mult de 125 de caractere, va afisa doar primele 125, daca are mai putin de 125 de caractere, va afisa doar caracterele care sunt incluse in prima linie.

Citirea linie cu linie a unui întreg fisier

În general, dintr-un fisier trebuie citit mai mult decât prima linie a acestuia. Pentru aceasta, un script trebuie sa dispuna de o modalitate de a determina momentul când fisierul a fost citit în totalitate.

Functia feof() are chiar acest scop, returnând o valoare care arata daca s-a ajuns sau nu la sfârsitul fisierului. Functia are urmatoarea forma:

     feof(identificator_fisier)

Argumentul 'identificator_fisier' este valoarea returnata de functia fopen().

Functia feof() returneaza TRUE daca fisierul specificat este la sfârsit, în caz contrar, returneaza FALSE.

Iata cum se poate folosi functia feof() pentru a controla procesul de citire a unui întreg fisier, linie cu linie:

Instructiunea "while" asigura faptul ca functia fgets() este apelata în mod repetat, pâna la citirea tuturor liniilor.

O alta modalitate simpla de a citi linie cu linie un întreg fisier consta în a folosi functia file(). Aceasta functie returneaza un tablou în care fiecare element contine o linie a fisierului specificat.

Iata un exemplu care foloseste functia file() pentru a citi si pentru a afisa continutul unui fisier:

Aceasta metoda nu este adecvata pentru fisiere de foarte mari dimensiuni, deoarece în tablou este încarcat întregul continut al fisierului, ceea ce poate necesita o cantitate de memorie superioara celei disponibile.

Afisarea continutului unui fisier

PHP furnizeaza doua functii care faciliteaza afisarea continutului unui fisier.

Una dintre functii, fpassthru(), necesita un argument care specifica identificatorul fisierului care urmeaza sa fie afisat:

     $fh = fopen("carte.txt", "rb");

     fpassthru($fh);

Dupa ce a afisat fisierul, functia îl închide automat.

Cealalta functie, readfile(), necesita numai numele sau calea fisierului:

     readfile("carte.txt");

Navigarea printr-un fisier

Fiecare fisier are un pointer asociat care indica pozitia octetului unde se va produce urmatoarea operatie.

Puteti folosi functia rewind() pentru a readuce pointerul la începutul fisierului. Functia are urmatoarea forma ('identificator_fisier' este identificatorul de fisier returnat de functia fopen()):

     rewind(identificator_fisier)

Nu puteti readuce pointerul unui fisier la începutul propriu-zis al unui fisier daca fisierul a fost deschis pentru un acces de tip atasare, adica într-unul din modurile 'a' sau 'a+'.

Iata un exemplu care prezinta modul de utilizare a functiei rewind() pentru a afisa de doua ori continutul unui fisier:

Daca se produce vreo eroare, functia rewind() returneaza zero.

Desi functia rewind() este utila în caz de nevoie, necesitatea de a readuce un pointer de fisier la începutul fisierului nu este chiar atât de frecventa.

Functia fseek() furnizeaza o mai mare flexibilitate, permitându-va sa pozitionari pointerul de fisier astfel încât sa puteti citi sau scrie în orice punct al fisierului.

Functia are doua forme, cea mai simpla fiind urmatoarea:

     fseek(identificator_fisier, offset)

- unde 'identificator_fisier' este identificatorul de fisier returnat de functia fopen(), iar 'offset' este pozitia dorita a pointerului de fisier, specificata în octeti, în raport cu începutul fisierului.

In caz de reusita, functia fseek() returneaza 0, în caz contrar, returneaza -l .

O forma alternativa a functiei asigura un grad superior de flexibilitate, avand urmatoarea forma:

     fseek(identificator_fisier, offset, baza)

unde 'identificator_fisier' si 'offset' au semnificatiile definite anterior, iar 'baza' ia una, dintre urmatoarele valori:

• SEEK_SET, care stabileste pozitia pointerului de fisier în raport cu începutul fisierului

• SEEK_CUR, care stabileste pozitia pointerului de fisier în raport cu valoarea curenta a pointerului

• SEEK_END, care stabileste pozitia pointerului de fisier relativ la sfârsitul fisierului

Valoarea argumentului 'offset' poate fi pozitiva, negativa sau zero.

De exemplu, pentru a pozitiona pointerul cu 1000 de octeti înainte de sfârsitul fisierului, emiteti urmatorul apel de functie:

     fseek($fh, -1000, SEEK_END)

Pentru a obtine valoarea curenta a pointerului de fisier, folositi functia ftell(), care are urmatoarea forma:

     ftell(identificator_fisier)

Functia returneaza valoarea curenta a identificatorului de fisier, respectiv valoarea zero daca functia esueaza.

Scrierea într-un fisier

Pentru a scrie intr-un fisier se foloseste functia fwrite(), aceasta are urmatoarea forma:

     fwrite(identificator_fisier, date);

Unde 'identificator_fisier' este identificatorul de fisier returnat de functia fopen(), iar 'date' este o valoare sir care determina datele care urmeaza a fi scrise.

Daca executia functiei reuseste, returneaza numarul octetilor scrisi; în caz contrar, returneaza valoarea -1.

Iata un exemplu care prezinta modul de scriere a datelor într-un fisier:

Browser output:

Rezultatul scris este: 30

Programul prezentat în exemplul anterior scrie în fisierul "carte.txt" o linie de text. Deoarece fisierul a fost deschis folosind modul "a", datele sunt atasate la fisier, cu alte cuvinte, datele sunt scrise la sfarsit, dupa toate datele existente în fisier.

Observati ca a fost scris si un caracter de terminare a liniei ("\n"), astfel încât fisierul sa poata fi citit linie cu linie la un moment de timp ulterior. Daca lucrati cu un fisier text, în general e util sa includeti un caracter de terminare a liniei la sfârsitul fiecarei linii scrise în fisier.

Programul din exemplu scrie în fisier o singura linie de text. Totusi, puteti scrie mai multe linii, daca doriti.

Daca apelati functia fwrite() din interiorul unei bucle, aveti posibilitatea de a scrie mai multe linii. Dupa ce ati scris toate liniile de care aveti nevoie, închideti fisierul prin apelarea functiei fclose().

PHP mai furnizeaza si o forma alternativa a functiei fwrite():

     fwrite(identificator_fisier, date, lungime);

Aceasta forma include un al treilea argument, si anume "lungime", care va permite sa specificati numarul maxim de octeti care vor fi scrisi.

Argumentul "lungime" al functiei fwrite() trebuie utilizat atunci când se scrie în fisiere binare sub Microsoft Windows.

Windows prefera secventa de terminare a liniei "\r\n". Atunci când scrieti programe PHP pentru sisteme Windows, este de preferat sa folositi secventa "\r\n" de terminare a liniei.

PHP dispune de o alta functie pentru scrierea fisierelor, fputs(). Totusi, în afara de nume, fputs() este similara cu functia fwrite().

Obtinerea accesului exclusiv la un fisier

Web-ul ridica o problema speciala pentru dezvoltatorii de programe, deoarece mai multi utilizatori pot avea acces simultan la un singur script PHP. Uneori, accesul simultan poate avea ca rezultat date incorecte.

Pentru a vedea cum se poate produce aceasta, sa luam în considerare urmatorul script, care reprezinta un contor pentru numarul de deschideri a unei pagini.

Remarcati functiile pe care le foloseste scriptul pentru a executa operatiile cu fisiere. Programul deschide fisierul "ctr.txt" pentru citire si scriere, preia datele din acesta, care sunt un numar intreg, mareste acel numar cu o unitate, intoarce pointerul la inceputul fisierului "rewind" dupa care rescrie noul numar, afiseaza numarul si inchide fisierul.

Secventa de cod descrisa mai sus poate creea probleme in cazul in care, de exemplu doi utilizatori diferiti acceseaza acelasi fisier, in acelasi timp, cand contoarul este, de exemplu, la numarul 100. Amandoi vor incrementa numarul 100 cu o unitate si va rescrie in fisierul "ctr.txt" 101, in final, contoarul va arata 101, in loc de 102 cum ar fi trebuit (deoarece au fost 2 vizitatori).

Pentru a evita astfel de conflicte PHP pune la dispozitia utilizatorilor o metoda prin care se poate bloca accesul temporar la un fisier. Pe durata blocarii, un alt utilizator nu va mai putea scrie/citi din acest fisier. De aceea durata blocarii trebuie sa fie limitata.

Functia care realizeaza blocarea este flock(), care are urmatoarea forma:

     • flock(identificator_fisier, operatie)

Unde "identificator_fisier" este identificatorul de fisier returnat de functia fopen(). Argumentul "operatie" este o constanta sau o expresie care poate avea urmatoarele valori:

     LOCK_SH - Blocare partajata in scopuri de citire

     LOCK_EX - Blocare exclusiva in scopuri de scriere

     LOCK_NB - Blocare fara fixare

     LOCK_UN - Eliminarea blocarii

Iata cum se foloseste procesul de blocare, vom folosi acelasi exemplu, contoarul de mai sus, de data aceasta imbunatatit.

De data aceasta scriptul blocheaza fisierul "ctr.txt" pe timpul citirii si scrierii acestuia, astfel încât accesul simultan sa nu cauzeze o numarare eronata.

Blocare se face imediat dupa ce a fost deschis fisierul, cu "LOCK_EX", si se incheie imediat dupa rescrierea in fisier, prin deblocare acestuia "LOCK_UN".

Copierea unui fisier

O functie care faciliteaza copierea fisierelor, este copy(). Functia copy() are urmatoarea forma:

     copy (sursa, destinatiea)

Unde "sursa" este numele si calea fisierului care urmeaza a fi copiat, iar "destinatie" este numele sau calea copiei.

Functia returneaza TRUE daca operatia de copiere reuseste, în caz contrar, returneaza FALSE.

Iata un exemplu în care este prezentat modul de utilizare a functiei copy():

Exemplul creeaza o copie a fisierului "test.txt", cu numele "test.txt.bak", in acelasi director.

Functia copy() va suprascrie fisierul destinatie, daca acesta exista.

Modificarea numelui unui fisier

Functia care va permite sa modificati numele unui fisier este rename(), aceasta care are urmatoarea forma:

     rename(nume_vechi, nume_nou)

Unde "nume_vechi" este numele si calea originala a fisierului, iar "nume_nou" este numele dorit.

Functia returneaza TRUE daca operatia de modificare a numelui a reusit; în caz contrar, returneaza FALSE.

Iata un exemplu de utilizare a functiei rename():

Exemplu modifica numele fisierului "test.txt" in "teste.dat".

Stergerea unui fisier

Functia care va permite sa stergeti un fisier este unlink(), aceasta care are urmatoarea forma:

     unlink(nume_fisier)

Unde "nume_fisier" este numele si calea fisierului care va fi sters.

Functia returneaza TRUE daca operatia de stergere a reusit; în caz contrar, returneaza FALSE.

Iata un exemplu de utilizare a functiei unlink():

Exemplu sterge fisierului "test.txt".

Retineti ca PHP trebuie sa aiba acces de scriere la catalogul în care se vor executa operatiile de copiere, redenumire sau stergere, în caz contrar, PHP nu va putea executa aceste operatii.

Incarcarea unui fisier in server

Pentru incarcarea unui fisier in server, se folosesc formulare HTML impreuna cu un script PHP de incarcare care foloseste functia move_uploaded_file() pentru operatia de upload.

Pentru a crea un formular de încarcare, specificati ENCTYPE="multipart/form-data" în eticheta FORM si includeti un control de introducere a datelor cu atributul TYPE="FILE".

Iata un exemplu de script PHP si formular HTML care incarca fisierele in server:

Când utilizatorul apasa pe butonul de "Trimite", scriptul PHP preia datele si va incarca fisierul dorit in server.

Clase și obiecte în PHP

Începând cu PHP5, puteți scrie și cod PHP într-un stil orientat pe obiecte.

Programarea orientată pe obiecte este mai rapidă și mai ușor de executat.

Programarea procedurală se referă la scrierea de proceduri sau funcții care efectuează operații asupra datelor, în timp ce programarea orientată pe obiecte se referă la crearea de obiecte care conțin atât date, cât și funcții.

Scriptul scris în stil POO este mai rapid în execuție față de programarea procedurală.

Clasele și obiectele sunt cele două aspecte principale ale programării orientate pe obiecte.

Exemplu de clasă și obiecte:

Diferența între clasă și obiect este importantă. Dacă o clasă poate fi asimilată unui tip de date, un obiect poate fi echivalat cu o variabilă sau cu o valoare având un anumit tip de date. Practic, o clasa este o "fabrică" de obiecte, care produce obiecte cu aceeași structură, având proprietăți și metode identice.

Deci, o clasă este un șablon pentru obiecte, iar un obiect este o instanță a unei clase.

Când obiectele individuale sunt create, ele moștenesc toate proprietățile și comportamentele din clasă, dar fiecare obiect va avea valori diferite pentru proprietăți.

Definirea unei clase

O clasă este definită folosind cuvântul cheie class, urmat de numele clasei și o pereche de acolade {}. Toate proprietățile și metodele sale sunt incluse în interiorul acoladelor:

Mai jos declarăm o clasă numită Car constând din două proprietăți $name și $color și două metode set_name() și get_name() pentru setarea și obținerea proprietății $name:

Notă: Într-o clasă, variabilele sunt numite proprietăți, iar funcțiile sunt numite metode!

Clasele nu sunt nimic fără obiecte! Putem crea mai multe obiecte dintr-o clasă. Fiecare obiect are toate proprietățile și metodele definite în clasă, dar ele vor avea valori de proprietăți diferite.

Obiectele unei clase sunt create folosind cuvântul cheie new.

În exemplul de mai jos, $bmw și $audi sunt instanțe ale clasei Car:

Output:

BMW
Audi

În exemplul de mai jos, adăugăm încă două metode la clasa Car, pentru setarea și obținerea proprietății $color:

Output:

Name: BMW
Color: Blue

Cuvântul cheie $this

Cuvântul cheie $this se referă la obiectul curent și este disponibil numai în cadrul metodelor.

Exemplu:

Deci, unde putem schimba valoarea proprietății $name? Există două moduri:

1. În interiorul clasei (prin adăugarea unei metode set_name() și utilizarea cuvântului cheie $this):

Output:

Audi

2. În afara clasei (prin modificarea directă a valorii proprietății):

Output:

Audi

Instanceof

Puteți folosi cuvântul cheie instanceof pentru a verifica dacă un obiect aparține unei anumite clase:

Output:

bool(true)

Constructor POO

Funcția __construct

Un constructor vă permite să inițializați proprietățile unui obiect la crearea obiectului.

Dacă creați o funcție __construct(), PHP va apela automat această funcție atunci când creați un obiect dintr-o clasă.

Observație: Funcția de construcție începe cu două caractere de subliniere (__)!

Vedem în exemplul de mai jos că folosirea unui constructor ne scutește de apelarea metodei set_name() care reduce cantitatea de cod:

Exemplu 1

Output:

Audi

Exemplu 2

Output:

Audi
blue

Destructor POO

Funcția __destruct

Un destructor este apelat atunci când obiectul este distrus sau scriptul este oprit sau ieșit.

Dacă creați o funcție __destruct(), PHP va apela automat această funcție la sfârșitul scriptului.

Observație: Funcția de distrugere începe cu două caractere de subliniere (__)!

Exemplul de mai jos are o funcție __construct() care este apelată automat când creați un obiect dintr-o clasă și o funcție __destruct() care este apelată automat la sfârșitul scriptului:

Exemplu 1

Output:

The car is Audi.

Exemplu 2

Output:

The car is Audi and the color is blue.

Modificatori de acces

Proprietățile și metodele pot avea modificatori de acces care controlează unde pot fi accesate.

Există trei modificatori de acces:

    public - proprietatea sau metoda poate fi accesată de oriunde. Acesta este implicit.

    protected - proprietatea sau metoda poate fi accesată în cadrul clasei și prin clase derivate din acea clasă.

    private - proprietatea sau metoda poate fi accesată numai în cadrul clasei.

În exemplul următor am adăugat trei modificatori de acces diferiți la trei proprietăți (name, color și weight). Aici, dacă încercați să setați proprietatea name, va funcționa bine (deoarece proprietatea name este public și poate fi accesată de oriunde). Cu toate acestea, dacă încercați să setați proprietatea color sau weight, va avea ca rezultat o eroare fatală (deoarece proprietatea color și weight este protected și private):

Exemplu

În exemplul următor am adăugat modificatori de acces la două funcții. Aici, dacă încercați să apelați funcția set_color() sau set_weight() va avea ca rezultat o eroare fatală (deoarece cele două funcții sunt considerate protected și private), chiar dacă toate proprietățile sunt publice:

Exemplu

Moștenire

Moștenire în POO este când o clasă derivă dintr-o altă clasă.

Clasa copil va moșteni toate proprietățile și metodele public și protected de la clasa părinte. În plus, poate avea propriile sale proprietăți și metode.

O clasă moștenită este definită prin utilizarea cuvântului cheie extends.

Exemplu

Output:

Am I a car or truk? The car is BMW and the color is black.

Clasa BMW este moștenită din clasa Car.

Aceasta înseamnă că clasa BMW poate folosi proprietățile publice $name și $color, precum și metodele publice __construct() și intro() din clasa Car din cauza moștenirii.

Clasa BMW are și propria metodă: message().

Constantele claselor

Constantele nu pot fi modificate odată ce sunt declarate.

Constantele clasei pot fi utile dacă trebuie să definiți anumite date constante în cadrul unei clase.

O constantă a unei clase este declarată în interiorul unei clase cu cuvântul cheie const.

Constantele clasei sunt case-sensitive. Cu toate acestea, se recomandă să denumiți constantele cu toate literele mari.

Putem accesa o constantă din afara clasei utilizând numele clasei urmat de operatorul de rezoluție a domeniului (::) urmat de numele constantei, ca aici:

Exemplu

Output:

I like my Volkswagen car!

Sau, putem accesa o constantă din interiorul clasei utilizând cuvântul cheie self urmat de operatorul de rezoluție a domeniului (::) urmat de numele constantei, ca aici:

Exemplu

Output:

I like my Volkswagen car!

Construiește un site web cu PHP

ANTET

MENU
Pag A
Pag B
Pag C

CONTINUT

SUBSOL

index.php

antet.html

meniu.html

continut.html

subsol.html

p1.html

p2.html

p3.html


Vezi exemplul

Cîteva idei utile pentru securitatea paginilor web

Regula numărul unu a securității online este: nu vă încredeți niciodată în utilizator. Întotdeauna verificați datele trimise către server și "curățați-le" înainte de a le utiliza. Pentru aceasta trebuie să luați în considerare cîteva posibile "găuri" de securitate. Menționez că cele scrise aici sunt doar noțiuni generale, pentru o securitate ridicată ar trebui sa aveți noțiuni specializate de baze de date și de administrare a serverelor web.

1. Variabilele globale

Avînd variabilele globale din php.ini setate pe ON puteți accesa datele trimise prin formulare mai simplu: $variabila în loc de $_GET['variabila'], la fel și pentru POST sau FILES. Dacă scriptul nu este foarte bine gîndit, variabilele globale pot prezenta un risc major de securitate. Din acest motiv php.ini este distribuit cu globals=off în ultimele versiuni.

2. Ghilimele "magice"

Dacă în php.ini magic_quotes_gpc sunt OFF folosiți funcția addslashes pentru a preceda ghilimelele din datele trimise de utilizatori cu caracterul \. Dacă magic_quotes_gpc sunt ON, PHP adaugă automat caracterul \ înainte de ghilimele dar dacă ele sunt OFF, ghilimelele din input vă pot crea probleme serioase.

Ca exemplu, să presupunem că interogarea SQL de verificare a numelui și a parolei pentru înregistrarea pe site este

și dacă interogarea este executată cu succes, utilizatorul este logat. În acest caz, folosind parola 'OR' 1=1 oricine poate avea acces pe site deoarece interogarea

este executată cu succes și returnează un rezultat (toate înregistrarile din baza de date, de fapt). Mai mult, atunci cînd vă așteptați ca baza de date să returneze un singur rînd, verificați acest lucru și nu dacă interogarea s-a executat cu succes. Implicit în php.ini magic_quotes_gpc sunt ON pentru a vă proteja de astfel de atacuri, dar este bine să verificați înainte de a renunța la addslashes.

3. Includere

Încercați să evitați includerea "vizibilă" a fișierelor în forma http://site.md/fisier.php?file=cutare.html pentru a include fișiere în cadrul unei pagini. Cu puțină neatenție din partea voastră atacatorul ar putea accesa astfel de informații sensibile din cadrul sistemului. Nu includeți fișiere străine. PHP poate "include" fișiere aflate pe alte servere decît cel care rulează dacă setarea URL fopen wrappers este activată în php.ini. În exemplul de mai sus, un atacator ar fi putut accesa adresa:

http://site.md/fisier.php?file=http://www.rau.md/scriptultau.php

pentru a include în fisier un script localizat pe alt server și astfel obține acces către toate resursele sistemului la care are acces PHP, putînd rula comenzi de sistem, afișa informații confidențiale sau sterge baza de date. Nu permiteți includerea fișierelor din altă parte decît de pe serverul vostru. Setați allow_url_fopen=OFF în php.ini.

4. Formulare

Folosiți metoda POST în formulare atunci cînd informația din acestea urmează să fie introdusă în baza de date. Dacă variabilele globale sunt OFF în php.ini sau metoda de transmitere a formularului este GET, un utilizator rău intenționat ar putea accesa adresa dvs. și ar introduce comentariul lui (exemplu "blabla") în baza voastră de date fără să treacă propriuzis prin site. Așa vă puteți trezi că nu mai aveți spațiu pe server iar în baza de date sunt cîteva milioane de comentarii care spun același lucru "blabla".

Verificarea provenienței cererilor către server este foarte importantă și în alt caz: formularele de loghin. Cineva care știe numele de utilizator ar putea încerca să vă găsească parola foarte usor. În acest caz va trebui să puneți o protecție suplimentară care să nu permită mai mult de X încercări consecutive eșuate de logare pentru un nume de utilizator. Această problemă se rezolva ușor folosind sesiunile. În momentul cînd cineva încearcă să trimita numele și parola din formular putem seta o variabilă de sesiune $_SESSION['login_count'] care să țină minte numărul de încercări. Cînd valoarea acesteia trece de 3 (încercări nereușite) nici măcar nu mai interogați baza de date pentru a verifica datele trimise. Variabila de sesiune va rămîne în memorie cît timp browserul este deschis și sesiunea activă (opțiunea implicită a PHP de menținere a sesiunilor active este de o oră). Dacă atacatorul așteaptă o ora sau își închide browserul, sesiunea va fi închisă și va putea de alte X ori să se logheze. De cele mai multe ori acestă măsură de siguranta este suficientă pentru a preveni încercările de aflare a parolelor.

5. Extensii

O practică obișnuită este de a acorda extensia .inc fișierelor care conțin biblioteci de funcții ce urmează a fi incluse și folosite în cod. PHP nu parsează fișierele cu extensia .inc și dacă acestea sunt apelate direct ele sunt trimise plain text către browser. Nu puneți informații sensibile (precum nume și parola) în fișiere cu extensia .inc, .txt, sau .html care pot fi accesate și văzute. Folosiți pentru aceste fișiere extensia .php care, dacă sunt accesate direct, vor fi rulate fără să afișeze informațiile conținute în ele.

6. Comanda CHMOD- setarea atributelor

Comanda CHMOD (abreviere pentru change mode permissions of a file) este folosită pentru a schimba modul de acces (de permitere) a fișierelor și directoarelor de pe server. Setarea poate afecta modul cum poate fi citit, sau cum se poate executa un fișier pe server. De exemplu, dacă aveți un fișier .php care trebuie să execute o comandă de scriere pe server într-un fișier .txt trebuie să îi dați dreptul să poata fi executat iar la fișierul .txt trebuie să îi dați dreptul de a se putea scrie în el. Aveti 3 tipuri de acces - OWNER - GROUP - WORLD - fiecare cu cîte 3 setări - READ - WRITE - EXECUTE -
Este bine ca la WORLD să nu dați decît acces la citire (pentru a putea accesa paginile de pe site) dar nu și drepturi de scriere sau execuție (pentru că nu doriți ca oricine să vă scrie ce vrea în respectivul fișier .txt)
În programul TOTAL COMMANDER (pe care eu îl folosesc și pentru FTP) setarea atributelor pe server se face din meniul FILES - CHANGES ATTRIBUTES. Fiecare program de FTP are în meniul lui setare pentru atributele fișierelor de pe server.

7. Sesiuni

Dacă aveți o secțiune de administrare pe site, unde accesul este restrictionat doar la membrii de exemplu, este bine ca în toate paginile din această secțiune să încludă o pagină de verificare a accesului. Această pagina va verifica la fiecare accesare dacă utilizatorul este înregistrat și are acces pe pagina respectivă și permite rularea paginii doar dacă utilizatorul este înregistrat. Fără această verificare, un utilizator ar putea accesa paginile din secțiunea de administrare fără să treacă prin formularul de înregistrare. După autentificarea propriu-zisă, vom folosi variabile de sesiune pentru a păstra în memorie cîteva informații despre autentificare, pentru a le verifica mai tîrziu, atunci cînd accesăm alte pagini din cadrul secțiunii de administrare. Pornim întîi sesiunea după care trecem la salvarea informațiilor în ea ca în exemplul de mai jos:

Pe lîngă acestea, pentru o și mai mare siguranță, vom salva id-ul sesiunii în altă variabilă. Toate sesiunile au un id unic, un string care seamănă cu rezultatul unei criptări MD5:

Cu autentificare făcută, spunem scriptului să încarce prima pagină din secțiunea de administrare:

În continuare pentru a împiedica accesul neautorizat la paginile din această secțiune, scriem un mic script de verificare a datelor sesiunii înainte de a încărca orice pagină din secțiunea de administrare:

8. Loguri de acces

Pentru o verificare ulterioară a persoanelor care încearcă să intre în paginile restrictionate de pe site, este bine să salvăm în baza de date (sau într-un fișier text) numele, parola criptata, ora, data, semnătura browserului și ip-ul. Așa veți știi cine a încercat să vă spargă site-ul și puteți crea un script care sa verifice de exemplu ip-ul și dacă corespunde cu unul din cele care sunt blocate să nu aibă acces la nici una din pagini (chiar dacă găsește userul și parola corecte)

9. Criptarea parolelor cu MD5

Parolele care sunt salvate în baza de date este recomandat să le țineți criptate, astfel dacă cineva încearcă să citeasca parolele le va vedea criptate.

Criptarea folosind md5 nu este reversibila (și astfel nici dvs., nici altcineva nu o va putea afla chiar dacă are acces la baza de date).

10. Pagina index.php în subdirectoare

Dacă aveți mai multe directoare și subdirectoare pe server este recomandat pentru a preveni accesul la datele aflate în aceste directoare să introduceți în fiecare director o pagină numită index.html sau index.php care să facă redirectarea automat către pagina principală a site-ului. Astfel minimizati riscul să intre cineva și să vadă tot ce este în aceste subdirectoare.

11. Fișierul .htaccess

Pentru a bloca accesul la un anumit director (sau chiar la tot site-ul) puteti crea un fișier numit .htaccess (cu punct înainte) în care să introduceți ip-ul care doriți să îl blocați (sau care să aibă acces)
Order Deny,Allow
Allow from all

În exemplul de mai sus, toată lumea are acces. Dacă de exemplu ip-ul 192.168.1.1 nu doriți să aibă acces la acel director scrieți
Deny from 192.168.1.1

Atenție, să nu vă blocați singuri ip-ul la site, că altfel trebuie să luați legătura cu administratorul serverului să steargă fișierul ca să puteți intra din nou pe site, sau sa scrieti prin FTP un nou fișier .htaccess. (la subdirectoare ștergeți directorul sau salvați un alt fișier .htaccess) În cazul în care după de ați pus fișierul pe server nu îl vedeți, el este acolo dar serverul seteaza acest nume de fișier ca fișier ascuns.

12. Roboții de căutare

Motoarele de căutare pot indexa tot ce se află la voi pe site. Dacă doriți ca un fișier sau director să nu fie indexat de către motoarele de căutare, trebuie să creați un fișier numit robots.txt care să se afle în directorul principal de pe site (nu în subdirectoare). În el scrieți următoarele comenzi:
# robots.txt for http://web.ceiti.md
User-agent: *
Disallow: /cache/
Disallow: /admin
disallow: /search
unde pentru fiecare director sau fișier se specifică locația și numele. Pentru mai multă siguranță, am găsit pe web un mic script care verifică tipul de browser și dacă nu este un browser cunoscut nu permite accesul (dacă cineva încearcă să citească paginile cu programe spion sau gen web offline).

Cum am specificat și la începutul acestui articol, cele spuse mai sus nunt doar cateva indicii și idei pentru a vă putea proteja mai bine paginile.

Preluarea datelor din formulare

Înainte de a vorbi despre preluarea datelor dintr-un formular, trebuie în primul rând să cunoașteți sintaxa HTML pentru crearea unui formular.

Un formular este delimitat de elementul <form> care conține alte câteva elemente numite “controale”, care au o varietate de metode de a prelua informații. Fiecare element din formular are un nume cât și o valoare, astfel încât datele transferate pentru procesare să fie sub forma unor perechi nume=valoare.

Elementul <form>

Motoda POST vs GET

POST

GET

Valorile nu sunt vizibile în URL

Valorile sunt vizibile în URL

Lungimele valorilor nu sunt limitate, deoarece acestea sunt trimise prin corpul HTTP.

Lungimele valorilor sunt limitate, de obicei au până la 255 de caractere. Acest lucru se datorează faptului că valorile sunt afișate în URL. De reținut că limita superioară a caracterelor depinde de browser.

Are performanță mai scăzută în comparație cu metoda Php_GET datorită timpului petrecut încapsulării valorilor Php_POST în corpul HTTP

Are performanță ridicată în comparație cu metoda POST datorită naturii simple a anexării valorilor în URL.

Acceptă multe tipuri de date diferite, cum ar fi șir, numerice, binare etc.

Acceptă numai tipuri de date șir, deoarece valorile sunt afișate în URL

Rezultatele nu pot fi marcate

Rezultatele pot fi marcate datorită vizibilității valorilor din URL

Datele nu rămân în istoricul browserului. Sunt ascunse

Datele rămân în istoricul browserului

Este mai sigur

Este mai puțin sigur

Elementul <input>

Acest element <input> este cel mai important în utilizarea formularelor.

Explicarea valorilor atributului type ale elementului <input>

Descriere

Valoare

Exemplu

Rezultat

Caseta text

text

Casete de introducere a parolei

password

Elemente ascunse

hidden

Casete de validare

checkbox

Butoane radio

radio

Fisiere incluse

file

Buton de trimitere

submit

Butoane personale

button

Imagini

image

Butoane de resetare

reset

Elementul <select>

Acest element este folosit pentru crearea unei liste de opțiuni, fie ca un meniu care se desfășoară, fie ca o casetă cu listă.


Fiecare din opțiunile din listă reprezintă un element <option>.


Exemplul 1:



Exemplul 2:


Elementul <textarea>

Acest element este asemanator cu cel text numai că aici se poate tasta într-o secțiune mult mai mare decat în cazul text.

Exemplu textarea:





Exemplu 1:


Nume:
Prenume:

Vârsta:
sub 16 ani
peste 16 ani

Parola dorită:



Puneți codul într-un fișier formular.html, salvați și apoi vizualizați în browser accesând http://localhost/formular.html

Am vorbit până acum despre formulare, cum să le creăm și ce elemente au.

Hai să ne aducem aminte ca în interiorul etichetei <form> avem puse atributele action și method (care poate fi POST sau GET). În atributul action se pune calea către scriptul PHP care prelucrează datele iar în method se pune metoda prin care se vor transmite datele atunci când butonul “Trimite” este apăsat.

Acum că am creat formularul, avem pagina formular.html, haideți să cream și pagina prin care afișăm datele trimise serverului.

Creați un document formular.php și introduceți codul următor:

Salvați și testați în browser accesând http://localhost/formular.html, completați câmpul “Nume”, și apoi apăsați butonul “Trimite”.

Observați că în pagina formular.php ne este afișat numele introdus în câmpul “Nume” din pagina anterioară, și anume formular.html.

Adăugăm în continuare variabilele $_POST corespunzătoare formularului nostru, și apoi testăm din nou.

După cum vedeți, ne folosim de valoarea POST, iar datele nu sunt afișate decât dacă le definim noi $_POST['nume'] în pagina formular.php.

Numele din interiorul variabilei $_POST este numele din interiorul elementelor din formular.

De exemplu, în formularul nostru avem input-ul de la nume așa:

<input type="text" name="nume" value="" size="30" maxLength="15">

Observați că în câmpul name valoarea acestuia este nume. Acesta se plasează în variabila $_POST, în cazul nostru $_POST['nume'].

În input-ul pentru prenume avem <input type="text" name="prenume" value=""> iar acesta se plasează în $_POST așa: $_POST['prenume'], ... și tot așa.

Observați câmpul value care nu are nimic definit. Nu este nici o greseala, veți învăța mai târziu de ce am lăsat gol acel câmp.

Am cam terminat cu metoda POST, acum haideți să lucrăm și să ne familiarizăm și cu metoda GET.

În același formular din pagina formular.html, numai că în eticheta <form>, în loc de method="post", vom pune method="get".

Apoi în pagina formular.php, în loc de variabilele $_POST, vom pune variabile $_GET.

În caz că nu ați înteles, deschideți pagina formular.html, modificați linia

<form action="formular.php" method="post"> în <form action="formular.php" method="get">

Apoi deschideți pagina formular.php și modificați în:

Observați că rezultatul este același în pagina web, numai că informațiile formularului sunt postate și în adresa din browser (url) sub forma: http://localhost/formular.php?nume=ciobanu&prenume=andrei&varsta=peste16& parola=altaparola&Trimite=Trimite

De recomandat este să folosiți metoda POST, pentru că este mult mai sigură.

Exemplu 2:
Formularul (form.html)


Nume:
Prenume:
Virsta:

Sex:
Masculin
Feminin

Limbi cunoscute:
L.Română
L.Rusă
L.Engleza
L.Franceza

Universitatea absolvită:

Comentarii:



Scriptul (form.php)care preia datele din formular pentru afișare:

Nu orice dată introdusă în formular poate fi acceptată și prelucrată de scriptul apelat din pagina Web cum ar fi un cîmp necompletat, sau informații care nu respectă formatul specificat (de exemplu cel al poștei electronice). De aceea, este necesară validarea datelor înainte ca acestea să fie prelucrate și eventual stocate în tabelele componente ale bazelor de date aflate pe server. Validarea datelor care sunt trimise serverului Web se poate face în două moduri:

  • Validare pe calculatorul client, înainte ca datele să fie trimise serverului; validarea se poate realiza prin intermediul unui script scris într-un limbaj de programare pentru client (JavaScript și VBScript);
  • Validare pe calculatorul server, în acest caz, validarea se realizează după ce datele au ajuns pe server, dar înainte de prelucrarea și utilizarea lor efectivă (introducerea lor într-o bază de date, de exemplu), și se face de către o secvență de cod care poate să facă parte chiar din scriptul apelat.

Validarea la client are avantajul că reduce încărcarea serverului. Pe de altă parte, dacă validarea presupune compararea datelor introduse de client cu datele stocate într-o bază de date, operațiune necesară la logare de exemplu, este clar că aceasta nu poate fi făcută decît pe server.

Exerciții:

1. Scrieți codul PHP care va crea calculatorul simplu ce va îndeplini funcțiile de bază, cum ar fi adunarea, scăderea, împărțirea, înmulțirea și de asemenea pătratul unui număr și rădăcina pătrată dintr-un număr.

2. Scrieți codul PHP care va prelua datele dintr-un formular și le va salva într-un fișier text.

Validarea datelor din formular trimise serverului

Pentru a fi siguri ca utilizatorul a completat cîmpurile trebuie să adăugăm script-ului partea de verificare.

Exemplu: folosim același formular dar adăugăm partea de verificare

Partea de verificare poate avea mai multe condiții simultane.

Exemplu: Același formular dar partea de verificare are doua condiții legate prin operatorul OR sau ||

Validarea selectării elementelor input de tip buton radio și checkbox, precum și a elementului select se face prin intermediul utilizării funcției isset(). Această funcție întoarce valoarea True dacă variabila transmisă ca argument există.

Exemplu: Preluarea valorii unui control radio

radio.html

radio.php

Exemplu: Preluarea valorii unui control checkbox

checkbox.html

checkbox.php

Funcția empty() - verifică dacă o anumită variabilă are o valoare diferita de 0, respective de un șir fără conținut. Dacă returnează TRUE, variabila nu are valoare, în caz contrar va returna FALSE. Funcția empty() – reprezintă opusul lui isset().

Acesta este scriptul pentru verificarea completării tuturor cîmpurilor unui formular:

Functia is_numeric() returnează TRUE dacă variabila trimisă are o valoare numerică validă, FALSE în caz contrar.

Exemplu:

Expresii regulate

O expresie regulată este o secvență de caractere care formează un model de căutare. Când căutați date într-un text, puteți utiliza acest model de căutare pentru a descrie ceea ce căutați.

O expresie regulată poate fi un singur caracter sau un model mai complicat.

Expresiile regulate pot fi folosite pentru a efectua toate tipurile de operații de căutare și înlocuire a textului.

În PHP, expresiile regulate sunt șiruri de caractere compuse ce reprezintă un șablon/model(pattern).

Semnificația caracterelor ce formează șablonul

^ - început de șir
$ - sfârșit de șir
* - zero sau mai multe caractere
+ - unul sau mai multe caractere
? - zero sau un caracter
{x,y} - x și y sunt doi întregi reprezentînd limita inferioară și superioară a numărului de caractere necesare. x trebuie întotdeauna definit.
( ) - Secvențe de caractere
| - operatorul OR
. - reprezintă orice caracter
[ ] - orice caracter din intervalul specificat
^ în [ ] - orice altceva decât caracterele din interval

Exemplu de expresie regulată:

^.[a-z]{1,2}_?[0-9]*([1-6]|[a-f])[^1-9]a+$

Exemplul de mai sus se traduce prin:
Un șir care începe cu oricare 2 caractere... ^.
urmat de 1 sau 2 litere minuscule... [a-z]{1,2}
urmat de un underscore opțional... _?
urmat de zero sau mai multe cifre... [0-9]
urmat de fie un număr între 1 și 6 sau o literă minusculă cuprinsă între a și f... *([1-6]|[a-f])
urmat de 2 caractere care nu sunt cifre... [^1-9]
urmat de unul sau mai multe litere "a" la sfîrșitul șirului... a+$

Echivalențe:

* - {0,}
+ - {1,}
? - {0,1}

Funcții pentru expresii regulate

PHP oferă o varietate de funcții care vă permit să utilizați expresii regulate. Funcțiile preg_match(), preg_match_all() și preg_replace() sunt unele dintre cele mai frecvent utilizate:

Funcția

Descrierea
preg_match() Returnează 1 dacă modelul a fost găsit în șir și 0 dacă nu
preg_match_all() Returnează de câte ori a fost găsit modelul în șir, care poate fi, de asemenea, 0
preg_replace() Returnează un șir nou în care modelele potrivite au fost înlocuite cu un alt șir

Forma simplă a funcției preg_match() preia două argumente: un șir care conține o expresie regulată și un șir subiect.

Exemplu: Validarea adresei de e-mail introduse în formular utilizând funcția preg_match().

Baze de date în aplicații web

Bazele de date sunt folosite pentru stocarea informațiilor în vederea furnizării ulterioare în funcție de solicitarea primită.

Cel mai popular sistem de baze de date folosit cu PHP este MySQL.

MySQL este un sistem de baze de date funcțional independent.

În PHP există funcții pentru toate operațiile executate asupra bazelor de date MySQL.

Administrarea bazelor de date

Administrarea MySQL se poate face din linie de comandă sau folosind browser-ul și accesînd aplicația numită PHPMyAdmin scrisă în PHP.

Cele mai uzuale operații cu bazele de date sunt:

Comanda

Semnificatie

CREATE

creează o bază de date sau un tabel

DROP

șterge o bază de date sau un tabel

INSERT

adaugă înregistrări într-un tabel

DELETE

șterge înregistrari dintr-un tabel

UPDATE

updatează înregistrarile dintr-un tabel

SELECT

selectează un tabel

ALTER

alterarea unui tabel

În MySQL spațiul alocat pe discul serverului este funcție de tipul de date. Câteva din tipurile de date folosite in bazele de date MySQL sunt:

Tip

Mărime

Descriere

CHAR(lungime)

lungime bytes

Un câmp cu lungime fixă de la 0 la 255 de caractere. Acceptă o valoare inițială.

VARCHAR(lungime)

lungime + 1 or 2 bytes

Câmp cu lungime variabilă de la 0 la 65,535 caractere. Acceptă o valoare inițială.

TINYTEXT

lungime + 1 bytes

Un șir cu lungime maximă de 255 characters

TEXT

lungime + 2 bytes

Un șir cu o lungime maximă de 65,535 caractere. Nu poate defini o valoare inițială.

MEDIUMTEXT

lungime + 3 bytes

Un șir cu o lungime maximă de 16,777,215 caractere

LONGTEXT

lungime + 4 bytes

Un șir cu o lungime maximă de 4,294,967,295 caractere

Stocare numere

Aceste tipuri de date reprezintă numere în diferite forme.

TINYINT(lungime)

1 byte

Interval de la –128 la 127. Sau de la 0 la 255 unsigned

SMALLINT(lungime)

2 bytes

Interval de la –32,768 la 32,767. Sau de la 0 la 65,535 unsigned

MEDIUMINT(lungime)

3 bytes

Interval de la –8,388,608 la 8,388,607. Sau de la 0 la 16,777,215 unsigned

INT(lungime)

4 bytes

Interval de la –2,147,483,648 la 2,147,483,647

BIGINT(lungime)

8 bytes

Interval de la –9,223,372,036,854,775,808 la 9,223,372,036,854,775,807. Sau de la 0 la 18,446,744,073,709,551,615 unsigned

FLOAT(lungime, decimals)

4 bytes

Număr mic cu virgulă (cu zecimale). Deoarece PHP va formata numerele în funcție de calcule, se recomandă să folosești FLOAT fără parametri optionali.

DOUBLE(lungime, decimals)

8 bytes

Număr mare cu zecimale

DECIMAL(lungime, decimals)

lungime + 1 or 2 bytes

Un tip DOUBLE care permite un număr fix de zecimale. Înainte de MySQL 5.0.3, tipul de date DECIMAL a fost stocat ca un șir, ca să nu poată fi folosit cu funcții SQL, cum ar fi SUM()

Stocare dată și timp

MySQL stochează data într-un singur format: YYYY-MM-DD

DATE

3 bytes

O dată stocată ca YYYY-MM-DD. Intervalul este de la 1000-01-01 la 9999-12-31

DATETIME

8 bytes

Data și ora, afișat în format YYYY-MM-DD HH:MM:SS

TIMESTAMP

4 bytes

Un timestamp (de obicei generat automat de calculator). Poate conține valori ce reprezintă date de la începutul lui 1970 pana in Januarie 2038. Coloanele TIMESTAMP sunt afișate în același format ca și coloana DATETIME.

TIME

3 bytes

Ora în format HH:MM:SS

Stocare liste predefinite

MySQL te lasă să stochezi două tipuri de liste predefinite (pot fi vazute ca echivalente pentru radio butonul și caseta de verificare).

ENUM

1 or 2 bytes

Acest tip de coloană stochează o singură alegere din lista predefinită, fiecare coloana poate avea una din mai multe valori posibile

SET

1, 2, 3, 4, or 8 bytes

Aceast tip de coloană stochează zero sau mai multe înregistrări din lista predefinită. Ca si ENUM, cu excepția că fiecare coloană poate avea mai mult de o valoare din mai multe valori posibile, sau mai multe înregistrari dintr-o listă predefinită. Lista poate conține cel mult 64 de înregistrări.

Stocare date binare

Stochează date binare, ca imaginile.

TINYBLOB

Pâna la 255 bytes

BLOB

Pâna la 64kB

MEDIUMBLOB

Pâna la 16MB

LONGBLOB

Pâna la 4GB


- Parametri (lungime, decimal) sunt opționali, dar pentru motive de performanță, ar trebui specificați pentru a restrictiona câtă informatie sa fie stocata in oricare din coloane. Bazele de date sunt de obicei mai rapide cand lucreaza cu coloane care au marimea fixata.
- Foloseste VARCHAR pentru elemente de text scurte si TEXT pentru cele mai lungi.
- Foloseste DECIMAL pentru a stoca valori pt. bani.
- Pentru data si ora, este indicat sa folositi TIMESTAMP daca doriti sa inregistrati in acel camp un punct fix in timp (de exemplu data cand o inregistrare a fost introdusa in baza de date). Folositi DATETIME daca data/ora pot fi setate si schimbate arbitrar.
- La tipul TIMESTAMP data si ora este setata automat cu timpul curent cand se face INSERT sau UPDATE, daca nu se specifica o valoare pentru acel camp.
- Nu este o buna idee sa folosesti date binare. Solicita prea mult baza de date, si nu se pot afisa imagini direct din baza de date.

Pentru ca baza de date să fucționeze mai bine coloanelor li s-au adaugat modificatori de coloana.

Tipul de date intregi incep de la valori negative la pozitive. Daca se adauga optiunea UNSIGNED, care este un modificator de coloana, nu vor mai fi valori negative ci vor incepe de la 0.

Alti modificatori sunt:
AUTO_INCREMENT functioneaza cu orice tip intreg. La fiecare rand nou adaugat in baza de date numarul asociat va fi incrementat.
NULL înseamna fără valoare (diferit de spatiu sau zero).
NOT NULL inseamna ca orice inregistrare va fi considerata ceva.
PRIMARY KEY este rolul primei coloane din tabel, totodata reprezentand elementul de referinta pentru fiecare linie.

Utilizarea extensiei MySQLi

PHP a anunțat în 2011 că extensia MySQL va fi depreciată începând cu versiunea PHP 5.5, urmând să fie scoasă din funcție mai apoi. În locul acestei extensii ni se oferă 2 alternative:

  1. MySQLi (‘i’-ul din coadă vine de la ‘improved’)
  2. PDO (PHP Data Objects).

Modificarea unui proiect vechi din MySQL în MySQLi sau PDO poate fi destul de greu și deci nu trebuie să mai scriem proiecte noi folosind vechea extensie.

În urma acestei modificări avem și anumite avantaje. De exemplu, PDO este orientat pe obiecte, iar MySQLi vine cu suport atât pentru stilul procedural de programare cât și pentru stilul orientat pe obiecte. Ambele vin cu suport pentru prepared statements, tranzacții, și așa mai departe. Și o să vă întrebați “Dar ce îmi trebuie mie prepared statemenets?”, împortant este că aceste prepared statements vă protejează aplicația împotriva bine cunoscutului procedeu SQL Injection.

Și acum mă veți întreba “Până la urmă eu ce trebuie să folosesc? MySQLi sau PDO?”. Răspunsul scurt ar fi acesta: “Pe care vrei”. Mie îmi place să folosesc MySQLi, dar dacă aveți nevoie de suport pentru mai multe tipuri de baze de date cum ar fi: PostgreSQL, SQLite, MySQL, Oracle, ODBC, MS SQLServer & Azure, Firebird, Informix, IBM DB2, Sybase, Cubrid, 4D - PDO este soluție ideală.

Documentația PHP descrie MySQLi ca fiind opțiunea preferată recomandată de MySQL pentru proiecte noi.

În continuare am să arăt ambele stiluri de programare utilizînd extensia MySQLi:

MySQLi procedural

MySQLi obiect orientat

1. MySQLi procedural

Conectarea la MySQL

De câte ori vom lucra cu MySQL va trebui să ne conectam la baza de date folosind o anume sintaxă. Vom salva această secvență de cod cu numele conexiune.php putând fi folosita ulterior în mai multe scripturi utilizând funcția include().

Urmează fieșierul conexiune.php

mysqli_connect() este funcția prin care ne conectam la baza de date cu urmatorii paramatrii: numele serverului, nume utilizator si parola pentru conectarea la baza de date.

Variabila $conexiune va avea o valoarea TRUE sau FALSE functie de rezultatul conectarii la serverul MySQL folosind functia mysqli_connect(), iar in cazul esuarii va afisa mesajul continut de constructia die().

mysqli_select_db este functia care stabileste baza de date la care ne vom conecta, avand ca parametrii numele bazei de date si identificatorul de acces la conexiunea catre serverul MySQL.

In mod similar variabila $database folosind functia mysqli_select_db va afisa in cazul negasirii bazei de date mesajul continut de die.

Puteti modifica variabilele din fisierul conexiune.php in functie de configurarile propriei baze de date:
$hostname = adresa serverului, de cele mai multe ori este localhost dar pentru siguranta intrebati administratorul serverului
$username = username-ul de conectare la baza de date
$password = parola de conectare la baza de date
$database = numele bazei de date

Dupa ce operatiile dorite au fost executate cu baza de date va trebui sa inchidem conexiunea folosind functia mysqli_close() avand ca argument datele de acces la serverul MySQL.

Anterior am salvat intr-un fisier php numele utilizator si parola care poate parea un lucru riscant. Codul php este interpretat de server si doar rezultatul este afisat, deci datele continute nu vor fi afisate in browser vizitatorului.

Crearea tabelelor

Bazele de date contin tabele. Aceste tabele sunt similare cu cele din HTML continand rinduri si coloane. Fiecare diviziune se numeste celula sau camp si are anumite propritati.
Fiecare tabel din baza de date are un nume sau titlu.
Fiecare coloana din tabel are un nume sau titlu.

Sintaxa pentru crearea tabelului este:

Coloanele vor fi separate prin virgula iar fiecare coloana va avea un nume si tip.

Pentru a crea un tabel mai intai includem in script fisierul anterior conexiune.php de conectare la baza de date si apoi folosim functia CREATE TABLE.

NOTA: In urmatoarele exemple nu voi mai mentiona ca includ acest fisier dar se va subintelege acest lucru de cate ori voi face o operatie cu baza de date.

Funția mysqli_query este folosită pentru interogarea unei baze de date. Parametrii funției sunt: identificatorul de acces la baza de date și cererea emisa serverului MySQL.

Exemplu: Creăm tabelul elevi cu 3 coloane. Prima coloană id este de tip int cu lungimea de până la 3 cifre, a doua coloană nume este de tip varchar cu lungimea de până la 20 de caractere iar a treia coloană prenume este de tip varchar cu lungimea de până la 40 de caractere.

Urmează fieșierul create.php

Functie de valoarea mysqli_query este afisat succesul sau insuccesul crearii tabelului.

Inserarea datelor

INSERT este comanda pentru introducerea datelor in baza de date. Cel mai frecvent mod de introducere a datelor este preluarea lor dintr-un formular adecvat structurii bazei de date.

Sintaxa pentru introducerea datelor in tabelul bazei de date este:

Exemplu: introducem date intr-un formular cu 2 cîmpuri nume si prenume şi apoi cu scriptul insert.php datele se introduc in baza de date.

Urmează fieșierul adaugare.html

Urmează fieșierul insert.php

In functie de valoarea mysqli_query este afisat un mesaj privind introducerea datelor in tabel.

Am discutat ca asociem un nume (name) fiecarui camp din formular. La apasarea butonului de trimitere datele sunt preluate de un script care poate identifica datele functie de campul in care au fost introduse.

In exemplul de mai sus datele introduse in campul nume din formular sunt preluate folosind variabila $_POST (pentru ca metoda folosita in formular a fost POST).

Selectarea datelor

Proprietatea SELECT poate fi utilizata intr-o comanda mysqli_query pentru a selecta anumite informatii din tabelul bazei de date.

Sintaxa pentru selectarea datelor din tabelul bazei de date este:

Pentru a afisa fiecare rand din tabel se foloseste o bucla while si comanda mysqli_fetch_row.

Exemplu: Afișarea tuturor întregistrărilor din tabelul elevi

Urmează fieșierul select.php

Datele au fost afisate fiecare intr-o celula a unui tabel.

Folosind functia mysqli_num_rows($sql) putem afla numarul de linii continute de baza de date.

Exemplu: Acelasi exemplu plus numarul de linii al bazei de date

Urmează fieșierul select1.php

Exemplu: Căutarea în baza de date după o anumită înregistrare folosind clauza WHERE.

Urmează fieșierul cautare.php

Urmează fieșierul where.php

Condiționale

Condiționalele sunt operatori care ne permit să particularizăm interogarea bazei de date.

Operator

Semnificatie

=

egalitate

<

mai mic

>

mai mare

<=

mai mic sau egal

>=

mai mare sau egal

!=

diferit de

IS NOT NULL

are o valoare

IS NULL

nu are valoare

BETWEEN

in interiorul unui domeniu dat

NOT BETWEEN

in afara unui domeniu dat

OR

una din cele doua ecuatii este adevarata

||

una din cele doua ecuatii este adevarata

AND

amandoua ecuatiile sunt adevarate

&&

amandoua ecuatiile sunt adevarate

NOT

amandoua ecuatiile sunt false

!

amandoua ecuatiile sunt false

Exemplu: Cautam in baza de date folosind doua campuri obligatorii (AND, &&)

Urmează fieșierul where1.php

Operatorii LIKE și NOT LIKE

Dacă dorim să facem o căutare mai generală în baza de date, introducând doar câteva caractere, putem folosi operatorii LIKE sau NOT LIKE. Caracterul _ indică că rezultatul va conține încă un caracter iar % înlocuiește zero sau mai multe caractere. Acestea pot fi adaugate la început, la sfârșit sau în ambele părți.

Exemplu: Căutare generală folosind operatorul LIKE și caracterul % la început și la sfârșit

Urmează fieșierul cautare2.php

Urmează fieșierul where2.php

Modificarea datelor înregistrate

Putem modifica valoarea unei inregistrari din baza de date pentru un anume id cu urmatoarea sintaxa:

Cunoscand valoarea identificatorului id al unei inregistrari putem actualiza o inregistrare in baza de date, dar mai inainte trebuie sa afisam inregistrarile pentru a selecta care se potrivesc solicitarilor noastre.
Primul fisier va afisa sub forma unui formular fiecare inregistrare din baza de date. Campurile formularelor sunt completate cu valorile corespunzatoare fiecarei inregistrari, ele putand fi modificate.

Al doilea fisier preia datele modificate si le suprascrie in baza de date.

Exemplu de editare multiplă a datelor

View Download

Ștergerea elementelor dintr-o tabelă MySQL

Stergerea poate fi facuta folosind id-ul inregistrarii dorite cu sintaxa:

Primul fisier va contine un formular prin care introducem datele care vor fi cautate in baza de date.

Al doilea fisier va afisa rezultatul cautarii si un formular in care vom completa id-ul inregistrarii care dorim s-o stergem.

Al treilea fisier preia id-ul dorit si sterge respective inregistrare.

Exemplu de ștergere multiplă a datelor

View Download

Aplicaţie Web care să permită operaţii de listare, updatare, inserare, ştergere (CRUD)

View

2. MySQLi obiect orientat

Fiecare sarcină – conectare, interogare, extragere, ... – reprezintă de fapt o metodă a obiectului mysqli().

Conectarea la serverul MySQL

Înainte de a putea accesa informații din baza de date, trebuie creată o conexiune cu serverul MySQL. Pentru a vă conecta la un server MySQL cu PHP și MySQLi, se creează o instanță de obiect mysqli, cu formula new mysqli(), la care se adaugă datele de conectare.

  - Sintaxa:

- $host - Specifică serverul la care să se conecteze. Dacă adăugați valoarea NULL sau un șir gol "", serverul va folosi valoarea standard: "localhost".
- $user - Specifică numele de utilizator la baza de date MySQL.
- $pass - Specifică parola utilizatorului pentru conectare.
- $db - Opțional. Numele bazei de date care conține tabelele.
- $port - Opțional. Specifică port-ul prin care se face conectarea la serverul MySQL, standard este 3306

Închiderea conexiunii

Conexiunea va fi închisă automat când scriptul se termină. Se recomandă totuși să închideți conexiunea mai devreme, când scriptul nu o mai folosește. Acest lucru va elibera memoria folosită de conexiune. Pentru a închide o conexiune se folosește metoda close() din clasa MySQLi.

  - Sintaxa:

Exemplu: Conectarea la baza de date colegiu și închiderea conexiunii.

Creare bazei de date cu MySQLi

Pentru a stoca informații în MySQL, este nevoie de o bază de date.

Comanda CREATE DATABASE este folosită pentru a crea o bază de date în MySQL.

  - Sintaxa:

Pentru a face un script PHP să execute instrucțiunile SQL, mai întâi trebuie să creați o instanța de obiect mysqli, care va conține conexiunea la server, apoi folosiți metoda query() din clasa MySQLi.

Exemplu: Crearea bazei de date colegiu.

Creare tabel în MySQL

După ce ați realizat o conexiune la o baza de date, puteți crea tabele în ea. Tabelele sunt elementele care stochează datele în baza de date. Pentru a crea un tabel în MySQL, se folosește comanda CREATE TABLE, apoi se apelează metoda query().

  - Sintaxa:

-tip_date – specifică tipul de date pe care o coloană le poate conține. Pentru o listă cu tipurile de date MySQL.

După "tip_date", se pot specifica și alte atribute opționale pentru fiecare coloană:

  • NOT NULL- Fiecare rând trebuie să conțină o valoare în acea coloană, valorile null nu sunt permise.
  • DEFAULT value - Setează o valoare inițială care este adăugată când nici o altă valoare nu este transferată.
  • UNSIGNED - Poate fi folosit pentru numere, setează să fie folosite doar numere pozitive și zero.
  • AUTO INCREMENT - MySQL va mari automat valoarea din rândul următor cu 1 de fiecare data când o nouă înregistrare este adăugată.
  • PRIMARY KEY - Este folosit pentru a identifica unic rândurile dintr-un tabel. Coloana cu setarea PRIMARY KEY este de obicei un ID numeric, și în general folosită cu AUTO_INCREMENT.

Fiecare tabel ar trebui să aibă o coloană PRIMARY KEY. Valoarea ei trebuie să fie unică pentru fiecare înregistrare din tabel.

Exemplu: Crearea tabelului elevi.

În comenzile SQL este recomandat ca numele de tabel și coloane să fie adăugat între apostrof ` ` (caracterul de lângă butonul cu numărul 1 pe tastatură). Aceasta este sintaxa corectă dar nu este strict necesară.

Selectarea datelor

Instrucțiunea SELECT este utilizată pentru a selecta date din una sau mai multe tabele

  - Sintaxa:

sau putem folosi * caracterul pentru a selecta toate coloanele dintr-un tabel:

Exemplu: Afișarea datelor din tabelul elevi.

Clauza WHERE și LIKE

Pentru a căuta valori specifice, pentru a extrage doar acele înregistrari care respectă anumite criterii, se adaugă o clauză WHERE în interogarea SELECT.

Clauza WHERE este folosită pentru a filtra înregistrările. Se adaugă după numele tabelului.

  - Sintaxa:

conditie - poate fi una sau mai multe expresii condiționale care specifică criteriul de selectare. Aceste expresii condiționale pot folosi operatori de comparație, aritmetici și logici.

Tabelul urmator prezinta operatorii cei mai des folosiți cu WHERE în instructiunile MySQL:

Operator

Semnificație

Exemplu

=

egalitate

WHERE sex = f

<

mai mic

WHERE varsta < 45

>

mai mare

WHERE varsta > 18

<=

mai mic sau egal

WHERE varsta < =45

>=

mai mare sau egal

WHERE varsta >= 18

!=

diferit de

WHERE sex != m

IS NOT NULL

are o valoare

WHERE adresa IS NOT NULL

IS NULL

nu are valoare

WHERE specialitatea IS NULL

BETWEEN

în interiorul unui domeniu dat

WHERE varsta BETWEEN 18 AND 45

NOT BETWEEN

în afara unui domeniu dat

WHERE varsta NOT BETWEEN 18 AND 45

IN

se găsește în lista de valori

WHERE grupa IN(I-1241, I-1242, I-1243, I-1244, I-1245)

||(OR)

una din cele două condiții este adevărată

WHERE varsta>18 || sex=f

&&(AND)

amândouă condiții sunt adevarate

WHERE varsta>18 && sex=f

Exemplu: Căutarea în baza de date colegiu după o anumită înregistrare folosind clauza WHERE.

Exemplu: Căutarea în baza de date după două câmpuri obligatorii

Exemplu: Căutare generală folosind LIKE și caracterul % la început și la sfârșit

Inserarea datelor

Pentru a adaugă înregistrări noi într-un tabel MySQL, se folosește comanda INSERT INTO.

Există două metode prin care o interogare INSERT poate fi scrisă:

1) Prima metodă nu specifică numele coloanelor unde datele for fi introduse, ci doar valorile lor.

În această metoda, trebuie să specificați o valoare pentru fiecare coloana, chiar dacă este NULL. Dacă sunt cinci coloane în tabel, trebuie să adăugați cinci valori, separate prin virgula.

2) Pentru a doua metodă se specifică atât numele coloanei /coloanelor cât și valorile care vor fi introduse:

Aceasta este în general metoda preferată, deoarece puteți adaugă doar coloanele care vor primi valori. Orice coloană căruia nu îi este atribuită o valoare va fi tratată ca NULL (sau îi va fi dată valoarea default, dacă aceasta este definită). Dacă o coloană nu poate avea valoarea NULL (a fost definită ca NOT NULL) și nu are o valoare default, nespecificând o valoare va genera eroare. Dacă o coloană este AUTO_INCREMENT sau TIMESTAMP, nu este nevoie să fie specificată în interogarea SQL, serverul MySQL va seta și adăuga valoarea automat. Pentru ca PHP să execute comenzile SQL, trebuie să folosești metoda mysqli query().

Exemplu: Inserare date în tabelul elevi.

Odată ce formularul a fost transmis, informațiile din acesta sunt folosite pentru a crea o interogare INSERT, care este apoi trimisă către baza de date. Din moment ce query() returnează o valoare de tip Boolean, indicând dacă interogarea s-a desfășurat cu succes sau nu, este posibilă verificarea rezultatului instrucțiunii INSERT și returnarea unui mesaj adecvat.

Modificarea datelor înregistrate

După ce ați adăugat rânduri în tabelul MySQL, puteți să modificați datele înregistrate, folosind comanda UPDATE.

Instrucțiunea UPDATE este folosită pentru a modifica sau actualiza informațiile existente într-un tabel.

 - Sintaxa:

- Clauza WHERE este importantă într-o interogare UPDATE , specifică serverului MySQL care înregistrare sau înregistrări trebuie actualizate. Daca omiteți clauza WHERE, vor fi afectate toate rândurile!

- Comanda UPDATE este trimisa la serverul MySQL cu metoda query() a obiectului mysqli.

Cunoscând valoarea identificatorului id al unei înregistrări putem actualiza o înregistrare în baza de date, dar mai înainte trebuie să afișăm înregistrările pentru a selecta care se potrivesc solicitărilor noastre.

Primul fișier va afișa sub forma unui formular fiecare înregistrare din baza de date. Câmpurile formularelor sunt completate cu valorile corespunzătoare fiecărei înregistrări, ele putând fi modificate:

Exemplu: Modificare date din tabelul elevi.

Al doilea fișier (udated.php) preia datele modificate și le suprascrie în baza de date:

Exemplude editare multiplă a datelor

View

Ștergerea elementelor dintr-o tabelă MySQL

Evident, același lucru poate fi îndeplinit și în cazul altor instrucțiuni de manipulare a datelor. Următorul exemplu îți demonstrează cum să folosești instrucțiunea DELETE pentru a elimina selectiv elemente din tabel.

Exemplu:

De remarcat faptul că am folosit proprietatea affected_rows a obiectului mysqli, care returnează numărul total de rânduri ce au fost afectate de către ultima operație.

Arborele de coduri extensia MySQLi include două funcții adiționale pentru erorile de conexiune, anume mysqli_connect_errno() și mysqli_connect_error(), care conțin numai informații asupra erorilor de conexiune (nu și asupra celor de interogare). Folosește-le pentru a depana erorile din conexiunile tale MySQL, ca în exemplul de mai jos.

Exemplu:

Și, în caz că te întrebai de ce nu am folosit sintaxa pe obiecte pentru cele doua funcții utilizate în script-ul de mai sus, răspunsul este unul simplu: nu se poate. Dacă intervine o eroare în conectarea la server, obiectul mysqli() nu va fi creat, și astfel metodele și proprietățile ce au legătura cu acel obiect nu vor exista. Din acest motiv, pentru a depăna erorile de conexiune din extensia MySQLi, trebuie ca întotdeauna să folosești notații procedurale în detrimentul celor folosite în programarea orientată pe obiecte.

Exemplu de ștergere multiplă a datelor

View

Aplicaţie Web care să permită operaţii de listare, updatare, inserare, ştergere (CRUD)

View

Citirea conținutului unui director

PHP furnizează trei funcții care vă permite să citiți conținutul unui catalog, ca și cum catalogul ar fi un fisier. Aceste functii sunt:
1. opendir() - deschide directorul pentru citire
2. readdir () - citeste o intrare dintr-un catalog
3. closedir() - închide catalogul, eliberînd resursele alocate de functia opendir()

Rezultatul apelarii functiei readdir() este un sir care contine numele urmatorului fisier sau sub-director din catalogul deschis. Functia returneaza FALSE atunci cînd au fost citite toate intrarile din catalog.
Iata un exemplu care prezinta modul de utilizare a acestor functii pentru citirea continutului unui catalog:

Datele de iesire ale exemplului pot fi similare cu cele prezentate mai jos :
style
imgs
lectia
scripts
index.php

- Sau puteti folosi functia scandir($dir). Aceasta preia intr-un Array numele tuturor directoarelor si fisierelor din directorul "$dir". In caz de nereusita returneaza False.

Crearea unui director

Pentru a crea un director, utilizati functia mkdir(), care are urmatoarea forma:
mkdir(nume_dir, mod)

- Unde "nume_dir" este calea sau numele directorului care va fi creat, iar "mod" reprezinta privilegiile care trebuie acordate noului catalog.
In mod normal, prima cifra a argumentului mod trebuie sa fie 0, astfel încît PHP sa-l perceapa ca pe o valoare scrisa în octal. Functia returneaza TRUE daca creeaza catalogul; în caz contrar, returneaza FALSE.

De exemplu, pentru a crea un catalog denumit "lucru" si pentru a-i atribui privilegiile "rwxr-x--x", utilizati functia mkdir() dupa cum urmeaza:

Pentru a modifica numele unui director, puteti folosi functia rename(), care are următoarea formă:
rename(nume_vechi, nume_nou)
Unde "nume_vechi" este numele si calea originala a directorului, iar "nume_nou" este numele nou dorit.

Lucrul cu fișiere

Folosind PHP-ul se pot executa anumite operații asupra fișierelor aflate pe server cum ar fi:
fopen() = deschide fișierul indicat
fclose() = inchide fișierul
fread() = citește conținutul fișierului
fwrite() = scrie în fișier
filesize() = indică dimensiunea fișierului

Deschiderea fișierelor

Sintaxa functiei fopen() este:

param1 = fisierul, calea catre fisier sau adresa fisierului care va fi deschis
param2 = modul in care va fi deschis fisierul, si poate avea valorile:

r = fisier deschis doar pentru citire
r+ = fisier deschis doar pentru citire si scriere
w = fisier deschis doar pentru scriere
w+ = fisier deschis pentru citire si scriere iar daca nu exista fisierul il creza
a = fisier deschis pentru adaugare la sfarsit
a+ = fisier deschis adaugare la sfarsit iar daca nu exista fisierul il creza
t = fisier deschis in mod text
b = fisier deschis in mod binar
sau combinatii ale acestora.

Citirea fisierelor

Sintaxa functiei fread() este:

variabila $handle va fi folosita ulterior si in alte functii.

Scrierea in fisiere

Sintaxa functiei fwrite() este:

Verificarea drepturilor de acces asupra fisierului

Sintaxa functiei is_writable este:

returneaza TRUE daca se poate si FALSE daca nu se poate scrie in fisier

Inchiderea fisierului

Sintaxa functiei fclose() este:

Folosind aceste functii de baza putem incerca cateva exemple simple.

Exemplu: se verifica dreptul de scriere in fisier. Primul pas este crearea fisierului proba.txt apoi se verifica exemplul care va returna mesajul Acces interzis scrierii in fisier. Se modifica drepturile asupra fisierului. Se verifica iar exemplul care va returna mesajul Acces permis scrierii in fisier.

Exemplu: adaugam exemplului anterior verificarea deschiderii fisierului.

Exemplu: adaugam exemplului anterior scrierea in fisier si tiparirea continutului sau

Afișarea unui colaj de imagini


Exerciţii:

  1. Creati un folder pe discul D:\ , in el creati un fisier cu numele exemplu.txt , deschideti fisierul dat si scrieti un text in el , salvati si afisati continutul din fisier.
  2. Creati un fisier care contine un text, afisati numarul de cuvinte din acest text.
  3. Creati un fisier exemplu.txt cu ajutorul parametrului w+ si inscrieti in el un text dupa care inchideti fisierul si ii atribuiti parametrul readonly (r).
  4. Creati 2 fisiere exemplu1.txt si exemplu2.txt in care sunt inscrise cate un sir de caractere, creati al 3-lea fisier exemplu3.txt in care concatenati continutul din fisierele create anterior. si afisati continutul din exemplu3.txt.
  5. Creati un fisier exemplu1.txt in care scrieti un vector din 5 elemente, sortati vectorul si inscrieti intr-un alt fisier exemplu2.txt
  6. Creati un fisier in care sa contina un text , afisati in browser cate litere "a","b","c",miniscule si majuscule se contin in fisierul dat.
  7. Creati un fisier exemplu1.txt in care inserati un tablou bidimensional 3x3, salvati si afisati elementele de pe diagonala din acest tablou.
  8. Creati un fisier care contine un text , creati un al doilea fisier in care cuvintele separate prin spatiu din primul fisier apar ca cuvinte din rand nou in al 2-lea fisier. exemplu (Ion merge la scoala )->primu fisier.
    Ion
    merge
    la
    scoala -> al doilea fisier.
  9. Creati un fisier care contine un text si intr-un al doilea fisier inscrieti acelasi text crescator dupa marimea cuvintelor .

Creare imagini cu PHP

Pe langa crearea de cod de tip text (HTML, XML, ...), PHP poate fi folosit si pentru crearea si manipularea de imagini cu diferite formate (GIF, PNG, JPEG, WBMP si XPM).

PHP are implemetat cateva functii pentru lucru cu informatii legate de imagini, cum ar fi lungimea, latimea sau extensia imaginii. Pentru crearea de noi imagini sau manipularea celor existente este necesar sa aveti instalat in PHP o librarie GD cu functii pentru imagini.

- Daca folositi WampServer sau Xampp, acestea au deja incluse librarii GD.

Puteti afla informatii despre libraria GD instalata folosind functia gd_info(), aceasta returneaza o matrice cu informatii despre libraria GD inclusa.

Exemplu:

Crearea imaginilor

Pentru crearea unei imagini cu PHP sunt esentiali urmatorii pasi:

  • Definirea identificatorului de imagine si suprafata de baza a imaginii.
  • Stabilirea culorilor fundalului, formei sau a textului din imagine.
  • Trimiterea datelor de iesire cu imaginea creata.
  • Eliberarea memoriei asociata creeri imaginii.

Cam asta e, pe scurt, partea teoretica, acum sa trecem la practica, voi prezenta pas cu pas un script PHP simplu care va afisa in browser o imagine PNG formata dintr-un dreptunghi cu fundal albastru si in interior un text.

Scriptul este urmatorul:

- Acest script va afisa urmatorul rezultat

Textul din imagine

Sa studiem acest script:
- Pentru inceput am setat variabila "$text" ce contine textul care va fi adaugat in imagine, si variabilele "$height" si "$width" care reprezinta dimensiunile imaginii.
- In continuare avem "$im = imagecreate($width, $height)", functia imagecreate() returneaza un identificator de imagine ce creaza suprafata de baza a imaginii, prelund ca argumente dimensiunile acesteia (in pixeli).

  • Ca alternativa se poate folosi o imagine deja existenta, peste care sa adaugati testul, pentru aceasta se foloseste functia imagecreatefrompng("nume.png") (sau "imagecreatefromjpeg()", "imagecreatefromgif()"; in functie de tipul imaginii), exemplu: $im = imagecreatefrompng("img.png")

- Urmatorul pas este definirea culorii pentru fundal si pentru text, pentru aceasta se foloseste functiaimagecolorallocate(), aceasta returneaza un identificator de culoare care va fi folosit pentru accesarea culorii si preia 4 argumente: primul argument este identificatorul de imagine creat cu "imagecreate()" (in script este in variabila "$im"), urmatoarele trei argumente reprezinta valorile RGB (Red, Green, Blue) pentru stabilirea culorii.
- Pentru adaugarea culorii de fundal se foloseste functia imagefill(), care preia 4 argumente (in script avem "imagefill($im, 0, 0, $fundal);"), argumentele sunt:

  • identificatorul de imagine
  • urmatoarele doua argumente definesc coordonatele X si Y de start pentru umplerea culorii (0, 0)
  • ultimul argument reprezinta identificatorul de culoare folosit (aici cel din variabila $fundal)

- Pentru adaugarea textului in cadrul imaginii se foloseste functia imagestring(), aceasta preia 6 argumente:

  1. identificatorul de imagine
  2. tipul fondului folosit, care poate fi un numar intre 1 si 5, reprezentand fonturi prestabilite ca alternativa se poate folosi functia imageloadfont(), pentru includerea de alte fonturi
  3. al treilea argument reprezinta distanta, in pixeli, fata de marginea din stanga a imaginii
  4. al patrulea argument reprezinta distanta, in pixeli, fata de marginea de sus a imaginii
  5. al cincilea argument reprezinta sirul introdus
  6. ultimul argument este culoarea textului

- Urmatotul pas este trimiterea datelor de iesire pentru afisarea in browser.

  • Pentru aceasta intai scriptul spune browser-ului ca trimite o imagine si nu test sau HTML, se face acest lucru folosind functia header() cu tipul MIME al imaginii "header('Content-type: image/png')". Daca doriti ca imaginea sa fie de tip JPEG (sau GIF) inlocuiti "png" cu "jpeg" (sau "gif"), astfel 'Content-type: image/jpeg'.
  • dupa ce s-au trimis datele pentru "header", se trimit datele imaginii utilizand functia imagepng() (sau "imagejpeg()", "imagegif(); in functie de tipul imaginii") care preia ca argument identificatorul de imagine (in script avem "imagepng($im)")
    • Ca alternativa, imaginea poate fi scrisa intr-un fisier, in loc sa fie afisata in browser o salvati pe server, pentru aceasta se adauga un al doilea parametru la "imagepng()" reprezentand numele fisierului, exemplu "imagepng($im, "img.png")" si nu se mai scrie functia "header()". (trebuie sa aveti permisiuni de scriere pe server)

In final s-a folosit functia imagedestroy() (care foloseste ca argument identificatorul de imagine) pentru eliberarea resurselor de memorie folosite la crearea imaginii.

Utilizarea imaginilor create cu PHP

Deoarece un header poate fi trimis numai o data pentru o pagina, si asta este singura cale de a spune browser-ului ca sunt trimise date de imagine, poate deveni mai dificil cand se doreste crearea si afisarea mai multor imagini cu PHP.

In acest caz:
a) Puteti folosi scriptul pentru a salva imaginea pe server (dupa cum a fost explicat mai sus) si apoi folositi etichete <img> pentru afisarea imaginii
- Exemplu:

- Acest script va afisa urmatorul rezultat

Textul din imagine
_ _ _
Textul din imagine

b) O alta metoda este scrierea intr-un fisier php extern a scriptului care genereaza si afiseaza imaginea, apoi apelati scriptul PHP in atributul src, ca in exemplul urmator:

- Unde "script_img.php" este fisierul PHP care genereaza si afiseaza imaginea

PHP - GD Library

Functiile GD sunt folosite pentru crearea imaginilor. Verificati folosind phpinfo(), ca serverul de gazduire suporta aceste functii, inainte de a le utiliza.
Pentru a insera in paginile web o imagine creata cu functiile din php folositi eticheta img

In urmatorul exemplu vom genera o imagine in format JPEG, cu dimensiunile 200px x 100px, fond verde.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
ImageJPEG ($img, '', 100);
?>

header- declara tipul imaginii
Content-type poate avea valorile:
image/jpeg - pentru JPEG
image/gif - pentru GIF
image/png - pentru PNG
Cu ImageCreate sunt declarate dimensiunile imaginii
Culoarea fondului imaginii este declarata in ImageColorAllocate, prin cele 3 culori de baza R-G-B, in format zecimal (0-255)
ImageJPEG- afiseaza imaginea in browser (pentru GIF se foloseste ImageGIF, iar pentru PNG ImagePNG). Calitatea imaginii generate va fi "best quality" (100).

Adaugam exemplului anterior textul "Proba text", cu caractere albe.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$text = ImageColorAllocate ($img,255,255,255);
ImageString ($img,5,10,10,"Proba text",$text);
ImageJPEG ($img, '', 100);
?>

Proba text

Culoarea fontului este declarata tot cu ImageColorAllocate, similar culorii fondului ImageStringcontine 3 valori numerice si textul continut de imagine. Prima este marimea fontului, urmatoarele 2 sunt distantele in pixeli (coordonatele pe X si pe Y) fata de coltul stanga sus, stabilind pozitia textului in interiorul imaginii.

Cream o linie din punctul (10,90) in punctul (190,90). Referinta coordonatelor este coltul stanga sus.

<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImageLine ($img,10,90,190,90,$col);
ImageJPEG ($img, '', 100);
?>

_________________

Cu ImageLine creăm linia. Cele 4 valori numerice continute reprezinta coordonatele x si y pentru punctul de inceput si de sfarsit al liniei, iar ultima este declarata culoarea.

Ce este World Wide Web?

Inter-rețele și Internet

În lume există milioane de calculatoare. În aceste calculatoare sunt stocate informații. Pentru a putea face schimb de informații, calculatoarele sunt interconectate, formînd rețele de calculatoare.Multe dintre aceste rețele de calculatoare sunt conectate între ele, formînd inter-rețele (rețele de rețele de calculatoare). O rețea de rețele se numește internet („ net" înseamnă în limba engleză „rețea").
Cea mai mare inter-rețea publică (rețea de rețele de calculatoare cu acces public) este rețeaua Internet.

World Wide Web

Există mai multe metode de acces (servicii) la informația stocată pe un calculator prin intermediul rețelei Internet:

  1. FTP (File Transfer Protocol) este serviciul pentru transferul fișierelor;
  2. Telnet este serviciul pentru accesul de la distanță la resursele unui calculator;
  3. Electronic Mail este serviciul de mesagerie electronică;
  4. News este serviciul de știri;

World Wide Web este o altă metodă (serviciu) de acces la informația stocată pe un calculator aflat oriunde în lume.
World Wide Web (pe scurt - WWW) înseamnă în traducere ad-litteram „pînză de păianjen întinsă în lumea întreagă„.
Denumirea evidențiază caracterul planetar al schimbului de informații prin intermediul rețelei Internet.

Tehnologia client-server

World Wide Web-ul utilizează tehnologia client-server, care constă în (vezi figura următoare):
1. Un calculator (clientul) formulează o cerere.
2. Cererea este expediată unui server.
3. Cererea parcurge un mediu pînă la server.
4. Serverul analizează cererea, o execută,formulează răspunsul și îl expediază clientului.
5. Răspunsul parcurge mediul înapoi către client.
6. Clientul recepționează răspunsul la cererea solicitată.

Fig: Tehnologia client-server
Fig: Tehnologia client-server

HTTP

Pentru a comunica intre ele, două calculataore folosesc un sistem de reguli ce formează un protocolServiciul WWW utilizează ca protocol de comunicare între client și server HiperText Transfer Protocol (HTTP), adică Protocolul de Transfer al Hipertextului.

Hipertext

Hipertextul este un text îmbogățit. El conține:text obișnuit; etichete pentru formatarea textului și încapsularea altor tipuri de informații (salturi rapide către alte resurse de informații, sunete, imagini, filme etc). Hipertextul este stocat în fișiere avînd o extensie specială: .htm sau .html

HTML

Un fișier ce conține hipertext este scris într-un limbaj specific numit HiperText Markup Language (HTML), adică Limbajul de Marcare a Hipertextului. HTML este un limbaj care permite inserarea de:

  1. text;
  2. sunete, imagini și filme;
  3. indicatori de prezentare a informației;
  4. legături (link-uri) către alte pagini Web aflate oriunde în lume;
  5. aplicații (programe JavaScript, Java, VRML etc).

Host

Un calculator din Internet se numește host (gazdă).
Pentru a fi identificat în mod unic, calculatorul primește un nume (o adresă), de exemplu, mishu.cnmv.ro

Pachete

Informația care circulă între calculatoare interconectate este încapsulată în pachete. Un pachet conține:

  1. adresa expeditorului și adresa destinatarului;
  2. informația;
  3. numele aplicației client care a formulat cererea și numele aplicației de pe server care va primi cererea spre rezolvare. Pachetul este lansat în rețeaua Internet.

TCP/IP

Rețeaua Internet dispune de mijloace de dirijare a pachetelor astfel încît acestea să ajungă la destinație.

- Un astfel de mijloc de dirijare a pachetelor este Internet Protocol (IP), adică Protocolul Internet. Rețeaua Internet dispune de mijloace de corecție a erorilor de transmitere a pachetelor.
-Un astfel de mijloc de corecție este Transfer Control Protocol (TCP), adică Protocolul de control al transferului.

Pagina Web

în orice calculator informația este stocată în unități numite fișiere.
Aceste fișiere conțin;

  1. text;
  2. programe;
  3. imagini;
  4. filme;
  5. sunete etc.

Pentru WWW sunt importante anumite fișiere speciale, numite și pagini Web.Acestea au extensia .htm sau .html.

Browser

Paginile Web sunt vizualizate pe calculatorul client prin intermediul unei aplicații speciale numite browser. Browser-ul permite schimbarea paginii vizualizate prin intermediul:

  1. unei ferestre speciale, numită Addresss;
  2. meniului File, Open, Browse;
  3. legăturilor afișate în pagina Web. Cele mai utilizate browsere sunt:
  4. Netscape Communicator;
  5. Internet Explorer;
  6. HotJava.

Site Web

O mulțime organizată de pagini Web formează un site Web. în WWW, clientul solicită pagini Web de la un site Web.

httpd

HiperText Transfer Protocol Demon (httpd) este o aplicație care se execută pe serverul Web pentru a prelucra cererile de pagini Web recepționate de acesta de la clienți.

Home Page

Home Page (pagina gazdă) este o pagină din site-ul unei organizații care:
* este în mod uzual primă pagină accesată din site;
* este o pagină de prezentare a organizației;
* oferă modul cel mai eficient de explorare a informațiilor aflate în site.

Server Web

Un server Web este un calculator care adăpostește un Site Web și care este capabil să răspundă la cereri de pagini Web din partea unui client.
Pentru a putea răspunde permanent cererilor Web, un calculator trebuie să ruleze permanent o aplicație specială: httpd. Cele mai întîlnite servere Web sunt:
-Apache Server;
-Microsoft Web Server;
-Oracle Web Server.

URL

Un utilizator al serviciului WWW poate solicita vizualizarea prin intermediul browse-rului a unei pagini Web care poate fi localizată pe un calculator aflat oriunde în lume. O pagină Web este unic» deteiminată prin adresa URL asociată.
Uniform Resource Locator (URL) înseamnă Identificator Universal al Resurselor în Internet. Un exemplu de URL este: http: //www.cnmv.ro/index.html

  1. Adresa URL a paginii curente vizualizate de browser apare în fereastra Address.
  2. Un URL precizează:
  3. metoda de acces la pagină - de exemplu: http;
  4. calculatorul pe care se află - de exemplu: www.cnmv.ro;
  5. numele paginii - de exemplu: index.html.

Avantajele serviciului World Wide Web

Paginile Web au următoarele caracteristici:

  1. sunt multimedia, adică ele conțin informații sub formă de text, imagini, sunete, filme etc;
  2. sunt interactive, adică răspund la cererile utilizatorului;
  3. sunt independente de platforma hardware și software, adică se văd la fel pe orice calculator, avînd instalat orice sistem de operare și utilizînd orice browser.

Crearea unei pagini Web

Crearea unei pagini Web presupune:
1. Editarea fișierului HTML utilizînd:

  1. un editor de texte obișnuit (Notepad, Wordpad, Word, WordPerfect etc.)
  2. un editor de texte dedicat (Netscape Composer, HotMetal etc.)

2. Salvarea paginii Web cu extensia .html sau .htm înir-un site Web;
3. Rezolvarea referințelor conținute în pagina Web (legături, imagini, sunete, filme, aplicații Java etc).

Pagina Web astfel creată poate fi vizualizată prin intermediul unui browser.

Greșeli de web design

În aceasta temă vom vorbi despre greșelile uzuale pe care le fac designerii web, fară a atinge însă problema folosirii stilurilor CSS in locul tabelelor.
Am putea face chiar un top 10 al celor mai frecvente greșeli, fară a da însă exemple sau a aminti firme de web design de renume care fac subiectul acestei teme.

1.Crearea de pagini web aglomerate

O pagină web trebuie să ofere un balans între spațiul ocupat de informații (text, imagini, meniuri) si spațiul alb sau spațiul negativ (fundal, distantele dintre paragrafe si alte elemente ale paginii, locurile goale). O pagina web trebuie sa arate aerisit, ușor de parcurs cu vederea, simpla. Vizitatorul trebuie sa poată citi printre rînduri si sa găsească ușor informațiile care îl interesează. Soluția pentru a evita această greșeală este să folosiți "padding" si "margin" cînd creați stilul paginii, pentru a spatia coloanele, paragrafele, imaginile de text, etc.
Se pare însă că tendința în web design-ul romanesc este exact inversa: paginile sunt aglomerate, textul este înghesuit în imagini pentru a face loc publicității online. Sunt greu de parcurs, obositoare si lungi.

2.Informațiile sunt greu de găsit in pagina web

Aceasta este o greșeală frecvent întîlnită pe multe pagini. Vizitatorul intra pe un site cu un scop: să se informeze. Daca în primele secunde după intrarea pe site el nu va găsi informațiile promise (prin titlu, prin URL, prin descrierea din pagină care face referință la site-ul respectiv) va părăsi site-ul. Simplu.
Elementele importante ale unei pagini web trebuiesc scoase în evidență. Porțiunile din text care oferă esența informațiilor trebuiesc de asemenea scoase în evidentă.

3.Linkurile sunt greu de găsit în pagina web

Linkurile sunt cele mai importante elemente ale unei pagini din punctul de vedere al unui vizitator. Daca acestea nu pot fi găsite ușor, vizitatorul poate renunța la navigarea pe site-ul respectiv. Exista doua principii de care trebuie sa ținem cont atunci cînd realizam o pagina web:

  1. linkurile trebuiesc deosebite de restul textului prin folosirea unei alte culori sau a sublinierii;
  2. trebuie evitat ca textul care nu este link sa arate ca un link (aceeași culoare sau subliniere), altfel vizitatorul se va simți păcălit.

4.Folosirea unui format de imagine incorect

Formatele standard pentru imagini folosite pe site-urile web sunt JPEG, PNG sau GIF. Folosirea altor formate pot duce la încărcări grele ale paginii web. Există însă și exemple de pagini care deși folosesc aceste formate corecte, timpii de încărcare sunt foarte mari pentru imagini. Problemele sunt diverse, însă cele mai comune sunt imaginile nepregătite web (redimensionate și salvate pentru web) sau folosirea de imagini de dimensiuni improprii ca fundal pentru elementele paginii.

5.Titlul paginii este lasat cel implicit

In Dreamweaver titlul implicit al unei pagini este "Untitled Document". Omiterea schimbării titlului este o greșeală de neiertat chiar și pentru cel mai neexperimentat web designer. Credeți că nu există designeri care să facă această greșeală? Dați o căutare pe Google după cuvîntul cheie "Untitled Document" si veți rămîne surprinși să găsiți aproape 30 de milioane de rezultate.

6.Meniu greu de folosit sau de găsit

Există o tendință în web design de a ascunde meniul în elemente grafice din pagină sau în elemente din cadrul unei imagini. Deși aceasta tendință este interesantă din punct de vedere artistic, din punct de vedere funcțional nu este potrivită. Meniul trebuie sa fie ușor accesibil vizitatorului, singura opțiune care se acceptă la un număr mare de pagini fiind meniurile de tip "drop-down".

7.Textul are mărimea fixă

Vizitatorul ar trebui să poată redimensiona textul după cum dorește. Definirea textului ca mărime în pixeli va păstra dimensiunea acestuia fixă. Soluția ar fi ca definirea să se facă utilizînd atributul EM.

8.Scopul site-ului nu este clar

în primele secunde după încărcarea paginii web vizitatorul trebuie să își dea seama despre ce este vorba în pagina pe care a ajuns. Acest lucru poate fi obținut prin folosirea unor titluri și subtitluri sugestive pentru paragrafe. Există însă destule pagini web pentru care trebuie să pierzi timp ca vizitator doar pentru a afla despre ce sunt acestea.

9.Folosirea unor culori stringente

Culorile stringente, sau combinațiile de culori nepotrivite pot obosi ochiul uman, sau pot distrage atenția de la informațiile cu valoare din pagina web. Doua lucruri importante trebuie avute în vedere la alegerea setului de culori pentru site: combinația trebuie sa fie plăcuta ochiului si sa nu utilizeze mai mult de 3 culori de baza (restul fiind doar nuanțe ale acestora).

10.Integrarea reclamelor în conținutul paginii

Reclamele și publicitatea online trebuie menținute separat de conținutul informativ al paginii. Vizitatorul trebuie să își dea seama ușor care sunt banerele sau zonele cu publicitate online, si care sunt imaginile sau linkurile care fac parte din conținutul paginii. Amestecarea reclamelor cu conținutul va deruta vizitatorul si îl va face să părăsească site-ul.

Acestea ar fi principalele greșeli făcute de web designeri. Exista însă și cazuri speciale, excepții, și acestea nu pot fi considerate greșeli. Spre exemplu, site-urile de fotografie pot încărca imagini in format TIFF sau BMP din diverse motive: exemple, teste, etc. Bineînțeles ca nu putem considera ca designerul a făcut o greșeală ce trebuie corectată.