PHP

A Wikipédiából, a szabad enciklopédiából
(PHP programozási nyelv szócikkből átirányítva)
A PHP rövidítés egyben a fülöp-szigeteki peso valutakódja.
PHP
PHP-logo.png

Paradigma imperatív, objektum-orientált
Jellemző kiterjesztés .php, .phtml, .php4, .php3, .php5, .phps
Megjelent 1995
Tervező Rasmus Lerdorf
Fejlesztő The PHP Group
Utolsó kiadás 5.4.0 (2011. november 11.)
Típusosság dinamikus, gyenge
Fordítóprogram nincs (értelmezett szkriptnyelv)
Hatással volt rá Perl
Operációs rendszer platformfüggetlen
Licenc PHP License
Weboldal


A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. Emiatt a PHP-t jórészt szerver-oldalon használják, bár létezik parancssori interfésze is, illetve önálló, grafikus felületű alkalmazások is létrehozhatóak vele.[1]

A nyelvet eredetileg Rasmus Lerdorf alkotta meg 1994-ben, de a ma létező egyetlen (és hivatalos specifikáció híján de facto szabvánnyá vált) PHP implementációt már a PHP Group tartja karban és fejleszti. A PHP-t a saját licence alatt adják ki, és a Free Software Foundation szabad szoftverként tartja számon.[2]

A PHP a legtöbb webszerverre, operációs rendszerre és platformra ingyenesen telepíthető. Manapság több mint 20 millió weboldal és egymillió szerver futtat PHP-t, bár a nyelvet használó oldalak száma 2005 augusztusától kezdve folyamatosan csökken. A PHP emellett az Apache webszerver egyik legnépszerűbb beépülő modulja.

Tartalomjegyzék

[szerkesztés] Története

A PHP fejlődése kezdetén csak CGI-programok halmaza volt. Ezeket Lerdorf néhány Perl szkript lecserélésére írta, amelyeket honlapjának karbantartására (például önéletrajzának megjelenítésére és a látogatottság mérésére) használt. Később ezeket a programokat kombinálta a szintén általa írt Form Interpreter (űrlap-értelmező) alkalmazással - így jött létre a PHP/FI, ami már jóval szélesebb funkcionalitással bírt. Az új, C nyelven megírt változat képes volt adatbázisokhoz kapcsolódni és segítségével egyszerű dinamikus weboldalakat is létre lehetett hozni. Lerdorf 1995. június 8-án adta ki a PHP első nyilvános változatát, hogy külső segítséggel gyorsabbá tegye a hibák megtalálását és a kód további fejlesztését. Az új verziót PHP 2-nek nevezte el és már megtalálhatóak voltak benne a mai PHP alapvető tulajdonságai: a Perl-éhez hasonló változók, az űrlapok kezelése és a HTML-kód beszúrásának lehetősége. A PHP szintaktikája is hasonló volt a Perl-éhez, de annál jóval korlátoltabb, egyszerűbb és kevésbé egységes volt.

1997-ben Zeev Suraski és Andi Gutmans, két izraeli fejlesztő újraírta az értelmezőt, ezzel megteremtve a PHP 3 alapját - ekkor született meg a PHP új neve, a PHP: Hypertext Preprocessor rekurzív rövidítés is. A fejlesztőcsapat 1997 novemberében, két hónapnyi béta-tesztelés után kiadta a PHP/FI 2-t, majd megkezdődhetett a PHP 3 tesztelése és végül megjelenése 1998 júniusában. Suraski és Gutmans ekkor megint a PHP-mag újraírása mellett döntött, amiből 1999-ben megszületett a Zend Engine. A két fejlesztő ekkor alapította meg a Zend Technologies-t is, ami máig aktívan ellenőrzi a PHP fejlesztését.

A Zend Engine 1.0 által hajtott PHP 4 2000. május 4-én jelent meg. Ezt követte 2004. július 13-án a következő nagy mérföldkőnek számító, az új Zend Engine II-n alapuló PHP 5. Az ötös verzió sok újítást tartalmazott: fejlettebb objektumorientált programozási lehetőségeket, a PDO (PHP Data Objects) adatbázis-absztrakciós kiterjesztést, és sok teljesítményt növelő javítást is.

A PHP 4 fejlesztése 2007 végén maradt abba, az utolsó megjelent verziója a 4.4.8 verziószámot viselte - a PHP Group ezekhez és a PHP 4 előző változataihoz 2008 augusztusáig biztosított biztonsági frissítéseket. Jelenleg a PHP 5 a nyelv egyetlen aktívan fejlesztett verziója. A hatos verzió bár már fejlesztés alatt áll, még nem jelent meg. 2008. február 4-étől A GoPHP5 kezdeményezés keretében több vezető PHP-alapú szabad-szoftver projekt döntött a PHP 4-támogatás megszüntetése mellett, hogy ezzel mozdítsák előre az ötös verzióra való áttérés folyamatát.

[szerkesztés] A PHP működése, leegyszerűsítve

A PHP oldalak elkészítésénél a HTML-t gyakorlatilag csak mint formázást használják, ugyanis ezen lapok teljes funkcionalitása a PHP-re épül. Amikor egy PHP-ben megírt oldalt akarunk elérni, a kiszolgáló először feldolgozza a PHP utasításokat, és csak a kész (HTML) kimenetet küldi el a böngészőnek, így a programkód nem is látható kliens oldalról. Ehhez egy ún. interpretert (értelmezőt) használ, amely általában egy külső modulja a webszervernek.

A PHP nyelv lényegében nagymértékű kiegészítése a HTML-nek, ugyanis rengeteg olyan feladat végezhető el vele, amelyre az ügyféloldali szkriptek nem képesek (vagy ha igen, korlátozottan). Ilyen például a bejelentkezés, az adatbáziskezelés, fájlkezelés, kódolás, adategyeztetés, kapcsolatok létrehozása, e-mail küldése, adatfeldolgozás, dinamikus listakészítés stb. Minden olyan esetben, ahol nagyszámú ismétlődő feladatsort kell végrehajtani (például képek listázása és linkelése, listakészítés stb.), ott ez a programnyelv nagyszerű segítség.

[szerkesztés] Egyéb futási módok

A PHP programok futhatnak közönséges (parancssori) programként is, nem HTML oldalba építve. Ezt azonban ritkán használják.[forrás?] Ezen módot sokszor weblapokkal kapcsolatos időzített folyamatok megvalósításához alkalmazzák, mivel azonos programnyelven, azonos megközelítési módon hajthatók azok végre.

Lehetőség van komplex konzolos alkalmazások írására is, mivel lehetőség van ncurses használatára is.

Microsoft Windows platformra is írhatók grafikus programok PHP-ben. Ehhez több mód is rendelkezésre áll: PHP-GTK - a sok program által használt Gimp Tool Kit függvényeit és felületi eszközeit lehet elérni.

Winbinder - egy fejlett modul és futtató környezet páros. A standard felületi elemeket teszi elérhetővé, valamint lehetőséget ad egyedi elemek létrehozására. A csomag tartalmaz egy integrált fejlesztő eszközt is, melynek segítségével Drag and Drop módszerrel lehet összerakni a kívánt felületet.

[szerkesztés] Fordítás

Lehetőség van a php-ben írt források önállóan futtatható programmá alakítására vagyis fordításra. Erre is több módszer létezik. Lehetséges módszerek:

  • HipHop - A PHP-kódot C++-kóddá alakítja, majd futtatható változatot készít belőle. A Facebook fejlesztői fejlesztik.
  • php2c - a php kódot C kóddá alakítja
  • php2exe - több megoldás is létezik. Nagy részük kizárólag részleges megoldást ad


egyéb megoldások: vannak olyan egyedi modulok (gyártó által nem elismert), melyek egyfajta köztes megoldást nyújtanak, vagyis nem a nyers forráskód tárolódik, hanem egyfajta bytekód, mely csak a feldolgozás gyorsítására szolgál.

Van hivatalos megoldás is az utóbbira, ennek lényege, az egyes futásokkor megvizsgálja a forrást és ha az megváltozott generál egy köztes állapotot, mely a forrás fölösleges részeit (kommentek, fölösleges blokk-kezdések, whitespace-ek) kiszűri és generált egy állományt az így kapott változattal. Ha a kód nem változott, betölti a „könnyített” változatot és azt futtatja. Ez jelentheti azt is, hogy az ember által olvasható kódot tokenizálja. Így a feldolgozás egy részét „megspórolva” fut a program. Bizonyos esetekben ez a módszer nem működik, mivel a kód tartalmazhat nem feldolgozható elemeket.

[szerkesztés] Verziók

Jelentés
Piros Már nem támogatott kiadás
Zöld Még támogatott kiadás
Kék Elkövetkezendő kiadás
Főverzió Alverzió Kiadás dátuma Megjegyzések
1 1.0.0 1995-06-08 Eredeti nevén PHP Tools (Personal Home Page Tools). A „PHP” név első használata.
2 2.0.0 1997-11-01 Alkotója szerint a legegyszerűbb eszköz dinamikus weboldalak készítésére.
3 3.0.0 1998-06-06 A fejlesztés csapatmunkává vált. Zeev Suraski és Andi Gutmans újraírták a rendszer alapját.
4 4.0.0 2000-05-22 Megjelent az új parancsértelmező mag, a Zend Engine
4.1.0 2001-12-10 Megjelentek a szuperglobális változók, tömbök ($_GET, $_POST, $_SESSION, stb.)
4.2.0 2002-04-22 A register_globals környezeti változó alapértelmezésben kikapcsolt értéket vett fel.
4.3.0 2002-12-27 CGI mód mellett már lehetőség van a CLI, azaz parancssori futtatásra is
4.4.0 2005-07-11
4.4.2 2006-01-13
4.4.8 2008-01-03 Számos biztonsági, kiegészítő és hibajavítás,a következő biztonsági frissítés 2008-08-08 esedékes ha szükségszerű.
4.4.9 2008-08-07 Több biztonsági, kiegészítő és hibajavítás, a PHP 4.4 széria utolsó kiadása.
5 5.0.0 2004-07-13 Megjelenik a Zend Engine II, teljesen új objektumorientált lehetőségekkel
5.1.0 2005-11-24
5.2.0 2006-11-02 A "filter" kiterjesztés alapértelmezett módon elérhető. Natív JSON támogatás.
5.2.16 2010-07-22 Hibajavítás.
5.2.17 2011-01-06 Kritikus hibajavítás a lebegőpontos számításokkal kapcsolatosan.
5.3.0 2009-06-30 Névtér támogatás, sqlite3
5.3.1 2009-11-19 Több mint 100 hibajavítás
5.3.2 2010-03-04 Sok hibajavítást magában foglaló kiadás.
5.3.3 2010-07-22 Főleg biztonsági és hibajavítások.
5.3.6 2011-03-17 Biztonsági és hibajavítások.
5.3.7 2011-08-18 Ez a kiadás a PHP 5.3.x branch stabilitásának javítására fókuszált. Több, mint 90 hiba javítást tartalmazott, biztonsági javításokkal együtt.
5.3.8 2011-08-23 Ez a kiadás a PHP 5.3.7-ben megjelent 2 fontosabb probémát javított.
5.4.0 2012-03-01 Eltávolított elemek: register_globals, safe_mode, allow_call_time_pass_reference, session_register(), session_unregister() és session_is_registered(). Továbbá számos fejlesztés a meglévő funkcionalitáson.
6  ?.? Nincs dátum PHP 6 fejlesztését egyelőre elhalasztották.

[szerkesztés] Szintaxis

A PHP utasításokat mindig egy meghatározott karaktersorral kell kezdeni és bezárni. Sok hibát kizárhatunk, ha programjainkban a "<?php" nyitó és a "?>" záró karaktersorokat használjuk. Ugyanis az érvényes nyitó és záró elemek a php.ini konfigurációs fájlban vannak deklarálva, amik szerverenként eltérhetnek egymástól, így előfordulhat, hogy egy szerveren nem értelmezi az interpreter a php programunkat, hanem közvetlenül a kimenetre küldi a forráskódot.

A <? ?> jelölés különösen ellenjavallt, ugyanis az XML dokumentumok nyitó és záró tagja is hasonló, így egy include-olt (beágyazott) xml dokumentumot is forráskódnak értelmezne az interpreter. Ezek a következőképpen alakulhatnak:

karaktersorozat megjegyzés
<? ?>
ha a php.ini-ben be van kapcsolva az short_open_tag
<?php ?>
javasolt forma
<script language="PHP"> </script>
csak ha a php.ini-ben az asp_tags bekapcsolt állapotban van
<?=$valtozo?>
speciális eset, nem javasolt a használata, a
<?php echo $valtozo; ?>
kódrészletnek felel meg
<% %>
csak ha a php.ini-ben az asp_tags bekapcsolt állapotban van
<?php
 echo "<p>";            // egy bekezdés
 echo "Helló világ!";   // szöveg
 echo "</p>";           // záró tag
?>

PHP helló világ

Minden változó azonosítója a $ jellel kezdődik:

$valtozo="béka";
echo $valtozo;

Kivételt képeznek ez alól a konstansok

define("KONSTANS","123456");
echo KONSTANS;

Fontos megemlíteni, hogy PHP-ben string típus jelölésénél az aposztrófban ( ' ' ) és az idézőjelben ( " " ) lévő karaktersorozat más-más jelentéssel bír. Az idézőjelek közé zárt szöveg esetében az értelmező a szövegben beszúrt változókat is keres ( ezért a kiértékelése minimálisan ugyan, de lassabb), ugyanakkor aposztróffal jelölt string típusnál ez nem valósul meg.

<?php 
$valtozo = 'szöveg';
$valtozo1 = 'példa $valtozo';
$valtozo2 = "példa $valtozo";
echo $valtozo1,'<br />',$valtozo2;
?>

Az eredmény pedig :

példa $valtozo
példa szöveg

A tömb indexelése – hasonlóan más C alapú nyelvekhez – 0-tól kezdődik, tehát a $tomb[1] eleme valójában a tömb 2. eleme.

A legegyszerűbb utasítás a már említett 'echo' nyelvi struktúra, vagy a visszatérési értékkel rendelkező 'print'. Ennek segítségével lehet kihasználni igazán a php-t: közvetlenül lehet írni a készülő HTML dokumentumba, akár formázott szöveget is. Az eredmény:

 <p>Helló világ!</p>

Figyeljük meg, hogy az utasításokat pontosvessző (;) zárja, hasonlóan például a C nyelvhez.

[szerkesztés] Adattípusok

A PHP az egész számokat platformfüggő tartományban tárolja. Ez a tartomány jellemzően 32-bites előjeles ábrázolás. Eltérően más programnyelvektől bizonyos esetekben az előjel nélküli számok is előjelessé konvertálódnak.[3] Egész változók értékadásánál használható az előjeles decimális, oktális és hexadecimális jelölés is. A lebegőpontos számok tárolási tartománya szintén platformfüggő, megadhatóak lebegőpontosan és kétféle tudományos jelöléssel is.[4] A PHP rendelkezik egy saját boolean adattípussal, ami hasonlít a Java és a C++ boolean típusaira. A boolean típusba konvertáláskor a Perl és C++ nyelvekhez hasonlóan a nullától különböző értékek true értékké konvertálódnak, a nulla értékek pedig false értékké.[4] A null adattípus az érték nélküli változókat reprezentálja. A null típus egyetlen lehetséges értéke a NULL.[4] A "resource" típusú változók külső erőforrásokra hivatkoznak. Ezeket általában egyes kiterjesztések függvényei adják vissza és általában csak ugyanazon kiterjesztés függvényei tudják kezelni; ilyen típusúak a file, az image és a database erőforrások.[4] A tömbök bármilyen PHP típusú elemeket tárolhatnak, beleértve erőforrásokat, objektumokat, sőt akár más tömböket is. Az értékek sorrendje megőrződik a listákban és a hash-táblákban is.[4] A PHP a string adattípust is támogatja, stringeket megadni szimpla és dupla idézőjelekkel valamint az úgynevezett heredoc szintaxissal egyaránt lehet.[5]

A szabványos PHP programkönyvtár (Standard PHP Library, SPL) igyekszik megoldani a szabványos adatkezelési feladatokat és hatékony adatelérési interface-eket és osztályokat implementál.[6]

A PHP gyenge típusossága az egyik leggyakoribb hibaforrás, mivel a nyelvre jellemző az ún. Type Juggling ami lehetővé teszi, hogy a változó típusát a környezete határozza melyben használjuk.

<?php
$foo = "0";  // $foo változó string típust vesz fel
$foo += 2;   // a $foo most szám típust veszi fel
$foo = $foo + 1.3;  // $foo most lebegőpontos szám típusú
$foo = 5 + "10 Little Piggies"; // $foo szám típusú
$foo = 5 + "10 Small Pigs";     // $foo szám típusú
?>

Ugyanakkor a tömbre való átalakítás jelenleg nem elérhető.

<?php
$a    = 'autó'; // $a string típusú
$a[0] = 'f';   // $a még string típusú
echo $a;       // futó
?>

Ugyanakkor lehetőségünk van típuskényszerítés alkalmazására:

<?php
$foo = 10;   // $foo most szám típusú
$bar = (boolean) $foo;   // $bar logikai típusú
?>

[szerkesztés] Jegyzetek

  1. PHP Manual - Index. PHP Manual. (Hozzáférés: 2011. április 9.)
  2. GPL-Incompatible, Free Software Licenses. Various Licenses and Comments about Them. Free Software Foundation. (Hozzáférés: 2008. február 22.)
  3. Integers in PHP, running with scissors, and portability. MySQL Performance Blog, 2007. március 27. (Hozzáférés: 2007. március 28.)
  4. ^ a b c d e Types. The PHP Group. (Hozzáférés: 2008. március 16.)
  5. Strings. The PHP Group. (Hozzáférés: 2008. március 21.)
  6. SPL - StandardPHPLibrary. PHP.net, 2009. március 16. (Hozzáférés: 2009. március 16.)

[szerkesztés] Külső hivatkozások

Személyes eszközök
Névterek

Változók
Műveletek
Navigáció
Részvétel
Nyomtatás/exportálás
Eszközök
Más nyelveken