PHP (skriptovací jazyk): Rozdiel medzi revíziami

Smazaný obsah Přidaný obsah
Addbot (diskusia | príspevky)
d Bot: Odstránenie 93 odkazov interwiki, ktoré sú teraz dostupné na Wikiúdajoch (d:q59)
rozšírenie
Riadok 29:
== História ==
PHP bolo pôvodne navrhnuté ako niekoľko [[skriptovací jazyk|skriptov]] v jazyku [[Perl]], neskôr prepísaných do jazyka C. Autorom bol [[Rasmus Lerdorf]] v roku [[1994]]. O rok [[1995|neskôr]] svoje skripty zverejnil pod názvom "'''P'''ersonal '''H'''ome '''P'''age Tools". Kombináciou s ďalším jeho programom Form Interpreter vzniklo PHP/FI. [[Zeev Suraski]] a [[Andi Gutmans]], dvaja [[Izrael|izraelskí]] vývojári prepísali [[syntaktický analyzátor]] (parser) v roku [[1997]] na novšiu verziu, ktorá sa stala základom PHP 3. Krátko po zverejnení verzie PHP 3 bola spustená aj oficiálna stránka. V roku [[1999]] sa Suraski a Gutmans opäť pustili do prepísania jadra, už pod názvom [[Zend engine]]. Založili spoločnosť [[Zend Technologies]], ktorá sa odvtedy podieľa na ďalšom vývoji PHP. V máji [[2000]] bolo vydané PHP 4, ktorého jadro tvoril nový Zend Engine 1.0. [[13. júl]]a [[2004]] bola vydaná verzia PHP 5, s jadrom „Zend Engine II“, obsahujúca nové rysy ako napr. vylepšená podpora [[Objektové programovanie|objektovo orientovaného programovania]], PHP Data Objects extension a ďalšie.
 
== Použitie ==
PHP je skriptovací jazyk, ktorý je špeciálne navrhnutý na tvorbu web stránok bežiacich na webovom servery. Všetok PHP kód je vykonávaný pomocou PHP runtime aby dynamicky vytvoril obsah na webovej stránke. Taktiež môže byť využitý na skriptovanie z príkazového riadku alebo klientovo orientované aplikácie s grafickým rozhraním. PHP môže byť nasadené na väčšine Webových serverov, operačných systémov a platformách a môže sa používať v spojení s mnohými relačnými databázami. Mnoho webhostingov ponúka podporu PHP pre svojich klientov. PHP je zadarmo dostupné a PHP Group poskytuje úplný zdrojový kód pre používateľov, aby ho mohli dotvárať, meniť a rozširovať pre ich vlastné použitie.
PHP sa primárne správa ako filter, ktorý má na vstupe súbor, alebo prúd dát obsahujúci text a/alebo PHP inštrukcie a na výstupe prúd dát najčastejšie vo forme [[HTML]]. Od PHP verzie 4 PHP parser kompiluje vstup aby vyprodukoval bajt kód pre spracovanie pomocou [[Zend Engine]], ktorý poskytuje zvýšený výkon v porovnaní s jeho interpretermi v minulosti.
Aj keď PHP bolo pôvodne vytvorené na tvorbu dynamických webových stránok, v súčasnosti sa primárne zameriava na skriptovanie na strane servera a je podobné ostatným serverovo orientovaným skriptovacím jazykom, ktoré klientovi poskytujú dynamický obsah z webového servera. Medzi tieto jazyky patrí napríklad [[ASP .NET]] od spoločnosti [[Microsoft]], [[JavaServer Pages]] od [[Sun Microsystems]] alebo [[mod_perl]]. PHP pritiahlo produkciu mnohých frameworkov, ktoré poskytujú stavebné bloky a návrh štruktúry pre podporu rýchleho vývoja aplikácií. Niektoré ako [[CakePHP]], [[Symfony]], [[CodeIgniter]], [[Yii Framework]] a [[Zend Framework]] ponúkajú vlastnosti podobné iným frameworkom pre webové aplikácie.
[[LAMP]] architektúra sa stala populárnou vo webovom priemysle ako spôsob vývoja webových aplikácií. Písmeno „P“ v tomto balíku bežne zastáva PHP po boku s [[Linux]], [[Apache]] a [[MySQL]], avšak môže odkazovať aj na [[Python]], [[Perl]], alebo kombináciu všetkých troch. Podobné balíky sú taktiež dostupné pre [[Windows]] a [[OS X]], pričom ich názvy sú [[WAMP]] a [[MAMP]], kde prvé písmená reprezentujú operačný systém. Hoci PHP a [[Apache]] sú súčasťou [[Mac OS X]] základnej inštalácie, používatelia týchto balíkov vyhľadávajú jednoduchšiu inštaláciu, ktorá je jednoduchšie aktualizovaná.
Od apríla 2007 viac ako 20 miliónov internetových domén malo webový servis hostovaný na serveroch s inštalovaným PHP a mod_php bolo zaznamenané ako najpopulárnejší Apache HTTP Serverový modul. PHP je používané ako serverovo orientovaný programovací jazyk na 75% zo všetkých web stránok, ktorých serverovo orientovaný programovací jazyk je známi a PHP je najpoužívanejší open source softvér v spoločnostiach. Množina systémov na správu webového obsahu napísané v PHP zahŕňa [[MediaWiki]], [[Joomla]], [[eZ Publish]], [[SilverStripe]], [[WordPress]], [[Drupal]] a [[Moodle]]. Všetky webové stránky vytvorené pomocou týchto nástrojov sú napísané v PHP, zahŕňajúc požívateľskú časť Wikipédie, [[Facebook]] a [[Digg]].
 
== Bezpečnosť ==
Okolo 30% všetkých zraniteľností zaznamenaných v [[:en:National Vulnerability Database]] sú spojené s PHP. Tieto zraniteľnosti sú spôsobené nedodržaním pravidiel praktického programovania. Technické chyby samotného jazyka alebo jeho základných knižníc nie sú také časté (okolo 1% zo všetkých chýb v roku 2008). Keďže programátori robia chyby, niektoré jazyky obsahujú kontrolu chýb na automatické zisťovanie nedostatočnej validácie vstupu, ktorá vedie k mnohým problémom. Takáto funkcia je vyvíjaná aj pre PHP, ale jej zahrnutie a vydanie bolo v minulosti niekoľko krát zamietnuté.
Existujú však pokročilé ochranné záplaty ako napríklad [[Suhosin]] a [[Hardening-Patch]], ktoré sú špeciálne navrhnuté pre prostredia webhostingu.
[[PHPIDS]] pridáva bezpečnosť ľubovoľnej PHP aplikácii pre ochranu proti intruze. [[PHPIDS]] detekuje útoky založené na cross-site scripting ([[XSS]]), [[SQL injection]], header injection, directory traversal, spúšťanie vzdialených súborov, remote file inclusion, a denial-of-service ([[DoS]]).
 
== Optimalizácia rýchlosti ==
Zdrojový kód PHP je skompilovaný za behu na vnútorný formát, ktorý môže byť vykonaný prostredníctvom PHP engine. Aby sme urýchlili čas vykonávania a nemuseli kompilovať zdrojový kód vždy keď sa pristupuje k web stránke, môžu byť PHP skripty taktiež nasadené v spustiteľnom formáte použitím PHP kompilera.
Optimalizátory kódu sú zamerané na vylepšenie výkonu skompilovaného kódu redukovaním jeho veľkosti, odstránením nadbytočných inštrukcií a vykonávaním iných zmien, ktoré môžu znížiť vykonávací čas. Pri PHP sú často príležitosti na optimalizáciu kódu. Príkladom optimalizátora kódu je PHP rozšírenie [[eAccelerator]].
Ďalším prístupom k redukovaniu kompilačného zaťaženia pre PHP servery je použitie opcode cache. Opcode cache funguje na základe odchytávania skompilovanej formy PHP skriptu v zdieľanej pamäti aby predchádzala nadmernému parsovaniu a kompilovaniu kódu pri každom spustení skriptu.
Aby sa zaručila najväčšia efektivita opcode caching a optimalizácia kódu môžu byť skombinované, keďže modifikácie sú vzájomne nezávislé (sú vykonávané v rozdielnych častiach kompilácie).
 
== Zdroje ==
PHP obsahuje free a open source knižnice s jadrom. PHP je v podstate systém uvedomujúci si internet so zabudovanými modulmi pre pristupovanie k serverom s protokolmi pre prenos dát ([[FTP]]), mnohými databázovými servermi, zabudovanými SQL knižnicami ako napríklad [[PostgreSQL]], [[MySQL]], [[Microsoft SQL Server]] a [[SQLite]], [[LDAP]] servery, a iné. Mnohé funkcie príbuzné programátorom v jazyku [[C]], ako napríklad stdio rodina, sú prístupné aj v jadre PHP.
PHP sprístupňuje vývojárom písať doplnky v C pre pridanie funkcionality do jazyka. Tieto doplnky môžu byť skompilované do PHP alebo načítané dynamicky počas behu. Existujú doplnky pre podporu [[Windows API]], manažment procesov na operačných systémoch založených na [[Unix]]-e, viacbytové reťazce ([[Unicode]]), [[cURL]] a niekoľko populárnych komprimovacích formátov. Iné funkcie obsahujúce integráciu s [[IRC]], dynamické generovanie obrázkov a [[AdobeFlash]] obsahu a dokonca syntézu reči. Základné funkcie jazyka ako tie zaoberajúce sa reťazcami a poľami sú taktiež implementované ako doplnok. PHP komunitná doplnková knižnica (PHP Extension Community Library PECL) je súhrn doplnkov pre PHP.
Zend poskytuje certifikačnú skúšku pre programátorov, vďaka ktorej sa môžu stať certifikovanými PHP vývojármi.
 
== Syntax ==
Řádek 39 ⟶ 62:
 
Syntaxou a kľúčovými slovami pripomína PHP jazyk [[C (programovací jazyk)|C]] a jazyky z neho odvodené. Podmienený príkaz <code>if</code>, cykly <code>for</code> a <code>while</code> a návratové hodnoty funkcií sú syntakticky veľmi blízke jazykom ako [[C (programovací jazyk)|C]], [[C++]], [[Java (programovací jazyk)|Java]], alebo [[Perl]].
 
=== Dátové typy ===
PHP ukladá celé čísla v rozsahu závislom na platforme (64 alebo 32 bitov) ako celé číslo so znamienkom ekvivalentne k typu long v jazyku [[C]]. Celé čísla bez znamienka sú v istých situáciách konvertované na hodnoty so znamienkom, čím sa odlišuje od iných programovacích jazykov. Premenné typu celé čísla môžu mať určené používanie desiatkovej, osmičkovej a šestnástkovej notácie. Desatinné čísla sú taktiež zoradené podľa rozsahu závislého od platformy. Môžu používať notáciu desatinných čísel, alebo dve formy vedeckej notácie. PHP má prirodzený booleovský typ, ktorý je podobný prirodzenému booleovskému typu v [[Java|Jave]] a [[C++]]. Pri použití booleovskej konverzie pravidiel sú nenulové hodnoty interpretované ako pravda a nula je interpretovaná ako nepravda tak ako aj v [[Perl]]-e a [[C++]]. Prázdny (null) dátový typ je reprezentovaný ako premenná, ktorá nemá hodnotu. Jej jediná hodnota, ktorú môže nadobudnúť je NULL. Premenné typu „resource“ reprezentujú odkazy na prostriedky z externých zdrojov. Tieto sa zvyčajne vytvárajú funkciami z konkrétneho doplnku a môžu byť spracované iba funkciami z rovnakého doplnku. Príkladom môžu byť súbory, obrázky a databázové zdroje. Polia môžu obsahovať elementy hocakého typu, ktorý PHP dokáže spracovať, vrátane zdrojov, objektov a taktiež aj ďalších polí. Poradie je zachované v listoch hodnôt a v hashoch s hodnotami a kľúčmi, pričom sa môžu navzájom prelínať. PHP taktiež podporuje reťazce, ktoré môžu byť použité s jednoduchými úvodzovkami, dvojitými úvodzovkami, nowdoc alebo heredoc syntaxou.
Štandardná PHP knižnica sa pokúša riešiť bežné problémy a implementuje efektívne rozhrania pre dátové prístupy a triedy.
 
=== Objekty ===
Základná funkcionalita objektovo orientovaného programovania bola pridaná v PHP 3 a vylepšená v PHP 4. Zaobchádzanie s objektmi bolo kompletne prepísané v PHP 5, keď bolo zároveň rozšírené o nové funkcie a vylepšené z hľadiska výkonnosti. V predošlých verziách PHP bolo k objektom pristupované ako k hodnotovým typom. Nedostatkom tejto metódy bolo to, že celý objekt bol skopírovaný, keď bola hodnota priradená, alebo posunutá ako parameter nejakej metóde. V novom prístupe sú objekty odkazované podľa rukoväte a nie podľa hodnoty. PHP 5 predstavilo súkromné a chránené premenné a metódy objektu, spolu s abstraktnými triedami, konečnými triedami, abstraktnými metódami a konečnými metódami. Taktiež predstavilo štandardný spôsob deklarovania konštruktorov a deštruktorov podobných ako v iných objektovo orientovaných jazykoch ako napríklad [[C++]] a aj štandardný model spracovávania chyby. Okrem toho PHP 5 pridalo rozhrania a povolilo implementáciu viacerých rozhraní. Existujú špeciálne rozhrania, ktoré objektom dovoľujú interakciu so systémom runtime. Objekty implementujúce prístup k poľu môžu byť použité so syntaxou poľa a objekty implementujúce iteráciu alebo agregáciu iterácie môžu byť použité s konštrukciou foreach. Neexistuje žiadna funkcia virtuálnych tabuliek v jadre, takže statické premenné sú počas kompilácie späté s menom namiesto s referenciou.
Ak vývojár vytvorí kópiu objektu pomocou rezervovaného slova clone, Zend engine skontroluje, či bola definovaná metóda __clone() alebo nie. Ak nie je tak sa zavolá predvolená metóda __clone(), ktorá skopíruje vlastnosti objektu. Ak je metóda __clone() definovaná, tak ona bude zodpovedná za nastavenie potrebných vlastností vo vytvorenom objekte. Pre pohodlie, jadro zaobstaráva funkciu, ktorá importuje vlastnosti zdrojového objektu, takže programátor môže začať s úplnou kópiou zdrojového objektu a iba nahradí vlastnosti, ktoré potrebuje zmeniť.
 
== Ukážka kódu ==