Fájlkezelés. Fájlok beágyazása az include() függvénnyel

Hasonló dokumentumok
10. ÓRA. Fájlok használata

Dinamikus képek kezelése. Az ezen az órán vett függvények a GD nevû nyílt forráskódú programkönyvtáron alapulnak.

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

Php ismétlés. Munkakönyvtár - környezet

Tartalomjegyzék. I. rész Az elsõ lépések

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

PHP. Adatbázisok gyakorlat

AWK programozás, minták, vezérlési szerkezetek

Chat felhasználói segédlet

A beállításokat a készülék menüjében találja. A menübe a képernyı job also sarkában lévı Menü

Szkriptnyelvek. 1. UNIX shell

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

A kontrolladat-szolgáltatás elkészítése

Kapcsolat a külvilággal

Bevezetés a programozásba I.

1. Alapok. #!/bin/bash

AWK programozás, minták, vezérlési szerkezetek

Ellenıri jelentés kitöltési útmutató Játékvezetı ellenır és megyei adminisztrátorok számára

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

1. A NÉPESSÉGNYILVÁNTARTÓ PROGRAM TELEPÍTÉSI FELTÉTELE. A

BME MOGI Gépészeti informatika 13.

Elektronikus levelek. Az informatikai biztonság alapjai II.

Verzió: 1.7 Dátum: Elektronikus archiválási útmutató

6. Alkalom. Kép ClipArt WordArt Szimbólum Körlevél. K é p

NEPTUN 3R DIPLOMA MELLÉKLET NYOMTATÁS BEÁLLÍTÁSA

3. modul - Szövegszerkesztés

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

A DBM függvények használata

7. gyakorlat Sorozatok, Fájlkezelés

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Bevezetés a programozásba I.

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

A Paint program használata

Munka kiszolgálói környezetben

* Az eszköztáron látható menüpontok közül csak a felsoroltak esetén használható a Ctrl.

4. Lecke. Körök és szabályos sokszögek rajzolása. 4.Lecke / 1.

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

S z á m í t ó g é p e s a l a p i s m e r e t e k

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

LCD kezelési útmutató 4.1 verzióhoz

Absztrakt feltöltése az ITDK 2013 konferenciára

1. Alapok. Programozás II

AWK programozás Bevezetés

Útmutató a nyilvántartói rendszer használatához

Információ és kommunikáció

ELTE SAP Excellence Center Oktatóanyag 1

e-szignó Online Szolgáltatások - e-számla rendszer

BASH script programozás II. Vezérlési szerkezetek

A Vonallánc készlet parancsai lehetővé teszik vonalláncok és sokszögek rajzolását.

K o m m u n i k á c i ó

Adatbáziskezelés alapjai. jegyzet

1.2. NFS kliens telepítése és beállítása

Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv

Információ és kommunikáció

Pick Pack Pont kereső és boltválasztó alkalmazás

Listák, szótárak, fájlok Listák, szótárak, fájlok

Útmutató a MATARKA adatbázisból való adatátvételhez

HT2110 ID kártyás beléptetı rendszer

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

WebResponder információs füzetek

Tisztaszınyeg nyilvántartó

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Egy PIC-BASIC program fordítása, betöltése

III. RÉSZ Munka a PHP-vel

Hogyan adjunk át a függvényeinknek értékeket és hogyan kapjuk meg tõlük az eredményt?

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

Általános fiók beállítási útmutató

Jelszavas hozzáférés korlátozás

A C programozási nyelv VI. Parancssori argumentumok File kezelés

A WiFi4EU megfelelőség-ellenőrző összetevő. Végrehajtási útmutató v1.0

A DEA HASZNÁLATA HALLGATÓI DOLGOZATOK (SZAKDOLGOZAT, DIPLOMAMUNKA, TDK DOLGOZAT) FELTÖLTÉSE ESETÉN

A JavaScript főbb tulajdonságai

Java II. I A Java programozási nyelv alapelemei

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

A legfontosabb DOS parancsok

Számítástechnikai és kereskedelmi Kft. tel: 62/ fax: 62/ Jövedelem bavallás

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

M-Fájlok létrehozása MATLAB-ban

EDInet Connector telepítési segédlet

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

Dropbox - online fájltárolás és megosztás

Fontos a pontosság. Miklós Ildikó Középiskolai Matematikai és Fizikai Lapok

Webprogramozás szakkör

viadat Web 1.54 Készítette: TrendCom Kft.

PDF DOKUMENTUMOK LÉTREHOZÁSA

SharePoint Designer 2007

Vezérlési szerkezetek

HTML alapok. A HTML az Internetes oldalak nyelve.

Programozás 7.o Az algoritmus fogalma (ismétlés)

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Webtárhely létrehozása a helyen. Lépések Teendő 1. Böngészőbe beírni: 2. Jobb oldalon regisztrálni (tárhelyigénylés).

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Python bevezető foglalkozás Python bevezető foglalkozás

Internetes Elıjegyzés Elıjegyzési Központon keresztül

PHP-MySQL. Adatbázisok gyakorlat

mintásfal mintásfal :m :sz :dbjobbra :dbfel

Átírás:

Fájlkezelés I.1. Fájlok beágyazása az include() függvénnyel Az include() függvény lehetıséget ad arra, hogy fájlt ágyazzunk be a PHP dokumentumokba. A fájlban szereplı PHP kód úgy hajtódik végre, mintha a fıdokumentum része lenne, ami hasznos, ha egy többoldalas programban külsı kódokat szeretnénk beágyazni. Program (include.php): Az include() használata <head> <title>az include() használata</title> </head> include("beagyazando.php"); Program (beagyazando.php): Engem ágyaztak be. I.2. Fájlok vizsgálata Mielıtt elkezdünk ismerkedni a fájlokkal és könyvtárakkal, fussunk át néhány velük kapcsolatos tudnivalót. A PHP igen sok lehetıséget ad arra, hogy a rendszer ünkben található fájlokon különbözı mőveleteket hajtsunk végre. A következı bekezdésekben ezeket a függvényeket tekintjük át. I.3. Fájl létezésének ellenırzése a file_exists() függvénnyel Fájl létezését a file_exists() függvénnyel vizsgálhatjuk. A file_exists() paramétere egy karakterlánc, amely a kérdéses fájl elérési útját és nevét tartalmazza. A függvény visszatérési értéke true, ha a fájl létezik, egyébként false. if ( file_exists("proba.txt") ) print("a fájl létezik!"); I.4. Fájl vagy könyvtár? Az is_file() függvény azt dönti el, hogy paramétere fájl-e. A paraméterben meg kell adnunk egy elérési utat. Ha a megadott elérési út fájlt jelöl, a függvény visszatérési értéke true, egyébként false lesz. if ( is_file( "proba.txt" ) ) print("a proba.txt egy fájl"); 1

Ellenırizhetjük azt is, hogy az elérési út könyvtárat jelöl-e. Az ellenırzést az is_dir() függvény végzi. Ha a függvény paraméterében megadott elérési út könyvtárat határoz meg, a visszatérési érték true, egyébként false lesz. if ( is_dir( "/tmp" ) ) print "a /tmp egy könyvtár"; I.5. Fájl állapotának lekérdezése Miután megtudtuk, hogy egy fájl létezik és valóban fájl, különféle dolgokat végezhet ünk vele. Általában írunk bele, olvassuk vagy végrehajtjuk. A PHP-ben különbözı függvények állnak rendelkezésre ezen lehetıségek lekérdezésére. Az is_readable() függvénnyel megtudhatjuk, hogy az adott fájl olvasható-e számunkra. UNIX rendszerben lehet, hogy látjuk a fájlt a könyvtárszerkezetben, de nincs jogosultságunk annak olvasására. Ha az is_readable() paraméterében elérési úttal megadott fájl olvasható, visszatérési értéke true, egyébként false lesz. if ( is_readable( "proba.txt" ) ) print "a proba.txt olvasható"; Az is_writeable() függvénnyel megtudhatjuk, hogy az adott fájl írható-e számunkra. Ha az is_writeable() paraméterében elérési úttal megadott fájl írható, visszatérési értéke true, egyébként false lesz. if ( is_writeable( "proba.txt" ) ) print "a proba.txt írható"; Az is_executable() függvénnyel azt tudhatjuk meg, hogy az adott fájl futtatható-e. A visszatérési érték jogosultságunktól és a fájl kiterjesztésétıl függ. Ha az is_executable() paraméterében elérési úttal megadott fájl futtatható, a visszatérési érték true, egyébként false lesz. if ( is_executable( "proba.txt" ) print "a proba.txt futtatható"; I.6. Fájl méretének lekérdezése a filesize() függvénnyel A filesize() függvény a paraméterében elérési úttal megadott fájl bájtban számított méretével tér vissza. A végeredmény false, ha bármilyen hiba történik. print "A proba.txt mérete: "; print filesize( "proba.txt" ); I.7. Egyéb fájlinformációk A fájl utolsó módosításának dátumát a filemtime() függvény segítségével kaphatjuk meg. A függvény paraméterében meg kell adni a fájl elérési útját. Visszatérési értékként az utolsó módosítás dátumát kapjuk meg. Ezen függvény visszatérési értéke UNIX idıbélyeg formátumú, azaz mindig az 1970 január elseje óta eltelt másodpercek száma. A következı példában ezt a számot a date() függvény segítségével olvasható formára alakítjuk. $mtime = filemtime( "proba.txt" ); print "A proba.txt utolsó módosításának dátuma:"; 2

print date("y.m.d. H:i", $mtime); //Egy minta végeredmény: 2000.01.23. 14:26 Program (f-info.php): Egyszerre több fájltulajdonságot megadó függvény <head> <title> Egyszerre több fájltulajdonságot megadó függvény</title> </head> $fajl = "proba.txt"; fileinformaciok( $fajl ); function fileinformaciok( $f ) { if (! file_exists( $f ) ) { print "$f nem létezik <br>"; return; } print "$f ".(is_file( $f )?"":"nem ")."fájl<br>"; print "$f ".(is_dir( $f )?"":"nem ")."könyvtár<br>"; print "$f ".(is_readable( $f )?"":"nem ")."olvasható<br>"; print "$f ".(is_writeable( $f )?"":"nem ")."írható<br>"; print "$f ".(is_executable( $f )?"":"nem ")."futtatható<br>"; print "$f ".(filesize( $f ))."bájt mérető<br>"; print "$f utolsó megnyitásának dátuma: ". date( "Y.m.d. H:i", fileatime( $f ) )."<br>"; print "$f utolsó módosításának dátuma: ". date( "Y.m.d. H:i", filemtime( $f ) )."<br>"; print "$f utolsó változásának dátuma: ". date( "Y.m.d. H:i", filectime( $f ) )."<br>"; } I.8. Fájlok létrehozása és törlése Ha egy fájl nem létezik, a touch() függvény segítségével hozhatjuk létre. A függvény paraméterében meg kell adni egy elérési utat. Ezen az elérési úton próbál meg létrehozni a touch() egy üres fájlt. Ha a fájl már létezik, tartalma nem változik meg, de a módosítás dátuma a touch() függvény végrehajtási idejére módosul. touch("sajat_fajl.txt"); Létezı fájlt törölni az unlink() függvénnyel lehet. Az unlink() paramétere a fájl elérési útja: unlink("sajat_fajl.txt"); A létrehozás, törlés, írás, olvasás, módosítás csak akkor lehetséges egy fájlon, ha a megfelelı jogosultságokkal rendelkezünk. I.9. Fájl megnyitása írásra, olvasásra, hozzáfőzésre Mielıtt elkezdünk dolgozni egy fájllal, meg kell nyitnunk írásra vagy olvasásra. Ezt az fopen() függvénnyel tehetjük meg. A függvény paraméterében meg kell adni a fájl elérési útját és a megnyitási módot. A legtöbbször használt módok az olvasás 3

("r"), írás ("w"), hozzáfőzés ("a"). A függvény visszatérési értéke egy egész szám. Ez az egész szám az úgynevezett fájlazonosító, amelyet változóként tárolhatunk. Ezzel hivatkozhatunk késıbb a fájlra. Fájl olvasásra való megnyitásához a következıt kell beírnunk: $fm = fopen( "proba.txt", 'r' ); Az írásra való megnyitáshoz a következıt: $fm = fopen( "proba.txt", 'w' ); Ha a fájlt hozzáfőzésre akarjuk megnyitni, tehát nem kívánjuk felülírni a tartalmát, csak a végéhez szeretnénk főzni valamit, a következıt kell tennünk: $fa = fopen( "proba.txt", 'a' ); Az fopen() false értékkel tér vissza, ha valamiért nem tudta megnyitni a fájlt, ezért érdemes mindig ellenırizni, hogy sikeres volt-e a megnyitás. Ezt például az if vezérlési szerkezettel tehetjük meg: if ( $fm = fopen( "proba.txt", "w" ) ) { // $fm mel csinálunk valamit } Esetleg használhatunk logikai mőveletet, hogy megszakítsuk a végrehajtást, ha a fájl nem létezik: ($fm = fopen("proba.txt","w")) or die("a fájl sajnos nem nyitható meg!"); Ha az fopen() true értékkel tér vissza, a die() nem hajtódik végre, különben a kifejezés jobb oldalán a die() kiírja a paraméterében szereplı karakterláncot és megszakítja a program futását. Amikor befejeztük a munkát egy fájllal, mindig be kell zárnunk azt. Ezt az fclose() függvénnyel tehetjük meg, amelynek paraméterében azt a fájlazonosítót kell megadnunk, amelyet egy sikeres fopen() végrehajtása során kaptunk: fclose( $fm ); I.10. Olvasás fájlból A PHP-ben egy fájlból különbözı függvények segítségével bájtonként, soronként vagy karakterenként olvashatunk. Sorok olvasása fájlból az fgets() és feof() függvényekkel Miután megnyitottunk egy fájlt, beolvashatjuk a tartalmát sorról sorra, az fgets() függvénnyel. A függvény paraméterében meg kell adni az olvasandó fájl azonosítóját (amit az fopen() függvény ad a megnyitáskor), továbbá második paraméterként kell adnunk egy egész számot is, amely meghatározza, hogy legfeljebb hány bájtot olvasson ki a PHP, amíg sorvége vagy fájlvége jelet nem talál. Az fgets() függvény addig olvas a fájlból, amíg újsor karakterhez ("\n") nem ér, a megadott bájtnyi adatot ki nem olvassa vagy a fájl végét el nem éri. $sor = fgets($fm, 1024); //ahol az $fm az fopen() által visszaadott fájlazonosító 4

Tudnunk kell tehát, mikor érünk a fájl végére. Ezt az feof() függvény adja meg, melynek visszatérési értéke true, ha a fájl végére értünk, egyébként false. A függvény paraméterében egy fájlazonosítót kell megadni. Program (f-olvas.php): Fájl megnyitása és sorról sorra olvasása <head> <title> Fájl megnyitása és sorról sorra olvasása</title> </head> $fajlnev = "proba.txt"; $fm = fopen( $fajlnev, "r" ) or die("$fajlnev nem nyitható meg"); while (!feof( $fm ) ) { $sor = fgets( $fm, 1024 ); print "$sor<br>"; } fclose( $fm ); I.11. Fájlba írás és hozzáfőzés A fájlba írás és a hozzáfőzés nagyon hasonlítanak egymáshoz. Az egyetlen különbség az fopen() hívásában rejlik. Amikor írásra nyitjuk meg a fájlt, akkor az fopen() második paramétereként a "w" karaktert kell megadnunk: $fm = fopen( "proba.txt", "w" ); Minden írási próbálkozás a fájl elején történik. Ha a fájl még nem létezne, a rendszer létrehozza azt. Ha a fájl létezik, tartalma felülíródik a megadott adatokkal. Ha a fájlt hozzáfőzésre nyitjuk meg, az fopen() második paramétereként az "a" karaktert kell megadnunk: $fm = fopen( "proba.txt", "a" ); Hozzáfőzésnél minden adat a fájl végére íródik, megtartva az elızı tartalmat. I.12. Fájlba írás az fwrite() és fputs() függvényekkel Az fwrite() függvény paramétereként egy fájlazonosítót és egy karakterláncot kell megadni. A karakterlánc a megadott fájlba íródik. Az fputs() ugyanígy mőködik. fwrite( $fm, "hello világ" ); fputs( $fm, "hello világ" ); 5

Program (f-ir.php): Fájlba írás és hozzáfőzés <head> <title>fájlba írás és hozzáfőzés</title> </head> $fajlnev = "proba.txt"; print "$fajlnev fájlba írás"; $fm = fopen( $fajlnev, "w" ) or die("$fajlnev nem nyitható meg"); fwrite ( $fm, "Hello világ\n"); fclose( $fm ); print "$fajlnev fájlhoz hozzáfőzés"; $fm = fopen( $fajlnev, "a" ) or die("$fajlnev nem nyitható meg"); fputs ( $fm, "És más dolgok"); fclose( $fm ); I.13. Fájlok zárolása az flock() függvénnyel Az eddig megtanultak igen jól használhatók, ha programjaink csak egyetlen felhasználót szolgálnak ki. A valóságban azonban egy alkalmazás oldalait általában többen is el szeretnék érni egyidıben. Képzeljük el, mi történne, ha egyszerre két felhasználó írna ugyanabba a fájlba. A fájl használhatatlanná válna. Az flock() függvény használatával kizárhatjuk ezt a lehetıséget. Az flock() függvénnyel zárolt fájlt nem olvashatja vagy írhatja más folyamat, amíg a zárolás érvényben van. Az flock() függvény paramétereként egy fájlazonosítót és egy egész számot kell megadni. Ez utóbbi a zárolás típusát határozza meg. Az flock() függvény második paraméterének lehetséges értékei: Egész Lezárás típusa Leírás 1 Megosztott Más folyamatok olvashatják a fájlt, de nem írhatnak bele (akkor használjuk, amikor olvassuk a fájlt) 2 Kizáró Más folyamatok nem olvashatják és nem írhatják a fájlt (akkor használjuk, amikor írunk a fájlba) 3 Felszabadítás A fájl zárolásának megszüntetése Az flock() függvényt a fájl megnyitása után alkalmazzuk zárolásra és az fclose() elıtt oldjuk fel vele a zárat. $fm = fopen( "proba.txt", "a" ); flock( $fm, 2 ); // kizáró lefoglalás // fájlba írás flock( $fm, 3 ); // zárolás feloldása fclose( $fm ); I.14. Dokumentum letöltése távoli címrıl Bár a PHP kiszolgáló-oldali nyelv, esetenként ügyfélként viselkedve adatokat kérhet egy távoli címrıl és a kapott adatokat programunk rendelkezésére bocsáthatja. Ha már jártasak vagyunk a kiszolgálón lévı fájlok kezelésében, nem okozhat komoly 6

gondot a távoli helyen lévı adatok lekérése sem. Az a helyzet ugyanis, hogy a kettı között formailag semmi különbség nincs. Az fopen()-nel ugyanúgy megnyithatunk egy webcímet, ahogy azt egy fájl esetében tennénk. Program (f-webnyit.php): Weboldal megnyitása <head> <title>weboldal letöltése és megjelenítése</title> </head> $weblap = "http://www.php.net/index.php"; $fm = fopen( $weblap, "r" ) or die("a $weblap nem nyitható meg"); while (! feof( $fm )) print fgets( $fm, 1024 ); I.15. Átalakítás IP címek és gépnevek között Ha kiszolgálónk nem is bocsátja rendelkezésünkre a látogató gépének nevét a $_SERVER[ REMOTE_HOST ] változóban, a látogató címéhez minden bizonnyal hozzájuthatunk a $_SERVER[ REMOTE_ADDR ] változóból. A változóra alkalmazva a gethostbyaddr() függvényt megtudhatjuk a látogató gépének nevét. A függvény egy IP címet ábrázoló karakterláncot vár paraméterként és az annak megfelelı gépnévvel tér vissza. Ha hiba lép fel a név elıállítása során, kimenetként a beadott IP címet kapjuk meg változatlanul. Program (gepnev.php): Gépnév lekérdezése <head> <title> Gépnév lekérdezése</title> </head> if ( isset( $_SERVER[ REMOTE_HOST ] ) ) print "Üdvözöljük: $_SERVER[ REMOTE_HOST ]<br>"; elseif ( isset ( $_SERVER[ REMOTE_ADDR ] ) ) print " Üdvözöljük: ".gethostbyaddr( $_SERVER[ REMOTE_ADDR ] )."<br>"; else print " Nem szeretem az ismeretleneket.<br>"; I.16. Levél küldése Leveleket mail() függvény segítségével küldhetünk a legegyszerőbben. Ez a függvény három karakterláncot vár paraméterként. Az elsı a címzett, a második a levél tárgya, a harmadik pedig maga az üzenet. A mail() false értékkel tér vissza, ha problémába ütközik a levél küldése során. A függvénynek lehet egy elhagyható negyedik paramétere is, mellyel szabadon alakíthatjuk az elküldendı 7

levél fejléceit. Az ebben felsorolt fejlécsorokat a CRLF (\r\n) karakterpárossal kell elválasztanunk. Az alábbi példában egy From (Feladó) és egy X-Priority (Fontosság) mezıvel bıvítjük a fejlécet. Megjegyzés: Ez utóbbit csak bizonyos levelezırendszerek veszik figyelembe. Program (mail.php): $cimzett = "valaki@tartomany.hu"; $felado = "masvalaki@masiktartomany.hu"; $targy = "Üdvözlet"; $uzenet = "Ez csak egy próba üzenet!"; mail($cimzett, $targy, $uzenet, "From: $felado\r\nx-priority: 1 (Highest)") or print "A levél elküldése sikertelen"; Megjegyzés: Ha a PHP-t UNIX rendszeren futtatjuk, a Sendmail-t fogja használni, más rendszereken a helyi vagy egy távoli SMTP kiszolgálót fog feladata elvégzéséhez igénybe venni a php.ini fájl SMTP utasítása alapján. Dinamikus képek kezelése A PHP képkezelési mőveletei a GD nevő nyílt forráskódú programkönyvtáron alapulnak, mely segítségével futásidıben hozhatunk létre képeket és kezelhetjük azokat. (A GD honlapja: http://boutell.com/gd/) I.17. Képek létrehozása és megjelenítése A képekkel való munkához elıször szert kell tennünk egy képazonosítóra az imagecreate() függvény segítségével. Ennek két paramétere van, az egyik a kép magasságára vonatkozik, a másik a szélességére. Ekkor egy képazonosítót kapunk vissza, amelyet mindegyik képkezelésre vonatkozó függvény esetében használni fogunk. Miután megkaptuk az azonosítót, már majdnem készen állunk arra, hogy megjelenítsük elsı képünket a böngészıben. Ehhez az imagegif() függvényre van szükségünk, amelynek paramétere a képazonosító. Program (gd-dkep.php): Dinamikusan létrehozott kép Megjegyzés: Fontos, hogy a Content-type fejlécsor minden egyéb elıtt áll. Közölnünk kell a böngészıvel, hogy egy képet küldünk, különben a program kimenetét HTML-ként kezeli. A programot a böngészı már közvetlenül vagy egy IMG elem részeként hívhatja meg. 8

gd-dkep.html: Ez itt a dinamikus kép:<br> <img src="dkep.php" alt="dinamikus kép"> I.18. A szín beállítása A szín beállításához egy színazonosítóra van szükségünk. Ezt az imagecolorallocate() függvénnyel kaphatjuk meg, amelynek paramétere a képazonosító, illetve három 0 és 255 közötti egész szám, amelyek a vörös, zöld és kék színösszetevıket jelentik. Egy színazonosítót kapunk vissza, amellyel késıbb alakzatok, kitöltések vagy szövegek színét határozhatjuk meg. $piros = imagecolorallocate($kep, 255,0,0); Az imagecolorallocate() függvény elsı meghívásakor egyúttal átállítja a paraméterül kapott alakzat színét is. I.19. Vonalak rajzolása Mielıtt egy képre vonalat rajzolhatnánk, meg kell adnunk annak két végpontját. A képet úgy képzeljük el, mint képernyıpontokból álló tömböt, melynek mindkét tengelye 0-tól számozódik. A számozás kezdıpontja a kép bal felsı sarka. Az imageline() függvény két képpont közé rajzol egy egyenest. A függvény paraméterként egy képazonosítót vár, négy egész számot, amelyek az egyenes két végpontjának koordinátáit jelentik, valamint egy színazonosítót. Program (gd-vonal.php): Egyenes rajzolása imageline( $kep, 0, 0, 199, 199, $kek ); Megjegyzés: A vonal a (199, 199) és nem a (200, 200) koordinátákban végzıdik, tekintve, hogy a képpontokat 0-tól kezdve számozzuk. I.20. Alakzatok kitöltése A PHP segítségével ugyanúgy kiszínezhetünk alakzatokat, mint kedvenc grafikai programunkkal. Az imagefill() függvény bemenete egy képazonosító, a kitöltés kezdıkoordinátái, valamint egy színazonosító. A függvény a kezdı képponttal megegyezı színő szomszédos képpontokat a kijelölt színre állítja. 9

Program (gd-kitolt.php): Az imagefill() függvény használata imageline( $kep, 0, 0, 199, 199, $kek ); imagefill( $kep, 0, 199, $kek ); I.21. Téglalap rajzolása A PHP imagerectangle() függvényével téglalapot rajzolhatunk. Az imagerectangle() bemenete egy képazonosító, a téglalap bal felsı és jobb alsó sarkának koordinátája, valamint egy színazonosító. A következı kódrészlet olyan téglalapot rajzol, melynek bal felsı és jobb alsó koordinátái rendre (19, 19) és (179, 179): imagerectangle( $kep, 19, 19, 179, 179, $kek ); Az alakzatot ezután az imagefill() függvénnyel tölthetjük ki. Mivel ez meglehetısen gyakori mővelet, a PHP-ban létezik az imagefilledrectangle() függvény, amely ugyanazokat a bemeneti értékeket várja, mint az imagerectangle(), de az általunk meghatározott színnel ki is tölti a téglalapot. Program (gd-teglalap.php): Téglalap rajzolása imagefilledrectangle( $kep, 19, 19, 179, 179, $kek ); imagegif( $kep ); I.22. Sokszög rajzolása Az imagepolygon() függvény segítségével kifinomultabb alakzatokat is rajzolhatunk. E függvény bemenete egy képazonosító, a pontok koordinátáiból álló tömb, az alakzat pontjainak számát jelzı egész szám és egy színazonosító. Az imagepolygon() bemenetét képezı tömbnek számmal indexeltnek kell lennie. Az elsı két elem az elsı pont koordinátáit adja meg, a második kettı a második pontét és így tovább. Az imagepolygon() függvény megrajzolja a pontok közötti vonalakat és az utolsó pontot automatikusan összeköti az elsıvel. Az imagefilledpolygon() függvény segítségével színnel kitöltött sokszögek hozhatók létre. 10

Program (gd-poligon.php): Sokszög rajzolása $pontok = array( 10, 10, 190, 190, 190, 10, 10, 190); imagefilledpolygon( $kep, $pontok, count($pontok)/2, $kek ); I.23. Körív rajzolása Az imagearc() függvény segítségével köríveket rajzolhatunk. Bemenete egy képazonosító, a középpont koordinátája, a szélességet meghatározó egész szám, a magasságot meghatározó egész szám, egy kezdı- és egy végpont (fokban mérve), valamint egy színazonosító. A köríveket az óramutató járásának megfelelıen, 3 órától kezdve rajzoljuk. A következı kódrészlet egy negyed körívet rajzol ki: imagearc( $kep, 99, 99, 200, 200, 0, 90, $kek ); Ez egy olyan körívrészletet jelenít meg, melynek középpontja a (99, 99) koordinátájú pontban van. A teljes magasság és szélesség 200-200 képpontnyi. A körív 3 óránál kezdıdik és 90 fokot rajzolunk (azaz 6 óráig). Program (gd-kitolt.php): Kör rajzolása imagearc( $kep, 99, 99, 180, 180, 0, 360, $kek ); imagefill( $kep, 99, 99, $kek ); I.24. A színek átlátszóvá tétele A PHP az imagecolortransparent() függvénnyel lehetıvé teszi, hogy a kiválasztott színeket az ábrán belül áttetszıvé tegyük. A függvény bemenete egy kép- és egy színazonosító. Ha a képet megjelenítjük egy böngészıben, az imagecolortransparent() függvénynek átadott szín áttetszı lesz. 11

Program (gd-trans.php): A színek átlátszóvá tétele $pontok = array( 10, 10, 190, 190, 190, 10, 10, 190); imagefilledpolygon( $kep, $pontok, count($pontok)/2, $kek ); imagecolortransparent( $kep, $piros ); I.25. Szövegek kezelése Ha rendszerünkön vannak TrueType betők, a képekre írhatunk is. A GD programkönyvtár mellett szükségünk lesz a FreeType programkönyvtár telepítésére is. Ha ezek rendelkezésünkre állnak, egy képben megjelenı diagramokat és navigációs elemeket is létrehozhatunk. A PHP biztosít számunkra egy olyan eszközt is, amellyel ellenırizhetjük, hogy a beírandó szöveg elfér-e a rendelkezésre álló helyen. I.26. Szövegírás az imagettftext() függvénnyel Az imagettftext() függvénnyel az ábrákra szöveget írhatunk. A függvény nyolc bemenı paramétere a következı: képazonosító, méret, amely a kiírandó szöveg magasságára utal, szög, a kezdı x és y koordináták, színazonosító, a TrueType betőtípus elérési útvonala és a kiírandó szöveg. A kiírandó szöveg kezdıkoordinátája határozza meg, hol lesz a szöveg elsı karakterének alapvonala. Program (gd-ttf.php): Szövegírás az imagettftext() függvénnyel $kep = imagecreate( 400, 200 ); $betukeszlet = "/usr/local/office52/share/fonts/truetype/arial.ttf"; imagettftext( $kep, 50, 0, 20, 100, $kek, $betukeszlet, "Üdvözöljük!" ); Létrehozunk egy 400 képpontnyi széles és 200 képpontnyi magas vásznat, megadunk két színt és a $betukeszlet változóban tároljuk a TrueType betőtípus elérési útját. Ezután ráírjuk az ábrára a Üdvözöljük! szöveget. Figyelem, a betőtípusok a kiszolgálón feltehetıleg más könyvtárban találhatók! Ha nem vagyunk biztosak a helyben, keressük a.ttf kiterjesztéső fájlokat. 12

Az imagettftext() meghívásához az 50-es magasságot, 0 fokos szöget és (20, 100) kezdıkoordinátát adtuk át. Emellett a függvény megkapja még a $kek változóban tárolt színazonosítót és a $betukeszlet változóban tárolt betőtípust, végül a kiírandó szöveget. 13