PHP kézikönyv Előző Következő A 4.3-as verziótól felfelé a PHP támogat egy új SAPI (Server Application Programming Interface) típust, a CLI -t ami a Command Line Interface rövidítése. A nevéből következik, hogy ez a SAPI típus leginkább shell (vagy akár desktop!) alkalmazások fejlesztéséhez használatos a PHP -ben. Van néhány különbség a CLI SAPI és a többi SAPI között, ezek magyarázatára a későbbiekben rátérünk. A CLI SAPI először a PHP 4.2.0 verziójában jelent meg, de akkor még csak kísérleti jelleggel. Használatához a --enable-cli kapcsolóval kellett indítani a. / configure scriptet installáláskor. A PHP 4.3.0 megjelenésétől megszűnt a kísérleti státusz és a CLI SAPI mindig beépül a php futtatható binárisba. (Windows alatt ez a php.exe) Lényegesebb különbségek a CLI SAPI és a többi SAPI között: A CGI SAPI -val ellentétben soha nem ír ki fejléceket. Habár a CGI SAPI lehetőséget ad a HTTP fejlécek letiltására egy kapcsolóval, de ez nem egyenértékű a CLI SAPI által nyújtott megoldással. A CLI alapértelmezetten "csendes" (quiet) módban indul, de a -q kapcsolót megtartották a kompatibilitás érdekében, hogy régebbi CGI szkripteket is problémamentesen lehessen futtatni. Nem cseréli fel az aktuális könyvtárat az éppen futó szkript könyvtárára. (A -C kapcsolót azért megtartották a kompatibilitás érdekében) Egyszerű, szöveges hibaüzenetek (nincs HTML formázás). Vannak php.ini utasítások, melyeket a CLI SAPI egyszerűen figyelmen kívül hagy, mivel nincs közük a shell környezethez: Táblázat 23-1. Figyelmen kívül hagyott php.ini utasítások Utasítás Magyarázat A shellben lehetetlen elolvasni a hibaüzeneteket, ha azok zavaros HTML elemekkel tarkítva száguldanak át a képernyőn. Emiatt ez az utasítás alapértelmezetten FALSE. Általában azt akarjuk, hogy a print(), echo() és a hasonszőrű függvények mindenképpen írjanak a kimenetre és ne puffereljenek semmit. De használható a output buffering utasítás, ha a kimenet késleltetése vagy manipulálása a cél. 0 (korlátlan) Minden eshetőségre felkészülve a PHP nem korlátozza a shell szkriptek futásidejét. Ez érthető, hiszen míg egy webes szkript általában pár másodperc alatt lefut, addig a shellprogramok nagyon hosszú ideig futhatnak. A globális PHP változók $argc (a változók számát adja át a szkriptnek) és a $argv (az aktuális változók tömbje) elválaszthatatlanok a parancssori programok futásától és mindig feltöltődnek a megfelelő értékpárokkal, amikor használod a CLI SAPI -t. Megjegyzés: Ezek az utasítások nem adhatók meg a fentiektől különböző értékekkel a konfigurációs php.ini fájlban vagy egyéb saját php.ini -ben (ismert, hogy több php.ini is használható, akár könyvtáranként más). Ez egy korlátozás, mert alapértelmezett értékeik azután aktiválódnak, miután a konfigurációs fájlok lefutottak. Azonban ezek az értékek változhatnak a szkript futása alatt (ami nincs hatással minden említett utasításra, pl. register_argc_argv). Hogy kényelmesebbé tegyék a parancssori programozást, néhány konstanst előre definiáltak: Táblázat 23-2. Specifikus CLI konstansok konstansok Leírás A fentieknek megfelelően nincs szükség arra, hogy pl. megnyiss egy streamet az stderr -ért, hanem egyszerűen csak használd a konstanst a stream forrás helyett: A CLI SAPI nem cseréli az aktuális könyvtára a futó szkript könyvtárára! Szemléletes példa erre a CGI SAPI sajátosságra: ?php / * Ez a mi kis tesztprogramunk;) és az aktuális könyvtárat írja ki, amiben éppen "tartózkodunk ". Neve: test.php * / echo getcwd(), "\n";? A CGI verzió használatakor a következőkre számíthatunk: $pwd / /Linux / Unix alatt kiírja az aktuális könyvtárat / tmp / /az aktuális könyvtár a / tmp $php-cgi -f másik_könyvtár / test.php / tmp / másik_könyvtár Ugyanez a CLI SAPI -val: $pwd / tmp $php -f másik_könyvtár / test.php / tmp Megjegyzés: A fenti példában a CGI SAPI ugyanúgy viselkedik, mint a CLI SAPI, ha a -C kapcsolóval indítod a szkriptet a parancssorból. Az alábbi listát a parancssori opciókról a PHP generálta. Ezt bármikor kilistáztathatod ha a PHP -t a -h kapcsolóval indítod parancssorból: A CLI SAPI -val háromféleképpen indíthatsz el egy PHP programot: Hogyan lehet a PHP -vel fájlokat futtatni. PHP kód futtatása közvetlenül a parancssorból. Megjegyzés: A példát figyelmesen szemlélve észrevehetjük, hogy nincsenek nyitó és záró tagok. Az -r kapcsolóval ezekre nincs szükség. Ha mégis használod őket, az hibához fog vezetni. PHP kód futtatása a standard inputon (stdin) keresztül. Ez a módszer dinamikussá teszi a PHP kód létrehozását és egyből a futtatható binárisba táplálja a kódot, amint a következő (képzeletbeli) példában láthatjuk: $valami_szkript | valami_filter | php | sort -u eredmeny.txt Mint minden shellprogram, a PHP bináris, így az általad írt PHP Mint minden shellprogram, a PHP bináris, így az általad írt PHP szkript képes argumentumokat feldolgozni. Bármennyi argumentumot megadhatsz a szkriptednek, ezek számát nem korlátozza a PHP (A shellben van egy bizonyos határ a megadható argumentumok számát illetően, de az általában bőségesen elég). A szkriptnek átadott argumentumokat a $argv globális tömb tartalmazza. A tömb nulladik eleme mindig a szkript neve. (Ez a - karakterjel abban az esetben, ha a PHP kód az -r kapcsolóval lett indítva a parancssorból.) A másik globális tömb a $argc, ami a $argv tömb elemeinek számát tartalmazza (De ez NEM egyenlő a szkriptnek átadott argumentumok számával!). Amikor különféle opciókkal akarod futtatni egy szkriptet, az argumentumoknak nem szabad - karakterrel kezdődniük. Ha mégis kiteszed a - jelet, akkor abból könnyen probléma lehet, mert a PHP úgy veszi, mintha a saját opciói közül adnál meg egyet. Hogy ezt elkerüld, használd a - - szeparátort. Ez esetben a PHP az argumentumokat változtatás nélkül továbbítja a szkriptnek. # Ez nem fogja futtatni a megadott kódot, csak szemléltetésre jó. $php -r 'var_dump($argv);' -h Usage: php [options] [-f] file [args...] [...] # Ez átadja a szkriptnek a '-h 'argumentumot és megakadályozza a PHP-t abban, # hogy a sajátjának higgye. $php -r 'var_dump($argv);' - - -h array(2) {[0]= string(1) "-" [1]= string(2) "-h "} Habár, van egy másik módja a PHP paracssori futtatásának. Lehet írni olyan programokat, melyek a #! / usr / bin / php sorral kezdődnek és ezt követi a "normál" PHP kód, a szabványos PHP kezdő-és záró tagokkal (valamint a fájl futtatási paramétereinek a beállításai). Ezzel a módszerrel úgy futtathatjuk programunkat, mint egy normál shell vagy Perl szkriptet: Táblázat 23-3. Parancssori opciók Opció Leírás Színesben kiemelt forrását írja ki a szkriptnek. Ez az opció egy saját algoritmust használ a fájl elemzéséhez, amivel HTML kódot generál a forrásból a standard kimenetre. Ez a kód tartalmazza a színes kiemeléshez szükséges és az egyéb formázó tag-eket, a szabványos code [...] / code HTML formában, de nem tartalmazza a HTML fejléceket. Megjegyzés: Ez az opció nem hazsnálható együtt az -r kapcsolóval. Kommentek és felesleges sorközök nélkül listázza ki a kódot. Megjegyzés: Ez az opció nem használható együtt az -r kapcsolóval. Értelmezi és futtatja az -f kapcsoló után megadott fájlot. Ez a kapcsoló opcionális és el lehet hagyni, ha pusztán a fájlnév elegendő a fájl futtatásához. Kiírja a PHP, PHP SAPI, és a Zend verziószámát a standard kimenetre, pl: $php -v PHP 4.3.0-dev (cli), Copyright (c) 1997-2002 The PHP Group Zend Engine v1.2.1, Copyright (c) 1998-2002 Zend Technologies Ha nem a megszokott helyén van, akkor megadhatjuk ezzel a kapcsolóval, hogy hol a php.ini vagy megadhatunk egy saját INI fájlot (aminek nem muszáj php.ini nevet adni!), pl..: #ezzel megmondjuk a PHP-nek, hogy a / saját / könyvtárban találja a php.ini-t $php -c / saját / könyvtár / maszek.php #ez pedig utasítja PHP-t, hogy a / saját / könyvtárban / levő saját.ini-t #vegye alapul a maszek.php szkript futtatásakor. $php -c / saját / könyvtár / saját.ini maszek.php Interaktívan futtatja a PHP-t. Ezzel az opcióval bármilyen konfigurációs utasítást, ami csak a php.ini -ben megtalálható, egy saját értékkel érvényesíthetünk a szkript futásának idejére. Az általános formája a következő: -d konfigurációs_utasítás[ =érték] Példák: # Az értéket elhagyva a megadott konfigurációs utasításhoz az "1" értéket # rendeli. $php -d max_execution_time -r '$foo = ini_get("max_execution_time"); var_dump($foo); 'string(1) "1 "# Ha csak egy szóközt nyomunk az érték helyett, akkor a konfigurációs # utasításnak az" "értéket adja. php -d max_execution_time= -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(0)" "# A konfigurációs utasítás értéke az lesz, amit az egyenlőségjel után írunk: $php -d max_execution_time=20 -r '$foo = ini_get("max_execution_time"); var_dump($foo); 'string(2) "20" $php -d max_execution_time=fogalmamsincsen -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(15) "fogalmamsincsen " A hibakeresést segíti részletes információk kiírásával. Betölti a Zend bővítményt. Ha csak a futtatandó szkript nevét adtuk meg utána, akkor a PHP megpróbálja ezt a bővítményt a rendszereden alapértelmezett függvéykönyvtár (library) útvonal alapján betölteni (Ez általában az / etc / ld.so.conf fájlban van definiálva a Linux rendszereken). Ha megadsz egy konkrét útvonalat, akkor a PHP ezt veszi alapul, nem pedig a rendszer általit. Relatív útvonalat is megadhatsz a PHP -nek, hogy az aktuális könyvtárhoz képest hol keresse a bővítményt. Segítségével kényelmesen elvégezhető a szintaktikai ellenőrzés egy megadott PHP kódon. Ha nincs hiba, a standard kimenetre kiírja, hogy No syntax errors detected in filename És a shell visszatérési értéke 0. Hiba esetén a szöveg Errors parsing filename, majd kiírja a standard kimenetre a megérdemelt hibaüzenetet és a shell visszatérési értéke 255 lesz. Ez az opció nem jelzi a végzetes hibákat (mint pl. egy definiálatlan függvény). Használd ezt az -f kapcsolóval együtt, ha végzetes hibákat is akarsz találni.;) Megjegyzés: Ez az opció nem használható együtt az -r kapcsolóval. Eme opció használatával a PHP kilistázza a beépített (és betöltött) PHP és Zend modulokat: Ez a parancsori opció meghívja a phpinfo() függvényt és kiírja az eredményét. Ha a PHP furcsán viselkedik, ajánlatos kiadni a parancssorban egy php -i -t és figyelmesen elolvasni a hibaüzeneteket a táblázatokban. Készülj fel rá, hogy a kimenet HTML formázott, így a parancssorban szinte olvashatatlan. (Irányítsd át a kimenetet egy HTML fájlba (php -i phpinfo.html) és nézd meg egy böngészővel.) Ez az opció teszi lehetővé, hogy PHP parancsokat adjunk ki közvetlenül a parancssorból. A kezdő és a záró PHP tagok (?php és?) NEM KELLENEK és hibához fog vezetni, ha mégis alkalmazod őket. Megjegyzés: Óvatosan kell bánni ezzel a parancssori PHP futtatási módszerrel, nehogy a változó helyettesítés miatt összeakadjon a shellel. Példa egy ilyen hibára Ezzel az opcióval lehet információt szerezni az aktuális parancssori opciókról és néhány sornyi magyarázatot hozzájuk. Példa 23-1. In the script above, we used the special first line to indicate, that this file should be run by PHP. Példa 23-2. @c:\php\php.exe script.php %1 %2 %3 %4 Assuming, you named the above program as script.php, and you have your php.exe in c:\php\php.exe this batch file will run it for you with your added options: script.bat echothis or script.bat -h. Előző Tartalom Következő Fel Függvény referencia