PHP
Onsoz ................................................................................................................................................. 4
PHP Destei veren sitelerle ilgili not: ................................................................................. 6
PHP'ye Giri....................................................................................................................................... 7
PHP ve Veritabani ............................................................................................................... 10
PHP ve Web Sunucusu ...................................................................................................... 12
Unix/Linux Sistemleri .......................................................................................................... 12
Linux'ta program derlediniz mi? ......................................................................................... 13
Guvenli socket ve Internet Eriimi Katmani ........................................................................ 17
Windows-PWS ve IIS ......................................................................................................... 20
IIS 4.0 ve 5.0 .............................................................................................................................................20
Browser Yetenek Dosyasi: Browscap.ini ............................................................................ 21
PWS 4.0.....................................................................................................................................................22
Windows'da Apache! .......................................................................................................... 23
Windows'da MySQL ........................................................................................................... 24
PHP'nin Yapi Talari ......................................................................................................................... 31
PHP programini durdurmak ............................................................................................... 31
Deikenler ......................................................................................................................... 31
Veri Turleri ........................................................................................................................... 33
Tur Deitirme ................................................................................................................... 34
Fonksiyon ............................................................................................................................ 35
Escape ................................................................................................................................. 37
Dort yararli fonksiyon ......................................................................................................... 42
lemciler (Operatorler) ...................................................................................................... 44
Bir Arttirmak veya Azaltmak icin ........................................................................................ 46
Sabit Deerler ..................................................................................................................... 49
Tarih ve saat Verisi ............................................................................................................. 51
PHP'de Program Denetimi ................................................................................................................ 53
if Deyimi ............................................................................................................................... 53
switch deyimi ...................................................................................................................... 55
switch icin kisa yol.............................................................................................................. 57
Donguler .............................................................................................................................. 57
while dongusu .................................................................................................................... 58
do..while ............................................................................................................................. 59
for dongusu ........................................................................................................................ 60
foreach ................................................................................................................................. 61
PHP-1
1
Donguyu sona erdirmek icin: break .................................................................................... 61
Donguyu surdurmek icin: continue ..................................................................................... 62
Fonksiyonlar ...................................................................................................................................... 64
Fonksiyon Tanimlama ve Cairma .................................................................................... 64
Fonksiyona varsayilan deer verebiliriz ........................................................................... 70
Deikenlerin kapsami: global ve static ........................................................................... 72
Dizi-Deikenler, Nesneler ............................................................................................................... 76
Dizi Deikenler ................................................................................................................................ 76
Dizi Deiken Oluturalim ................................................................................................. 77
Dizi deikenleri kullanalim ............................................................................................... 81
Dizi Deikenlerin Duzenlenmesi ...................................................................................... 86
Dizileri birletirme: array_merge() ...................................................................................... 86
Dizilere deiken ekleme: array_push() ............................................................................. 86
Dizinin ilk elemanini silme: array_shift() ............................................................................. 87
Diziden kesit alma: array_slice() ........................................................................................ 87
Dizileri siralama: sort() ve rsort() ........................................................................................ 87
likili dizileri siralama: asort() ve ksort() ............................................................................ 88
Nesneler ............................................................................................................................................. 88
Bir Nesne Oluturalim ........................................................................................................ 89
PHP bainda ................................................................................................................................... 92
Formlar............................................................................................................................................... 92
Form'dan GET Metoduyla Gelen Bilgiler .......................................................................... 95
URL Kodlari ......................................................................................................................... 99
Form'dan POST Metoduyla Gelen Bilgiler ........................................................................ 102
Form ile ilemciyi Birletirelim .......................................................................................... 104
Dosya "cikartma" ................................................................................................................ 106
Dosya lemleri .................................................................................................................................. 109
Harici Dosya (include) ........................................................................................................ 109
include mu, require mi? ..................................................................................................... 111
Dosyalar hakkinda bilgi ...................................................................................................... 112
Dosya var mi? file_exits() ................................................................................................... 112
Dosya mi, dizin mi? is_file() ve is_dir() ............................................................................... 112
Dosya okunabilir mi? is_readable() .................................................................................... 113
Dosya yazilabilir mi? is_writable() ...................................................................................... 113
Dosya calitirilabilir mi? is_executable() ............................................................................ 114
Dosya boyutu: filesize() ...................................................................................................... 114
Dosyaya son eriim tarihi: fileadate(), filemtime() ve filectime() ......................................... 114
Dosyalar oluturma ve silme ............................................................................................. 115
Dosya acma ......................................................................................................................... 116
PHP-1
2
Bir Fonksiyonu durdurmak icin: Ol! .................................................................................. 116
Dosya okuma: fgets(), fread() ve fgetc() ........................................................................... 118
fseek() ile olcu belirleme .................................................................................................... 120
Dosyaya yazma ve ek yapma: fwrite() ve fputs().............................................................. 121
Kullanimdaki dosyayi kilitleyin!......................................................................................... 122
Dizinlerle lemler ............................................................................................................... 123
Dizin iceriini listeleme: opendir() ve readdir() ................................................................... 123
Dizin oluturma: mkdir() ..................................................................................................... 124
Dizin silme: rmdir() ............................................................................................................. 125
Bir Dosya lemi Ornei: Konuk Defteri ............................................................................ 125
Metin Duzenleme ve Duzenli fadeler .............................................................................................. 130
Temel Alfanumerik Fonksiyonlari .................................................................................................... 130
substr() ............................................................................................................................... 130
trim() ................................................................................................................................... 131
chr() .................................................................................................................................... 131
ord() ................................................................................................................................... 132
strlen() ................................................................................................................................ 132
printf() ve sprintf() ............................................................................................................... 132
number_format() ................................................................................................................ 134
Tarih ve Saat Duzenleme .................................................................................................................. 135
Duzenli fadeler ................................................................................................................................. 137
Eletirme deyimleri ve iaretler ....................................................................................... 137
Duzenli fadelerde Ozel Karakterler ................................................................................... 138
Karakter Gruplari ................................................................................................................ 139
Duzenli fade Fonksiyonlari ............................................................................................... 143
ereg() ve eregi() ................................................................................................................. 144
ereg_replace() ve eregi_replace() ...................................................................................... 145
split() .................................................................................................................................. 146
sql_regcase() ..................................................................................................................... 147
PHP ile Veritabani ............................................................................................................................. 148
MySQL Veritabani ............................................................................................................................. 149
mySQL veri turleri ............................................................................................................... 150
PHP-MySQL likisi ........................................................................................................................... 153
PHP'de Guvenlik ............................................................................................................................... 160
Parola ve SSL ...................................................................................................................... 161
Tirnak areti Sorunu .......................................................................................................... 162
PHP Kaynaklari ................................................................................................................... 162
PHP-1
3
Onsoz
Rasmus Lerdorf, tarihin ilk donemlerinde yani Internet'in henuz yayildii 1990'larin
ortalarina doru i ariyordu; hayat oykusunu bir kiisel sayfada yayinlamak ve bavuracai
yerlere bu sayfanin adresini verebileceini duundu. Fakat o donemde ozellikle
universitelerin Unix alarinda kurulan Web Sunucularda kiisel sayfa yapmak kolay deildi.
Rasmus, kendisi icin hazirladii yazilimin Web'e aina olmayanlar starafindan da kolayca
kullanabileceini duundu. Bu yazilimin buyukce bir bolumu Perl dilinden alinmiti. Adina
Personal Home Page (Kiisel Ana Sayfa) dedii bu programin cok tutulmasi uzerine
Rasmus Lerdorf, Internet Sitesi kuran herkesin birinci gun deilse bile ikinci gun farkina
vardii ihtiyaci, yani bir form yoluyla ziyaretciden gelen bilgileri ilemeyi salayan ekleri
yazdi ve programin adi PHP/FI (Form Interpreter/Form Yorumlayici) oldu. Kimileri
programin bu surumune PHP2 adini takti; ve bu ad, programin cok deimesine ve
gelimesine ramen uzun sure deimeden kaldi.
Rasmus Lerdorf, 1995'in ortalarinda, Zeev Suraski, Stig Bakken, Shane Caraveo ve
Jim Winstead ile bir grup kurdu ve PHP'yi Perl'den odunc alma rutinlerle i yapan bir paket
olmaktan cikartip, Nesne-Yonelimli (Object-Oriented) bir programlama dili haline getirdi.
Bu grup, bugun PHP4 adi verilen bu dili gelitirmekte ve yeni ilevsellikler kazanmasi icin
surekli calimaktadir. PHP, Linux gibi, Acik Sistem kurallarina tabidir; isteyen programda
istedii deiiklii yapabilir; ancak bu deiiklikten para kazanamaz ve yaptii deiiklikleri
isteyen herkese aciklamak zorundadir.
Linux'un onumuzdeki yillarda en cok kullanilan iletim sistemi olacai yolundaki
bilgiler kukusuz en cok Linus Torvalds'i airtti. Linux'un bu baarisindaki en onemli
anahtar nokta olan acik kaynak gelitiriliyor ve dunyanin heryerinden yazilim gelitiricilerin
desteini aliyor olmasi. Ayni baariyi Web yazilim gelitirme dili PHP de gosteriyor. PHP
bundan iki yil oncesine kadar adi duyulmami basit bir dildi. Ancak imdi gerek performans
PHP-1
4
gerek destek acisindan dier Web yazilim gelitirme dilleri ile kolayca yariiyor; hatta
bunlari fazlasiyla geciyor. Hemen her turlu iletim sistemiyle caliiyor olmasi da cabasi.
PHP, her turlu veritabaniyla sorunsuz caliiyor olmasiyla ve Zend derleyicisiyle daha da
yayginlik ve guc kazanacak. PHP ve acik kaynak olarak gelitirilmeye balanan MySQL'in
birlikte kullanildiklarinda yakaladiklari etkinlik binlerce Dolar verilerek alinan veritabani ve
uygulama dilleriyle yarimanin otesinde farklara sahip.
Turkiye'de PHP oldukca yeni kullanilmaya balandi. Dunyadaki PHP kullanicilarinin
tercih ettikleri PHP editoru PHPed'i bir Turk'un gelitirmi olmasi, hepimize hakli bir gurur
veriyor. Ayrica http://www.php.org.tr adresindeki oluum cok kisa surede Turkiye'de
PHP'nin layik olduu yeri alacaini gosteriyor.
Bu kitapcii PHP'nin 4'ncu surumune gore yazdik. Burada verdiimiz ornekleri
uyguladiinizda beklenen sonucu alamazsaniz, once sizin sisteminizde kurulu PHP'nin
surumunu kontrol etmelisiniz. Bu kitapciktaki ornek kodlari PC Life dergisinin Internet
sitesinde, http://www.pclife.com.tr/........../php_kodlar.zip adresinde bulabilirsiniz. Ayrica
bu kitapciktaki kodlarin tumunun gercek bir Web sunucuda nasil ilediini gormek icin
http://www.mycgiserver.com/~ocal/ adresine bakabilirsiniz.
Bununla birlikte bir programlama dilinin incelikleri, ancak kodlarinizi kendiniz
yazarsaniz orenilebilir. Ornek kodlardan, ancak kendi yazdiiniz kodlar beklediiniz
sonucu vermedii taktirde, karilatirma amaciyla yararlanmalisiniz. Sizi biraz da buna
zorlamak icin yer yer konulari bu kodlarin yazildii varsayimi ile ele alacaim.
Bugune kadar PHP programlarrina .php3 uzatmasini vermek adeta gelenek halini
almiti; ancak PHP'nin 4'ncu surumuyle birlikte, konfigurasyon ve INF dosyalari,
yapilandirma sirasinda iletim sistemlerine ve Web sunucularina varsayilan deer olarak
sadece .php uzatmasini tanimasini bildiriyorlar. PHP programlariniza bundan baka
uzatmalar verecekseniz, Linux'ta Apache konfigurasyon dosyasini, Windows'da ise Registry
kayitlarini deitirmeniz gerekir.
PHP-1
5
ki bolum olarak sunacaimiz PHP kitapciinin birinci bolumunun yazilmasinda
yurdumuzda PHP kullanicilarini eitme ve destekleme hareketinin onculeri Sayin Kayra
Otaner, Serdar Soydemir ve Ozgur Akan, deerli yardimlarini esirgemediler. kinci
kitapcikta yer alacak uygulamalarin tumunu bu grup gelitirdi ve Acik Kaynak hareketinin
gercek temsilcileri olduklarini gostererek, serbestce kullanilmak uzere okuyucularimiza
sundular. Kendilerine sonsuz teekkurlerimizi sunariz. Bununla birlikte bu kitapcikta
varolan hatalarin tumu bana aittir.
PHP Destei veren sitelerle ilgili not:
Bu kitapcikta bir kac sayfa ilerledikten sonra, yapmak isteyeceiniz ilk ilerden
birinin ucretli veya ucretsiz PHP destei veren bir Wes sitesi evsahibi (Hosting)
firmasi aramak olacaini tahmin ediyorum. Bu amacla aramalariniza
http://www.pageresource.com/putweb/index.html adresinden balamanizi salik
veririm. Eer doruca boyle bir evsahibi firmaya ulamak isterseniz
http://www.mycgiserver.com adresine gidebilirsiniz. Kitapciin sonunda ceitli PHP
kaynaklarinin bir listesini de bulabilirsiniz.
PHP-1
6
PHP'ye Giri
C/C++, Pascal, hatta Visual Basic bilen kiiler icin PHP orenmek hemen hemen bir
oleden sonrayi ayirmak suretiyle yapilabilecek bir itir. Bu dillere aina olmayanlar ise
belki bir kac oleden sonralarini ayirmak zorunda kalabilirler! PHP, bir Script dilidir; yani
kodlari duz yazi dosyalari halinde kaydedilir ve kullanilacai ortamda bir yorumlayici
tarafindan yorumlanir. Bu, PHP ile yazacainiz programlari, derlemek yani ortaya bir EXE
veya calitirilabilir baka bir dosya cikartmaya gerek olmadii anlamina gelir. Fakat PHP
Script'lerinizi calitirabilmek icin bu dili bilen bir programa ihtiyaciniz vardir. Bu programin
tek baina (komut istemci penceresinde veya terminal ekraninda) calimasi mumkun
olduu gibi, Web Server tarafindan da calitirilabilir olmasi gerekir. Baka bir deyile Web
Sunucu programinin PHP anlar hale getirilmesini salamak zorundayiz.
PHP yorumcusu, bugun Zend-cekirdei adi verilen bir Scripting teknolojine dayali
olarak, Zeev Suraski ile Andi Gutmans tarafindan sifirdan, tamamen yeniden yazilmi
bulunuyor. Zend, tipki Windows Script Host ve mesela Visual Basic for Applications (VBA)
gibi, iletim sistemine kendisi ile uyumlu Script dilleriyle yazilmi programlari calitirma
imkani kazandiran bir teknolojidir (Zend konusunda ek bilgiyi Internet'te www.zend.com
adresinde bulabilirsiniz.) Bugun bu dilin resmi adi "PHP: Hypertext Preprocessor" (Hiper-
metin on-ilemcisi) olarak deitirildi, ve ceitli Web Server'larin PHP dili anlamasi icin
gerekli yorumlayicilari yeniden uretlidi. 20 Ocak 200'de srail'de PHP'nin ilk uluslararasi
konferansi yapildi ve 4'ncu surumunun betasi ortaya kondu.
Peki ama PHP nedir?
PHP ile artik oturup her turlu ilevsellii sahip programlar yazabilirsiniz; yani PHP
bali baina uygulama alanlari bulabilecek duzeye ulamitir. Baka bir deyile PHP ile
oyun programindan tutun veritabani yonetimine kadar hemen her turlu programi
PHP-1
7
yazabilirsiniz. Bizi bu kitapcikta ilgilendiren tarafiyla PHP, Web Sunucu'ya bir takim iler
yaptirmak icin program yazma dilidir. Tipki CGI/Perl veya ASP ya da ColdFusion, Java
(Javascript deil!) gibi! PHP kodlari, oluturacaimiz HTML sayfalarinda HTML etiketlerinin
arasinda kendi ozel ayraci icinde yazilir:
<html>
<?PHP
echo ("Merhaba Dunya!");
?>
</html>
ster kiisel bilgisayarimizda, ister gercek Internet ortaminda olsun, bir Web
Sunucu, ziyaretcinin (Internet istemci programinin, Browser'in) talep ettii dosya adinin
uzatmasi olarak ".PHP," ".PHP2," ".PHP3," veya ".PHP4" gorunce, kendine kendine, "Yine
bana i cikti!" diye duunur! Cunku Web Server, uzatmasi ".htm" veya ".html" olan bir
dosyayi, kendi sabit disklerinden birinde bulur ve zahmetsizce, ziyaretcinin bilgisayarina
gonderir. Fakat, ".asp," .pl," ".cfm" gibi, ".PHP" uzatmasi, Web Sunucu'ya bu sayfayi
olduu gibi, alip ziyaretcinin Browser'ina gondermek yerine, once PHP yorumlayiciyi
cairarak, ona teslim etmesi gerektiini bildirir. PHP yorumlayicisi (yani Windows
ortaminda PHP.exe veya 4'ncu surumle gelen PHP4isapi.dll, Unix ve turevlerinde
calitirilabilir PHP dosyasi), kendisine teslim edilen bu belgede once "<?PHP" ve "?>"
ayraclari arasindaki PHP kodlarini secerek alir ve gerei ne ise onu yapar. Bu ayraclarin
icinde kalan kodlar, bizim yapilmasini istediimiz ilemin komutlaridir. HTML ile yetinmeyip,
PHP kullanmamizin sebebi, bu komutlarin HTML'in yapayacai eyleri yapmasidir.
HTML'in yapamayacai eylerin bainda, Web Sunucusu'nda yapilacak iler vardir.
Sozgelimi HTML etiketlerini kullanarak, Web Sunucusu'ndaki bir veritabani dosyasini acip,
icindeki verileri okuyamayiz. HTML yoluyla Web Sunucusu'nun sabit disklerindeki duz yazi
dosyalarini da okuyamayiz ve bu disklere dosya yazamayiz. HTML etiketleri ile Web
ziyaretcimizden bilgi edinebilir ve bunlari Sunucu'ya yollayabiliriz; ama o kadar! Bu bilgileri
ie yarar ekle sokmak icin bize Server'da calian bir program gerekir. Server'da calian
PHP-1
8
program, EXE ve DLL veya JSP (Java Server Pages) gibi bir "gercek program"; veya Perl,
ASP ve PHP gibi Script diliyle yazilmi bir program olabilir. (Gercek programlari yazanlar,
tabii, sizin Script diliyle yazilmi programlara "program" demenize cok kizarlar! Ama bu
Script pogramlarinin program olmasini hic engellemez.)
Ne diyorduk? Web Sunucu, ".PHP" uzatmasini gorunce telaa kapilir, bu dosyayi
PHP yorumlayicisina verir ve o da "<?PHP" ve "?>" ayraclari icindeki kodlari icra eder,
demitik. Bu icraatin sonunda ortaya cikan urun eer ziyaretciye gonderilecekse, HTML
etiketleri icinde gonderilir; yani ziyaretci asla PHP kodlarini goremez. Kimi zaman PHP
programimizin calimasi sonucu ortaya ziyaretciye gonderilecek bir urun cikmaz; elde
edilen sonuc ya baka bir programa (ornein elektronik ileti gonderen bir Sendmail
progamina) hammadde olarak verilir, ya da Server'da sabit diske yazilir. Fakat her
durumda, Web ziyaretcimiz bizim PHP kodlarimizi goremez; bu Web sayfalarimizda PHP
kodu kullanmamiz halinde, sayfalarimizin Browser tarafindan taninmasi veya taninmamasi
gibi bir durumun ortaya cikmamasi demektir. Ziyaretci ne tur Browser kullanirsa kullansin,
kendisine Sunucu'dan daima saf HTML kodu gelecei icin, sayfalarimizi rahatca
gorebilecektir. Tabii bir nokta var: Sayfalarimizda herhangi bir Browser'in arizali
yorumladii veya hic yorumlayamadii HTML etiketleri bulunabilir; ya da soz gelimi
ziyaretciye giden HTML'in icinde Browser'da calitirilacak olan baka Script kodlari
bulunabilir; ve Browser bu kodlari anlamayabilir. Ornein, HTML sayfanizda VBScript
kodlari kullanmi iseniz, Netscape ile sitenize balanmi olan kiiler bu kodun
oluturmasini istediiniz etkiyi goremeyeceklerdir; cunku Netscape VBScript anlamaz! PHP
ile yazacainiz Web programlarinin (eski deyimiyle "sayfalarin") oluturacai HTML
belgesinin Browser turleri ve surumleri ile uyarliliini salamak yine Web programcisi
olarak sizin sorumluluunuzdadir.
Ozetlersek, PHP bir CGI programlama dilidir; bu dille, Web Sunucusu ile Web
ziyaretcisi arasindaki buluma noktasi olan CGI'da bilgi aliverii yapilabilir; Sunucu'da
PHP-1
9
bulunan baka programlar calitirilabilir ve boylece Web sayfalarimiza HTML'in
sinirlamalarinin otesinde hareket ve ziyaretci ile etkileme olanai kazandirilabilir.
Sanirim iyi bir Web programcisi olarak u anda ekrana "Merhaba Dunya!"
yazdirmak icin sabirsizlaniyorsunuz. Ama bunun icin, PHP sayfanizi ya PHP-uyumlu bir Web
Sunucusu'ndaki Web sitenize yuklemek, ya da kiisel bilgisayarinizdaki kiiel Web
Sunucusu'na PHP oretmek zorundasiniz. Bu ikinci yontemi kuvvetle tavsiye ederim;
cunku yazacainiz PHP programlarini gercek Internet Sunucusunda sinamak, bazen arzu
edilmeyen durumlara yol acabilir. Oysa kiinin bu denemeleri, evinde ve iyerinde kendi
bilgisayarinda yapmasi, cou zaman daha az baarisi ve gozyaina yol acar! En azindan,
PHP hatalarinizi ve gozyalarinizi sizden baka goren olmaz!
PHP ve Veritabani
Kiisel bilgisayarinizdaki kiisel Web sunucusuna PHP oretme ilemine gecmeden
once, hemen hemen PHP'nin ikiz kardei sayilan MySQL'den ve onun rakibi PostgreSQL'den
kisaca soz edelim.
PHP'nin varlik sebeplerinin bainda, ticari Unix ve Microsoft Windows iletim
sistemlerinden ayri, ticari olmayan Acik Sistem ortamlarinda calian bir Script dili ile bu
dille kullanilabilecek yine Acik Sistem urunu bir veritabani eriim ve yonetim aracina sahip
olmak gelir. Perl, gerci PHP'den cok once Acik Sistem urunu olarak, isteyen Web
Programcisi'nin ucretsiz edinecei bir CGI programlama dili olarak Web'in ilk gununden
beri Web Programcisinin emrinde idi. Ama Perl, metin dosyalarindan yazi cekmek ve
bunlari bicimlendirerek rapor haline getirmek amaciyla gelitirilen bir dil olduu icin,
ozellikle veritabanina dayali ilemlerde programciya cok gucluk cikartiyordu. ASP ise (ASP
destei salayan ve ucretsiz Web sitesi veren firmalarin giderek artmasina ve veritabani
konusunda hem kolaylik, hem de buyuk bir etkinlik salamasina ramen) counlukla
ucretli Web sitesi aldiimiz ticari amacli evsahibi (Hosting) firmalarinin saladii bir
teknoloji olarak goruldu. PHP, tasarimcilarinin MySQL ve PostgreSQL teknolojilerini
PHP-1
10
1
Add New Comment