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

Smazaný obsah Přidaný obsah
d -rozsiahly text bez zdroja; doplň k tomu zdroje inak to tu nemôže ostať
d externé odkazy, aktualizácia, pridanie referencií
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.<ref>{{cite web|url=http://php.net/manual/en/book.image.php |title=PHP Manual Image Processing and GD; |publisher= php.net |date= |accessdate=2011-04-09}}</ref> 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.<ref name="foundations">{{cite web|accessdate=2008-02-25|url=http://www.onlamp.com/pub/a/php/2001/05/03/php_foundations.html|title=Embedding PHP in HTML |publisher=O'Reilly|date=2001-05-03}}</ref>
PHP sa primárne správa ako filter<ref>{{Wayback|url=http://web.archive.org/web/20080611231433/http://gtk.php.net/manual1/it/html/intro.whatis.php.whatdoes.html|title=|date=20080611231433}}{{Failed verification|date=April 2010}}</ref>, 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.<ref>{{cite web|accessdate=2008-02-25|url=http://cs.ua.edu/457/Notes/PHP%20and%20MySQL.ppt|title=PHP and MySQL |publisher=[[University of Alabama]] |archiveurl = http://web.archive.org/web/20080228003031/http://cs.ua.edu/457/Notes/PHP+and+MySQL.ppt <!-- Bot retrieved archive --> |archivedate = 2008-02-28}}</ref>
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<ref>{{cite web|url=http://webmaster.iu.edu/PHPlanguage/index.shtml|title=PHP Server-Side Scripting Language|publisher=[[Indiana University]]|accessdate=2008-02-25|date=2007-04-04}}</ref> 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]]<ref>{{cite web|url=http://java.sun.com/products/jsp/jspservlet.html|title=JavaServer Pages Technology&nbsp;— JavaServer Pages Comparing Methods for Server-Side Dynamic Content White Paper|publisher=Sun Microsystems|accessdate=2008-02-25}}</ref> 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.<ref name="usage">{{cite web|title=PHP: PHP Usage Stats|url=http://www.php.net/usage.php|publisher=SecuritySpace|accessdate=2008-02-24|date=2007-04-01}}</ref> 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<ref name="W3Techs usage statistics">{{cite web | title=Usage of server-side programming languages for websites | url=http://w3techs.com/technologies/overview/programming_language/all|publisher=W3Techs|accessdate=2010-10-29|date=2010-10-29}}</ref> a PHP je najpoužívanejší open source softvér v spoločnostiach.<ref name="W3Techs usage statistics">{{cite web | title=Usage of server-side programming languages for websites | url=http://w3techs.com/technologies/overview/programming_language/all|publisher=W3Techs|accessdate=2010-10-29|date=2010-10-29}}</ref> 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.<ref>{{ cite web|url=http://www.coelho.net/php_cve.html|title=PHP-related vulnerabilities on the National Vulnerability Database|accessdate=2012-07-05}}</ref> 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).<ref>{{cite web|url=http://seancoates.com/blogs/security-and-driving-and-hiring |title=Security and... Driving? (and Hiring) |publisher=Sean Coates |date= |accessdate=2009-07-29}}</ref><ref>[http://www.computerworlduk.com/toolbox/open-source/blogs/index.cfm?entryid=533&blogid=14 Computerworlduk.com], Interview: Ivo Jansch, February 26, 2008</ref> 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,<ref>{{cite web|title=PHP Taint Mode RFC|url=http://wiki.php.net/rfc/taint}}</ref> ale jej zahrnutie a vydanie bolo v minulosti niekoľko krát zamietnuté.<ref>{{cite web|title=Developer Meeting Notes, Nov. 2005|url=http://www.php.net/~derick/meeting-notes.html#sand-boxing-or-taint-mode}}</ref><ref>{{cite web|title=Taint mode decision, November 2007|url=http://devzone.zend.com/article/2798-Zend-Weekly-Summaries-Issue-368#Heading1}}</ref>
Existujú však pokročilé ochranné záplaty ako napríklad [[Suhosin]] a [[Hardening-Patch]], ktoré sú špeciálne navrhnuté pre prostredia webhostingu.<ref>{{cite web|title=Hardened-PHP Project|url=http://www.hardened-php.net|date=2008-08-15}}</ref>
[[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.<ref>{{cite web|accessdate=2009-11-04|url=http://www.linux-tutorial.info/modules.php?name=Howto&pagename=Unix-and-Internet-Fundamentals-HOWTO/languages.html|title=How do computer languages work?}}</ref><ref>{{harv|Gilmore|2006|p=43}}</ref> 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.ref>{{cite web|accessdate=2008-03-28|title=PHP Accelerator 1.2 (page 3, Code Optimisation)|url=http://www.php-accelerator.co.uk/PHPA_Article.pdf|format=PDF |publisher=Nick Lindridge}}</ref> 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.<ref>{{cite web|accessdate=2008-02-25|url=http://www.php.net/quickref.php|title=PHP Function List |publisher=The PHP Group}}</ref>
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.<ref>[http://lxr.php.net/xref/PHP_5_4/ext/standard/ Cross Reference: /PHP_5_4/ext/standard/<!-- Bot generated title -->]</ref> PHP komunitná doplnková knižnica (PHP Extension Community Library PECL) je súhrn doplnkov pre PHP. <ref>{{cite web|accessdate=2008-02-25|url=http://www.devnewz.com/090902b.html|title=Developing Custom PHP Extensions |publisher=devnewz|date=2002-09-09 |archiveurl = http://web.archive.org/web/20080218045752/http://www.devnewz.com/090902b.html |archivedate = 2008-02-18}}</ref>
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 ⟶ 63:
 
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.<ref>{{cite web | url = http://www.mysqlperformanceblog.com/2007/03/27/integers-in-php-running-with-scissors-and-portability/ | title = Integers in PHP, running with scissors, and portability | date = March 27, 2007 | publisher = MySQL Performance Blog | accessdate = 2007-03-28}}</ref> 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.<ref name="types">{{cite web|accessdate=2008-03-16|url=http://www.php.net/manual/en/language.types.php|title=Types |publisher=The PHP Group}}</ref> 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.<ref>{{cite web|accessdate=2008-03-21|url=http://www.php.net/manual/en/language.types.string.php|title=Strings |publisher=The PHP Group}}</ref>
Š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.<ref>{{cite web | url = http://www.php.net/spl | title = SPL&nbsp;— StandardPHPLibrary | date = March 16, 2009 | publisher = PHP.net | accessdate = 2009-03-16}}</ref>
 
=== 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.<ref name="php 5 objects">{{cite web|accessdate=2008-03-16|url=http://mjtsai.com/blog/2004/07/15/php-5-object-references/|title=PHP 5 Object References |publisher=mjtsai}}</ref> 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.<ref name="zend engine 2">{{cite web|accessdate=2008-03-16|url=http://www.php.net/zend-engine-2.php|title=Classes and Objects (PHP 5) |publisher=The PHP Group}}</ref>
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ť.<ref>{{cite web|accessdate=2008-03-16|url=http://www.php.net/language.oop5.cloning|title=Object cloning |publisher=The PHP Group}}</ref>
 
== Ukážka kódu ==
Řádek 77 ⟶ 109:
echo $vyber; ?>
</source>
 
== References ==
 
{{reflist|30em}}
 
== Externé odkazy ==