php - hakkı Öcal
TRANSCRIPT
-
8/14/2019 PHP - Hakk cal
1/163
PHPHP
PHP.......................................................................................................................................................1
nsz...................................................................................................................................................4
PHP Destei veren sitelerle ilgili not:................................................................................... 6PHP'ye Giri................................................................................................................ ........................7
PHP ve Veritaban ................................................................................................................. 10PHP ve Web Sunucusu ...................................................................................... ........... ...... . 12
Unix/Linux Sistemleri.................................................................................................... ....... 12Linux'ta program derlediniz mi? ........................................................................................... 13Gvenli socket ve Internet Eriimi Katman......................................................................... 17Windows-PWS ve IIS ...................................................................................................... ..... 20IIS 4.0 ve 5.0 .................. .................. .................. .................. ................... .................. .................. ............ 20
Browser Yetenek Dosyas: Browscap.ini ............................................................................. 21PWS 4.0 .................. .................. .................. .................. .................. ................... .................. .................. . 22
Windows'da Apache! .......................................................................................................... .. 23Windows'da MySQL ........................................................................................................... .. 24
PHP'nin Yap Talar............................................................................................................................31
PHP programn durdurmak ............................................................................................... .. 31Deikenler ............................................................................................................ ............... 31
Veri Trleri............................................................................................................................. 33Tr Deitirme .................................................................................................. ...... ...... ...... . 34
Fonksiyon .............................................................................................................................. 35Escape ......................................................................................................................... .......... 37Drt yararl fonksiyon ...................................................................................... .................... 42lemciler (Operatrler) .............................................................................................. .......... 44
Bir Arttrmak veya Azaltmak iin .............................................................................. ............ 46Sabit Deerler ........................................................................................................ ............... 49Tarih ve saat Verisi ............................................................................................................... 51
PHP'de Program Denetimi.................................................................................................................53
if Deyimi................................................................................................................................. 53switch deyimi ........................................................................................................................ 55
switch iin ksa yol............................................................................................................... 57Dngler ........................................................................................................................... ..... 57
while dngs ............................................................................................................. ......... 58do..while ........................................................................................................................... .... 59for dngs ................................................................................................................. ......... 60
PHP-1 1
-
8/14/2019 PHP - Hakk cal
2/163
foreach ......................................................................................................... ......................... 61Dngy sona erdirmek iin: break .................................................................................... . 61Dngy srdrmek iin: continue ............................................................... ................ ...... . 62
Fonksiyonlar........................................................................................................................................64
Fonksiyon Tanmlama ve arma ..................................................................................... . 64Fonksiyona varsaylan deer verebiliriz ......................................................... ...... ...... ...... . 70Deikenlerin kapsam: global ve static ............................................................................ 72
Dizi-Deikenler, Nesneler................................................................................................................ .76
Dizi Deikenler ................................................................................................................... ............... 76
Dizi Deiken Oluturalm ................................................................................................... 77Dizi deikenleri kullanalm ................................................................................................ 81Dizi Deikenlerin Dzenlenmesi ................................................................................ ....... 86
Dizileri birletirme: array_merge() ........................................................................................ 86Dizilere deiken ekleme: array_push() .............................................................................. 86Dizinin ilk elemann silme: array_shift() ........................................................... ................... 87Diziden kesit alma: array_slice() .......................................................................................... 87Dizileri sralama: sort() ve rsort() ............................................................................. ............ 87likili dizileri sralama: asort() ve ksort() .............................................................................. 88
Nesneler .......................................................................................................................................... ..... 88
Bir Nesne Oluturalm ..................................................................................................... ..... 89PHP banda......................................................................................................................... ............92
Formlar ................................................................................................................................................ 92
Form'dan GET Metoduyla Gelen Bilgiler ............................................................................ 95URL Kodlar........................................................................................................................... 99Form'dan POST Metoduyla Gelen Bilgiler ......................................................................... 102Form ile ilemciyi Birletirelim ......................................................................... ...... ............ 104Dosya "kartma" ........................................................................................ ......................... 106
Dosya lemleri ........................................................................................................... ........................ 109
Harici Dosya (include) ..................................................................................................... ..... 109include mu, require m? ............................................................................................. .......... 111Dosyalar hakknda bilgi ....................................................................................................... 112
Dosya var m? file_exits() ................................................................................. ...... ...... ...... . 112
Dosya m, dizin mi? is_file() ve is_dir() .................................................................... ............ 112Dosya okunabilir mi? is_readable() .................................................................................... . 113Dosya yazlabilir mi? is_writable() ............................................................... ...... ...... ............ 113Dosya altrlabilir mi? is_executable() ........................................................... ...... ............ 114Dosya boyutu: filesize() ............................................................................... ........... ...... ...... . 114Dosyaya son eriim tarihi: fileadate(), filemtime() ve filectime() ..........................................114
Dosyalar oluturma ve silme ........................................................................................... .... 115
PHP-1 2
-
8/14/2019 PHP - Hakk cal
3/163
-
8/14/2019 PHP - Hakk cal
4/163
nsz
Rasmus Lerdorf, tarihin ilk dnemlerinde yani Internet'in henz yayld 1990'larnortalarna doru i aryordu; hayat yksn bir kiisel sayfada yaynlamak ve bavuraca
yerlere bu sayfann adresini verebileceini dnd. Fakat o dnemde zellikle
niversitelerin Unix alarnda kurulan Web Sunucularda kiisel sayfa yapmak kolay deildi.
Rasmus, kendisi iin hazrlad yazlmn Web'e aina olmayanlar starafndan da kolayca
kullanabileceini dnd. Bu yazlmn byke bir blm Perl dilinden alnmt. Adna
Personal Home Page (Kiisel Ana Sayfa) dedii bu programn ok tutulmas zerine
Rasmus Lerdorf, Internet Sitesi kuran herkesin birinci gn deilse bile ikinci gn farkna
vard ihtiyac, yani bir form yoluyla ziyaretiden gelen bilgileri ilemeyi salayan ekleri
yazd ve programn ad PHP/FI (Form Interpreter/Form Yorumlayc) oldu. Kimileri
programn bu srmne PHP2 adn takt; ve bu ad, programn ok deimesine ve
gelimesine ramen uzun sre deimeden kald.
Rasmus Lerdorf, 1995'in ortalarnda, Zeev Suraski, Stig Bakken, Shane Caraveo ve
Jim Winstead ile bir grup kurdu ve PHP'yi Perl'den dn alma rutinlerle i yapan bir paket
olmaktan kartp, Nesne-Ynelimli (Object-Oriented) bir programlama dili haline getirdi.
Bu grup, bugn PHP4 ad verilen bu dili gelitirmekte ve yeni ilevsellikler kazanmas iin
srekli almaktadr. PHP, Linux gibi, Ak Sistem kurallarna tabidir; isteyen programda
istedii deiiklii yapabilir; ancak bu deiiklikten para kazanamaz ve yapt deiiklikleri
isteyen herkese aklamak zorundadr.
Linux'un nmzdeki yllarda en ok kullanlan iletim sistemi olaca yolundaki
bilgiler kukusuz en ok Linus Torvalds' artt. Linux'un bu baarsndaki en nemli
anahtar nokta olan ak kaynak gelitiriliyor ve dnyann heryerinden yazlm gelitiricilerin
desteini alyor olmas. Ayn baary Web yazlm gelitirme dili PHP de gsteriyor. PHP
bundan iki yl ncesine kadar ad duyulmam basit bir dildi. Ancak imdi gerek performans
PHP-1 4
-
8/14/2019 PHP - Hakk cal
5/163
gerek destek asndan dier Web yazlm gelitirme dilleri ile kolayca yaryor; hatta
bunlar fazlasyla geiyor. Hemen her trl iletim sistemiyle alyor olmas da cabas.
PHP, her trl veritabanyla sorunsuz alyor olmasyla ve Zend derleyicisiyle daha da
yaygnlk ve g kazanacak. PHP ve ak kaynak olarak gelitirilmeye balanan MySQL'inbirlikte kullanldklarnda yakaladklar etkinlik binlerce Dolar verilerek alnan veritaban ve
uygulama dilleriyle yarmann tesinde farklara sahip.
Trkiye'de PHP olduka yeni kullanlmaya baland. Dnyadaki PHP kullanclarnn
tercih ettikleri PHP editr PHPed'i bir Trk'n gelitirmi olmas, hepimize hakl bir gurur
veriyor. Ayrca http://www.php.org.tr adresindeki oluum ok ksa srede Trkiye'de
PHP'nin layk olduu yeri alacan gsteriyor.
Bu kitap PHP'nin 4'nc srmne gre yazdk. Burada verdiimiz rnekleri
uyguladnzda beklenen sonucu alamazsanz, nce sizin sisteminizde kurulu PHP'nin
srmn kontrol etmelisiniz. Bu kitapktaki rnek kodlar PC Life dergisinin Internet
sitesinde, http://www.pclife.com.tr/........../php_kodlar.zip adresinde bulabilirsiniz. Ayrca
bu kitapktaki kodlarn tmnn gerek bir Web sunucuda nasl ilediini grmek iin
http://www.mycgiserver.com/~ocal/ adresine bakabilirsiniz.
Bununla birlikte bir programlama dilinin incelikleri, ancak kodlarnz kendiniz
yazarsanz renilebilir. rnek kodlardan, ancak kendi yazdnz kodlar beklediiniz
sonucu vermedii taktirde, karlatrma amacyla yararlanmalsnz. Sizi biraz da buna
zorlamak iin yer yer konular bu kodlarn yazld varsaym ile ele alacam.
Bugne kadar PHP programlarrna .php3 uzatmasn vermek adeta gelenek halini
almt; ancak PHP'nin 4'nc srmyle birlikte, konfigrasyon ve INF dosyalar,
yaplandrma srasnda iletim sistemlerine ve Web sunucularna varsaylan deer olarak
sadece .php uzatmasn tanmasn bildiriyorlar. PHP programlarnza bundan baka
uzatmalar verecekseniz, Linux'ta Apache konfigrasyon dosyasn, Windows'da ise Registry
kaytlarn deitirmeniz gerekir.
PHP-1 5
-
8/14/2019 PHP - Hakk cal
6/163
ki blm olarak sunacamz PHP kitapnn birinci blmnn yazlmasnda
yurdumuzda PHP kullanclarn eitme ve destekleme hareketinin ncleri Sayn Kayra
Otaner, Serdar Soydemir ve zgr Akan, deerli yardmlarn esirgemediler. kinci
kitapkta yer alacak uygulamalarn tmn bu grup gelitirdi ve Ak Kaynak hareketiningerek temsilcileri olduklarn gstererek, serbeste kullanlmak zere okuyucularmza
sundular. Kendilerine sonsuz teekkrlerimizi sunarz. Bununla birlikte bu kitapkta
varolan hatalarn tm bana aittir.
PHP Destei veren sitelerle ilgili not:
Bu kitapkta bir ka sayfa ilerledikten sonra, yapmak isteyeceiniz ilk ilerden
birinin cretli veya cretsiz PHP destei veren bir Wes sitesi evsahibi (Hosting)
firmas aramak olacan tahmin ediyorum. Bu amala aramalarnza
http://www.pageresource.com/putweb/index.html adresinden balamanz salk
veririm. Eer doruca byle bir evsahibi firmaya ulamak isterseniz
http://www.mycgiserver.com adresine gidebilirsiniz. Kitapn sonunda eitli PHP
kaynaklarnn bir listesini de bulabilirsiniz.
PHP-1 6
-
8/14/2019 PHP - Hakk cal
7/163
PHP'ye Giri
C/C++, Pascal, hatta Visual Basic bilen kiiler iin PHP renmek hemen hemen birleden sonray ayrmak suretiyle yaplabilecek bir itir. Bu dillere aina olmayanlar ise
belki bir ka leden sonralarn ayrmak zorunda kalabilirler! PHP, bir Script dilidir; yani
kodlar dz yaz dosyalar halinde kaydedilir ve kullanlaca ortamda bir yorumlayc
tarafndan yorumlanr. Bu, PHP ile yazacanz programlar, derlemek yani ortaya bir EXE
veya altrlabilir baka bir dosya kartmaya gerek olmad anlamna gelir. Fakat PHP
Script'lerinizi altrabilmek iin bu dili bilen bir programa ihtiyacnz vardr. Bu programn
tek bana (komut istemci penceresinde veya terminal ekrannda) almas mmkn
olduu gibi, Web Server tarafndan da altrlabilir olmas gerekir. Baka bir deyile Web
Sunucu programnn PHP anlar hale getirilmesini salamak zorundayz.
PHP yorumcusu, bugn Zend-ekirdei ad verilen bir Scripting teknolojine dayal
olarak, Zeev Suraski ile Andi Gutmans tarafndan sfrdan, tamamen yeniden yazlm
bulunuyor. Zend, tpk Windows Script Host ve mesela Visual Basic for Applications (VBA)
gibi, iletim sistemine kendisi ile uyumlu Script dilleriyle yazlm programlar altrma
imkan kazandran bir teknolojidir (Zend konusunda ek bilgiyi Internet'te www.zend.com
adresinde bulabilirsiniz.) Bugn bu dilin resm ad "PHP: Hypertext Preprocessor" (Hiper-
metin n-ilemcisi) olarak deitirildi, ve eitli Web Server'larn PHP dili anlamas iin
gerekli yorumlayclar yeniden retlidi. 20 Ocak 200'de srail'de PHP'nin ilk uluslararas
konferans yapld ve 4'nc srmnn betas ortaya kondu.
Peki ama PHP nedir?
PHP ile artk oturup her trl ilevsellii sahip programlar yazabilirsiniz; yani PHP
bal bana uygulama alanlar bulabilecek dzeye ulamtr. Baka bir deyile PHP ile
oyun programndan tutun veritaban ynetimine kadar hemen her trl program
PHP-1 7
-
8/14/2019 PHP - Hakk cal
8/163
yazabilirsiniz. Bizi bu kitapkta ilgilendiren tarafyla PHP, Web Sunucu'ya bir takm iler
yaptrmak iin program yazma dilidir. Tpk CGI/Perl veya ASP ya da ColdFusion, Java
(Javascript deil!) gibi! PHP kodlar, oluturacamz HTML sayfalarnda HTML etiketlerinin
arasnda kendi zel ayrac iinde yazlr:
ster kiisel bilgisayarmzda, ister gerek Internet ortamnda olsun, bir Web
Sunucu, ziyaretinin (Internet istemci programnn, Browser'n) talep ettii dosya adnn
uzatmas olarak ".PHP," ".PHP2," ".PHP3," veya ".PHP4" grnce, kendine kendine, "Yine
bana i kt!" diye dnr! nk Web Server, uzatmas ".htm" veya ".html" olan bir
dosyay, kendi sabit disklerinden birinde bulur ve zahmetsizce, ziyaretinin bilgisayarna
gnderir. Fakat, ".asp," .pl," ".cfm" gibi, ".PHP" uzatmas, Web Sunucu'ya bu sayfay
olduu gibi, alp ziyaretinin Browser'na gndermek yerine, nce PHP yorumlaycy
ararak, ona teslim etmesi gerektiini bildirir. PHP yorumlaycs (yani Windows
ortamnda PHP.exe veya 4'nc srmle gelen PHP4isapi.dll, Unix ve trevlerindealtrlabilir PHP dosyas), kendisine teslim edilen bu belgede nce ""
ayralar arasndaki PHP kodlarn seerek alr ve gerei ne ise onu yapar. Bu ayralarn
iinde kalan kodlar, bizim yaplmasn istediimiz ilemin komutlardr. HTML ile yetinmeyip,
PHP kullanmamzn sebebi, bu komutlarn HTML'in yapayaca eyleri yapmasdr.
HTML'in yapamayaca eylerin banda, Web Sunucusu'nda yaplacak iler vardr.
Szgelimi HTML etiketlerini kullanarak, Web Sunucusu'ndaki bir veritaban dosyasn ap,
iindeki verileri okuyamayz. HTML yoluyla Web Sunucusu'nun sabit disklerindeki dz yaz
dosyalarn da okuyamayz ve bu disklere dosya yazamayz. HTML etiketleri ile Web
ziyaretimizden bilgi edinebilir ve bunlar Sunucu'ya yollayabiliriz; ama o kadar! Bu bilgileri
ie yarar ekle sokmak iin bize Server'da alan bir program gerekir. Server'da alan
PHP-1 8
-
8/14/2019 PHP - Hakk cal
9/163
program, EXE ve DLL veya JSP (Java Server Pages) gibi bir "gerek program"; veya Perl,
ASP ve PHP gibi Script diliyle yazlm bir program olabilir. (Gerek programlar yazanlar,
tabi, sizin Script diliyle yazlm programlara "program" demenize ok kzarlar! Ama bu
Script pogramlarnn program olmasn hi engellemez.)Ne diyorduk? Web Sunucu, ".PHP" uzatmasn grnce telaa kaplr, bu dosyay
PHP yorumlaycsna verir ve o da "" ayralar iindeki kodlar icra eder,
demitik. Bu icraatn sonunda ortaya kan rn eer ziyaretiye gnderilecekse, HTML
etiketleri iinde gnderilir; yani ziyareti asla PHP kodlarn gremez. Kimi zaman PHP
programmzn almas sonucu ortaya ziyaretiye gnderilecek bir rn kmaz; elde
edilen sonu ya baka bir programa (rnein elektronik ileti gnderen bir Sendmail
progamna) hammadde olarak verilir, ya da Server'da sabit diske yazlr. Fakat her
durumda, Web ziyaretimiz bizim PHP kodlarmz gremez; bu Web sayfalarmzda PHP
kodu kullanmamz halinde, sayfalarmzn Browser tarafndan tannmas veya tannmamas
gibi bir durumun ortaya kmamas demektir. Ziyareti ne tr Browser kullanrsa kullansn,
kendisine Sunucu'dan daima saf HTML kodu gelecei iin, sayfalarmz rahata
grebilecektir. Tabi bir nokta var: Sayfalarmzda herhangi bir Browser'n arzal
yorumlad veya hi yorumlayamad HTML etiketleri bulunabilir; ya da sz gelimi
ziyaretiye giden HTML'in iinde Browser'da altrlacak olan baka Script kodlar
bulunabilir; ve Browser bu kodlar anlamayabilir. rnein, HTML sayfanzda VBScript
kodlar kullanm iseniz, Netscape ile sitenize balanm olan kiiler bu kodun
oluturmasn istediiniz etkiyi gremeyeceklerdir; nk Netscape VBScript anlamaz! PHP
ile yazacanz Web programlarnn (eski deyimiyle "sayfalarn") oluturaca HTML
belgesinin Browser trleri ve srmleri ile uyarlln salamak yine Web programcs
olarak sizin sorumluluunuzdadr.
zetlersek, PHP bir CGI programlama dilidir; bu dille, Web Sunucusu ile Web
ziyaretisi arasndaki buluma noktas olan CGI'da bilgi alverii yaplabilir; Sunucu'da
PHP-1 9
-
8/14/2019 PHP - Hakk cal
10/163
bulunan baka programlar altrlabilir ve bylece Web sayfalarmza HTML'in
snrlamalarnn tesinde hareket ve ziyareti ile etkileme olana kazandrlabilir.
Sanrm iyi bir Web programcs olarak u anda ekrana "Merhaba Dnya!"
yazdrmak iin sabrszlanyorsunuz. Ama bunun iin, PHP sayfanz ya PHP-uyumlu bir WebSunucusu'ndaki Web sitenize yklemek, ya da kiisel bilgisayarnzdaki kiiel Web
Sunucusu'na PHP retmek zorundasnz. Bu ikinci yntemi kuvvetle tavsiye ederim;
nk yazacanz PHP programlarn gerek Internet Sunucusunda snamak, bazen arzu
edilmeyen durumlara yol aabilir. Oysa kiinin bu denemeleri, evinde ve iyerinde kendi
bilgisayarnda yapmas, ou zaman daha az baars ve gzyana yol aar! En azndan,
PHP hatalarnz ve gzyalarnz sizden baka gren olmaz!
PHP ve Veritaban
Kiisel bilgisayarnzdaki kiisel Web sunucusuna PHP retme ilemine gemeden
nce, hemen hemen PHP'nin ikiz kardei saylan MySQL'den ve onun rakibi PostgreSQL'den
ksaca sz edelim.
PHP'nin varlk sebeplerinin banda, ticar Unix ve Microsoft Windows iletim
sistemlerinden ayr, ticar olmayan Ak Sistem ortamlarnda alan bir Script dili ile bu
dille kullanlabilecek yine Ak Sistem rn bir veritaban eriim ve ynetim aracna sahip
olmak gelir. Perl, geri PHP'den ok nce Ak Sistem rn olarak, isteyen Web
Programcs'nn cretsiz edinecei bir CGI programlama dili olarak Web'in ilk gnnden
beri Web Programcsnn emrinde idi. Ama Perl, metin dosyalarndan yaz ekmek ve
bunlar biimlendirerek rapor haline getirmek amacyla gelitirilen bir dil olduu iin,
zellikle veritabanna dayal ilemlerde programcya ok glk kartyordu. ASP ise (ASP
destei salayan ve cretsiz Web sitesi veren firmalarn giderek artmasna ve veritaban
konusunda hem kolaylk, hem de byk bir etkinlik salamasna ramen) ounlukla
cretli Web sitesi aldmz ticar amal evsahibi (Hosting) firmalarnn salad bir
teknoloji olarak grld. PHP, tasarmclarnn MySQL ve PostgreSQL teknolojilerini
PHP-1 10
-
8/14/2019 PHP - Hakk cal
11/163
gelitiren kurum ve firmalarla yapt yakn ibirlii sonucu ikinci srmnden itibaren veri-
ynlendirmeli Web uygulamas alannda nemli bir ara olarak belirdi. Dolaysyla, PHP
kurulumu dendii zaman, kendiliinden, MySQL kurulumu da kastedilmi olur. imdi
PostgreSQL da ekleyebiliriz.PHP, bir dildir; MySQL ve PostgreSQL ise bir demet srcdr. PHP ile, Web
Server'a sayfanz Internet ziyaretisine gndermeden nce bir takm komutlar icra
etmesini, bir takm veri dosyalarn ap iindeki bilgileri alp bunlar HTML kodlaryla
bezeyip, Browser'a bildiimiz klasik HTML sayfas olarak gndermesi talimatn veririz.
MySQL ve PostgreSQL ise, Windows sistemlerinde Denetim Masas'nda grdnz ODBC
Veri Kayna Ynetmeni adl ara gibi, bir vertaban sunucusu, yani Database Server
pprogramlardr. Yakn zamana kadar bu iki veritaban ynetim arac arasnda fazla bir
ekime yoktu. Ancak imdi zellikle Linux kullanclar topluluklarnda iki program arasnda
verimlilik testleri yaplyor; hangisinin daha iyi oldununa ilikin youn bir tartma
sryor. PHPBuilder.com uzmanlar, yaptklar bir ok denemede, MySQL'in daha hzl ve
daha etkin altklar sonucuna varyorlar. (Bu konuda daha geni bilgi edinmek iin
Internet'te www://PHPbuilder.com/columns/tim20000705.PHP3 adresine bakabilirsiniz.)
MySQL, bir kullanc lisans 200 Dolar olan ticar bir program iken 2000 yl
ortalarnda GPL (GNU General Public License/GNU Kamusal Lisans) uygulamasna gemi
ve cretsiz datlr hale gelmi bulunuyor. Buna gre MySQL'i bir ticar uygulamann iinde
motor olarak kullanacaksanz reteci firmaya lisans creti demeniz gerekir; bunun
dndaki uygulamalar iin program Internet'ten indirerek kullanabilirsiniz. PHP iin
MySQL'e gerek yoktur. PHP, bir NT veya Win9x tabanl Web Server'da altrlyorsa,
Microsoft'un ODBC srcleri ile alabilir; ve ODBC'nin okuduu btn veritabanlarndan
veri ekebilir. (ODBC'nin Unix-Linux srm de vardr.) Ayrca PHP iin Adabas, dBase,
Empress, FilePro, Informix, InterBase, mSQL, Oracle, Solid, Sybase, Velocis ve bir ok
Unix veritaban yneticisi iin gelitirilmi add-on (sonradan eklenen) modller vardr. PHP,
PHP-1 11
-
8/14/2019 PHP - Hakk cal
12/163
bir ok LDAP istemci program iin yazlm API'lere de sahiptir. PHP ile IMAP, SMTP gibi
Internet elektronik mektup protokollerini kullanmak da mmkndr.
Biz bu kitapkta rneklerimizde ve uygulamalarmzda MySQ'den yararlanacaz.
PHP-MySQL ikilisini kiisel bilgisayarmza kurmak iin nce gerekli programlarInternet'ten indirmemiz gerekir. Bunun iin u adreslerden yararlanabilirsiniz:
http://www.PHP.net/downloads.PHP
http://www.mysql.com/downloads/index.html
PHP ve Web Sunucusu
Bizim amzdan PHP, bir Web sunucu programdr; kurulaca sistemdeki Web
sunucusu ile uyumlu olmas gerekir. 4'nc srm itibariyle, PHP btn Unix-trevisistemler (rnein Linux) ve Microsoft Windows sistemleri ile uyumludur. Birlikte
alabilecei Web sunucu programlar arasnda Apache, IIS, FHTTP, Omni HTTPd, Xitami
ve Windows 95/98 iin PWS (Personal Web Server) vardr. Gerek Internet ortamnda
sunucu programlara PHP yetenei kazandrma ilemi, Web Pnogramcs olarak bizi
ilgilendirmez; bizim iin Internet sitemize evsahiplii yapan Hosting firmasnn PHP destei
verip vermediini bilmek yeter. Fakat tasarmlarmz snayabilmek iin kendi
bilgisayarmza bir kiisel Web Server kurmak ve bu program PHP-uyumlu hale getirmek
gerekir. Burada sadece iki rnek ele alacaz: Linux iin Apache sunucu program ve MS-
Windows iin PWS. Bu iki programdan hangisi sizin sisteminize uygunsa onu kendi
bilgisayarnza kuracanz varsayarak, imdi PHP ve MySQL kurulumu ile uraabiliriz.
Unix/Linux Sistemleri
Kurma ilemine Unix ortamndan balayalm. Burada Unix sistemi dediimiz zaman
Unix'in tekrar biliim haritasnda yerini almasn salayan Linux'u kastediyorum. Bunun iin
nce http://www.PHP.net/ adresini ziyaret etmemiz gerekiyor. Eer PHP uzman
olacaksanz, buras sizin ikinci eviniz olabilir. Downloads kprsn tklayarak alacak
sayfada Unix/Linux iin kaynak kodunu bilgisayarnza aktarn. PHP'yi kuracanz
PHP-1 12
-
8/14/2019 PHP - Hakk cal
13/163
bilgisayarda bir Web sunucu program yoksa, http://www.apache.org/dist/ adresinden
apache_1.3.12.tar.gz (veya daha ileri) dosyasn da indirmeniz gerekir. Unix-Linux
sistemleri iin bilgisayarnzda "gcc C derleyici" bulunmas gerekir. Linux sisteminizde
rnein Red Hat Linux srm 5.2 gibi eski bir gcc derleyici varsa, gcc srm 2.8.1'iInternet'ten bulmanz gerekir.
//////KUTU///////////////////
Linux'ta program derlediniz mi?
Daha nce hi Linux program derlemediyseniz, nce baz kavramlar akla
kavuturalm:
tar: (tape archiver) birden fazla dosyay tek dosya haline getirir ve sktrr.
Teyplere yedekleme amacyla gelitirilmitir. tar dosyalar sktrlmsa uzatmas .gz,
deilse .tar olur.
gcc: GNU'nun C derleyicisidir. nsan tarafndan okunabilen kaynak kodlarn makina
tarafndan okunabilen nesne (object) dosyalarna dntrr. C programlama diliyle
yazlm kaynak kodlar ieren dosyalarn uzantn .c olur. Nesne dosyalarnn adnn
uzants genellikle .o olur. Derleyici balk (header, uzants .h olan) dosyalarn bulamazsa
derleme hatas verir.
make: henz derlenmemi kaynak dosyalarn derleyen yardmc bir programdr.
make, derleme talimatlarn Makefile adl bir dosyadan alr.
ld: GNU'nun balayc (linker) programdr. Nesne dosyalarn ve kitaplk denen
dosyalar birbirine balayarak ortaya altrlabilir bir program dosyas kartr. Genellikle
Makefile'n iinde linker'n altrlmas talimat bulunur ve sizin bu program kullanmanz
gerekmez.
ldconfig : paylalan kitaplk dosyalarn (shared librari) arar. Bu dosyalardan birden
fazla program tarafndan paylalr, ve dosya adlarnda .so bulunur.
./configure : C derleyecisi ve header dosyalarnn nerede olduunu aratrr, ve
vard sonuca gre Makefiles dosyasnda deiiklik yapar.
PHP-1 13
-
8/14/2019 PHP - Hakk cal
14/163
/////////////////KUTU BTT///////////////
PHP, bir Unix/Linux sisteminde mstakil yorumlayc veya Apache Web sunucusunun
bir modl olarak almak zere derlenebilir. PHP, mstakil yorumlayc olarak
kurulduunda, Web sunucusu, her ihtiya halinde PHP yorumlaycsnn bir rneinialtrr. Bu, bir sre sonra Web sunucusunun bulunduu iletim sisteminin yknn
artmasna ve ileyiinde yavalamaya yol aabilir. Oysa PHP, sunucunun bir modl olarak
kurulduunda, bu saknca ortaya kmaz. (Bu zellii ile PHP, klasik CGI/Perl'n alma
tarzndan ayrlr, ASP'nin ve ColdFusion'n alma tarzna yaklar.) Bununla birlikte kt
niyetle veya beceriksizce yazlm PHP programlar modl olarak kurulmu PHP'yi
kertirlerse, Web sunucusunu da kertmi olurlar; oysa mstakil PHP yorumlayc
kerse, Web sunucusuna bir ey olmaz.
Burada yapacamz kurulum ilemi srasnda Linux kurulu olan bilgisayarmza
Apache Web sunucu programn, bu sunucunun kullanaca gvenli Socket katmann
salayacak Mod_SSL programn, bu programn gerektirdii OpenSSL aracn, MySQL
veritaban sunucusunu ve PHP Scripting dilini kurmu olacaz.
PHP'yi Linux ortamnda Apache Web sunucusuna modl olarak kurmak iin srasyla
u ilemleri yapmamz gerekir (Sisteminizde gzip veya gunzip ile gcc and GNU make
kurulu olduunu varsayyorum):
1. Sisteminizi root olarak balatn ve sktrlm olarak alacanz PHP ve Apache
dosyalarn geni yer olan geici bir dizinde an, ve o dizine gidin. Szgelimi, Apache'nin
tar-zip olarak sktrlm kaynak dosyalarnn tmp adl dizinde olduunu varsayalm:
# cd /tmp
# gunzip c apache_1.3.12.tar.gz | tar xf
Burada, indirdiiniz Apache srm farkl ise onun adn yazacaksnz. imdi
Apache'yi atnz klasre gidin ve buradaki configure dosyasn altrn:
# cd apache_1.3.12
# ./configure --prefix=/usr/local/apache
PHP-1 14
-
8/14/2019 PHP - Hakk cal
15/163
Buradaki rnekte Apache'yi /usr/local/apache dizinine koyduumuza dikkat edin.
Bu dizini, bir ok kurulumun varsaym olarak arayaca dizin olduu iin tercih ediyoruz.
Ama isterseniz siz Apache'yi baka dizine de kurabilirsiniz.
2. Sra MySQL veritaban sunucusunda. Linux'ta root oturumunda iken sktrlmdosyalar indirdiiniz geici dizine gein ve dosyalar an; sonra oluturulan dizine
giderek, configure komutu ile veritaban srcsn yaplandrn:
# cd /tmp
# gunzip -dc mysql-3.22.32.tar.gz | tar xvf -
# cd mysql-3.22.32
# configure --prefix=/usr/local/mysql
imdi make komutu ile binary dosyalarn oluturarak, ve sisteme ykleyelim:
# make
# make install
MySQL'in kullanm izinlerini belirlememiz gerekir. Aadaki komutlar yazarken
"parola" kelimesi yerine vermek istediiniz parola kelimesini yazmanz gerekir:
# scripts/mysql_install_db
# cd /usr/local/mysql/bin
# ./safe_mysqld &
# ./mysqladmin -u root password 'parola'
Kurulum ileminin baarl olup olmadn snamak iin, kurulum srasnda
oluturlan rnek veritaban dosyalarn bulunup bulunmadn soruturabilir ve kendimiz
yeni bir veritaban oluturabiliriz. Bunun iin u komutu yazalm:
# BINDIR/mysqlshow -p
# mysql -u root -p
Sistem "Enter password:" karln verdiinde, yukarda kullanm izinlerini
belirlerken yazdnz parolay yazn; MySQL sunucusu alacak ve size kullanc izinlerinin
bulunduu "mysql" ve snama amacyla oluturulan "test" adl iki veritabannn
bulunduunu bildirecektir. imdi kendi veritabanmz oluturalm. MySQL sunucu komut
istemcisi satrna unu yazn (Bilgisayarn verecei karlklardan ayrt etmek iin kendi
yazdklarmz koyu renkle gsteriyoruz):
PHP-1 15
-
8/14/2019 PHP - Hakk cal
16/163
mysql> create database deneme;
Sunucu "Query OK, 1 row affected (0.00 sec)" eklinde karlk verecektir. imdi
bu veritabann seerek iinde deneme adl ve iinde "no" ve "isim" adl iki alan bulunan bir
tablo oluturalm (MySQL komutlar byk harf-kk harf ayrm yapmaz; komutlardan
sonra noktal virgl konur). Burada koyu renkle gsterilen satrlar ve iaretler bize aittir:
mysql> use deneme;
Database changed
mysql> CREATE TABLE books (
-> no int(3) not null auto_increment,
-> isim char(50) not null,
-> unique(no),
-> primary key(no)
-> );
Query OK, 0 rows affected (0.00 sec)
Bakalm tablomuz baarl ekilde olumu mu?
mysql> show tables;
mysql> describe deneme;
Field Type Null Key Default Extra
no int(3) PRI 0 auto_increment
isim char(50)
2 rows in set (0.00 sec)ok gzel! Hem MySQL'i kurmu, hem de ilk tablomuzu oluturmu bulunuyoruz.
MySQL komutlarn daha ayrntl renebilmek iin MySQL'in http://www.mysql.com
adresindeki sitesini ziyaret edebilirsiniz. imdilik MySQL'den kalm ve kuruluma devam
edelim.
3. Sra geldi PHP'ye! PHP kaynak dosyasnn bulunduu geici dizine gein, ve
dosyalar an; sonra alan dosyalarn bulunduu dizine gidin:
# gunzip -c PHP-4.0.1pl2.tar.gz | tar xf -
# cd PHP-4.0.1pl2
imdi configure dosyasn altracaz; bu komutun bir ok opsiyonu vardr;
bunlarn tmn grmek istiyorsanz, "configure --help" komutunu verebilirsiniz. Biz
sadece PHP'ye MySQL ve Apache opsiyonlarn eklemekle yetineceiz:
PHP-1 16
-
8/14/2019 PHP - Hakk cal
17/163
# ./configure --with-mysql=/usr/local/mysql \
--with-xml \
--with-apache=../apache_1.3.12 \
--enable-track-vars
Oluan binary dosyalarn program dosyasna evirerek, ykleyelim:# make
# make install
Oluan ini dosyasn lib dizinine koplayalm:
# cp PHP.ini-dist /usr/local/lib/PHP.ini
PHP.ini dosyasndaki bir ok zellii deitirerek, PHP'nin alma tarzn
ayarlayabilirsiniz; rnein u satr ekleyerek, PHP'nin azam alma sresini
arttrabilirsiniz:
max_execution_time = 60;
///////////////KUTU/////////////////////
Gvenli socket ve Internet Eriimi Katman
Kuracanz Web sunucusu gerek Internet'e alacaksa, sisteminize Mod_SSL
yeteneini kazandrmanz gerekir. Bu sistemin rsaref-2.0 adnda bir eki vardr; ancak
Amerika dnda kurulan Web Sunucularda rsaref-2.0 ekinin kurulmas gerekmez. Apache
sunucusunu sadece PHP dosyalarnz snamak amacyla kendi bilgisayarnza kuruyorsanz,
Mod_SSL kurmak art deildir.
Bu ilemi yapmak zorunda iseniz, nce http://www.openssl.org/ adresinden
openssl-0.9.1c.tar.gz adl dosyay, http://www.modssl.org/ adresinden de mod_ssl-2.6.5-
1.3.12.tar.gz dosyasn indirin. Sonra srasyla u ilemleri yapabilirsiniz:
# gunzip -dc openssl-0.9.5c.tar.gz | tar xvf -
# cd openssl-0.9.x
#./config --prefix=/usr/local/ssl \
-L`pwd`/../rsaref-2.0/local/rsaref -fPIC
# make
# make test
# make install
# cd ..
PHP-1 17
-
8/14/2019 PHP - Hakk cal
18/163
imdi Mod_SSL modln Apache ile kullanlacak ekilde kuralm:
# gunzip -dc mod_ssl-2.6.4-1.3.12.tar.gz |tar xvf -
# cd
# ./configure --with-apache=../apache_1.3.12
# cd ..# cd apache_1.3.12
# SSL_BASE=../openssl-0.9.x \
RSA_BASE=../rsaref-2.0/local \
./configure \
--enable-module=ssl \
--activate-module=src/modules/PHP4/libPHP4.a \
--enable-module=PHP4 \
--prefix=/usr/local/apache \
--enable-shared=ssl
[...ISS'ler buraya arzu ettikleri dier opsiyonlar ekleyebilirler..]
# make
Bu noktada sistem binary dosyalarn oluturulduunu ve kurulumun gerekli
gvenlik sertifikalarn istediini bildirecektir. Sertifika oluturma konusunda fazla bilgi iin,
http://www.modssl.org/docs/2.6/ssl_faq.html#ToC25 adresine bakabilirsiniz.) Diyelim ki
sadece ISS'in yeri, firma ad ve bir iki dier bilgiden oluan zel bir sertifika oluturmakla
yetineceksiniz. Bunun iin u komutu girin ve sistemin soraca sorulara cevap verin:# make certificate TYPE=custom
imdi Apache'yi yeniden kurabiliriz:
# make install
Herey yolunda gittiyse, sistem "You now have successfully built and installed the
Apache 1.3 HTTP server," eklinde balayan uzun bir mesaj verecektir. Bu durumda
Apache sunucusu u komutla balatlabilir:
/usr/local/apache/bin/apachectl start
Apache'yi gvenli iletiim katman destei ile balatmak istiyorsanz u komutu
yazn:
/usr/local/apache/bin/apachectl startssl
//////////////////////KUTU BITTI/////////////////
PHP-1 18
-
8/14/2019 PHP - Hakk cal
19/163
Bu ilemleri baaryla bitirmi olsak bile sistemin altn kontrol etmemiz gerekir.
nce Apache'nin altndan emin olalm. Bunun iin nce Apache'nin yaplandrlmasna
PHP'nun eklendiinden emin olmamz gerekir. Kurulumu buradaki gibi yapt iseniz
/usr/local/apache/conf dizininde bulunan httpd.conf dosyasn an; ve "addtype for PHP4"satrlarn nndeki yorum (#) iaretlerini kaldrn; yani bu satr yorum olmaktan kp
yaplandrma komutu olsun:
#AddType application/x-httpd-PHP .PHP
#AddType application/x-httpd-PHP-source .PHPs
eklindeki satrlar u ekle getirin:
AddType application/x-httpd-PHP .PHP
AddType application/x-httpd-PHP-source .PHPs
imdi Apache sunucusunu altrabilir ve PHP desteinin bulunup bulunmadn
snayabilirsiniz:
# cd /usr/local/apache/bin
# ./apachectl configtest
Syntax OK
# ./apachectl start
./apachectl start: httpd started
"httpd started" ifadesi bize Apache'nin altn gsteriyor. imdi Browser'nz anve HTTP sunucusu olarak Apache'nin adresini yazn. Bu, bilgisayarnzn Domain addr;
Apache'nin kurulu olduu bilgisayarn IP numarasn da yazabilirsiniz.
imdi, bir dzyaz dosyasna unlar yazn:
Dosyay PHP.PHP adyla Apache'nin Web sunucu iin kk dizin sayd klasre
kaydedin. Browser'nzn URL adresi alanna sunucu adyla birlikte dosyann adn yazn.
Aldnz sonu, PHP'nin sistem ve sunucu hakknda ayrntl raporu ise, kendi
kendinizi kutlayabilirsiniz: hem Apache sunucu, hem de PHP alyor!
PHP-1 19
-
8/14/2019 PHP - Hakk cal
20/163
Windows-PWS ve IIS
PHP'yi Windows 95/98/NT/2000 iletim sistemlerinden biri ile alan bilgisayara
kurmak iin nce http://www.PHP.org adresinden PHP-4.0.1pl2-Win32.zip veya daha ileri
srmdeki zip dosyasn almamz gerekir. Bu dosyay an ve iindekileri szgelimi c:\PHPdizinine kopyalayn. (Dizini olutururken "PHP," "PHP" veya "PHP" yazdnza dikkat edin!)
Daha nce Wihdows sistemine PHP 3.x kurmu olanlar PHP 4.0'n kurulumumu
biraz farkl bulacaklardr. Bu, daha nce PHP kiisel ve Internet amal Web sunucuda (PWS
veya IIS) mstakil bir CGI program olarak alrken imdi buna ek olarak (tpk ASP gibi)
DLL yoluyla, bir ISAPI modl olarak almasnn salanm olmasndan kaynaklanyor.
PHP'yi Windows 95 veya NT4.0 sisteminde kurulu bir PWS veya IIS iin
kuracaksnz, nce baz nlemler almanz gerekiyor. NT 4.0 sistemlerinde IIS 4.0'n
bulunduu Option Pack'in kurulmas art. Windows 95 sistemlerinde ise nce DCOM
bileenlerinin gnceletirilmesi gerekiyor. Bu dosyay,
http://download.microsoft.com/msdownload/dcom/95/x86/en/dcom95.exe adresinden
alabilirsiniz.
PHP'yi mstakil alan CGI program olarak kullanmay dnseniz bile daha nceki
srmlerinden farkl olarak baz DLL dosyalarnn Windows dizininde sistem alt-dizinine
kopyalanmas gerekir. Atnz Zip dosyasndan kan ve C:\PHP dizinine kopyaladnz
dosyalar arasnda bulunan MSVCRT.DLL ve PHP4TS.DLL adl dosyalar Windows 9x
sistemlerinde WINDOWS dizininde SYSTEM, NT/2000'de ise WINNT dzininde SYSTEM32
dizinine kopya edin. (Windows, MSVCRT.DLL dosyasnn kullanlmakta olduu bildirerek,
kopyalamay reddederse, kopyalamaya gerek yok demektir.)
I I S 4 . 0 V E 5 . 0
Windows NT/2000'e kurulu olan IIS 4.0 veya 5.0'e PHP destei kazandrmak iin,
nce yukardaki gibi DLL dosyalarn gerekli yere kopyalayn. Atnz Zip dosyasndan
km olan PHP.ini-dist isimli dz yaz dosyasn Notepad ile an ve "extension_dir="
satrn bularak, karsndaki "./" yazsn silip yerine PHP dosyalarn kopyaladnz dizinin
PHP-1 20
-
8/14/2019 PHP - Hakk cal
21/163
adn (rnein C:\PHP) yazn. PHP dizinin adn doru yazdnz kontrol etmekte daima
yarar vardr! Sonra ";browscap =" satrn bulun ve nndeki noktal virgl kaldrarak
karsndaki "extra/browscap.ini" kelimelerini c:\Winnt\browscap.ini olarak deitirin. Bu
dosyay, PHP.ini adyla Winnt dizinine kaydedin. (Windows dizininin Winnt adn tadnvarsayyorum. Sizin Windows dizininiz baka ise, gerekli dzeltmeyi yapmanz gerekir.)
////////////////KUTU///////////////
Browser Yetenek Dosyas: Browscap.ini
Windows sistemine kurulu bir Web Sunucu programna (PWS, IIS veya Apache
Win32) PHP yetenei kazandrabilmek iin PHP'nin talep sahibi Browser'n yeteneklerini bir
dosyadan okumas gerekir. Bu dosyann ad browscap.ini dir.
Internet'te http://asptracker.com/browscap.zip dosyasn alarak an ve kacak
"browscap.txt" dosyasnn adn "browscap.ini" olarak deitirerek Windows/Winnt
klasrne kopyalayn.
//////////////////KUTU BTT/////////////
Internet Services Manager' an; bu ara, NT 4.0'te Start mensnde
Programs/Option Pack'te, 2000'de ise Control Panel/Administrative Tools'dadr. Alacak
pencerede muhtemelen Default Web Server adn tayan Web sunucusunun adn sa
tklayn:
Alan listede Properties maddesini; alan kutuda Home Directory sekmesini sein;
Configuration dmesini tklayn ve yeni bir Application Mappings satr eklemek zere,
Executable kutusuna PHP4isapi.dll dosyasnn tam yolunu ve adn (rnein C:\PHP\
PHP4isapi.dll); Extension kutusuna ise .PHP yazn (IIS 4.0'te Method exclusions kutusunu
bo brakn) ve Script engine kutusuna iaret koyun.
PHP-1 21
-
8/14/2019 PHP - Hakk cal
22/163
ISAPI Filters sekmesini sein. Add dmesini tklayarak yeni bir ISAPI filtresi kayd
yapn. Alacak kutuda filtre ad olarak PHP, yol olarak da PHP4isapi.dll dosyasnn
bulunduu dizinin yolunu (rnein C:\PHP\ PHP4isapi.dll) yazn.
IIS'i tamamen durdurun; ama bunun iin sadece Internet Services Manager'daki
Stop dmesini tklamak yetmez; komut istemci (MSDOS Prompt) penceresinde net stop
iisadmin yazn. Windows, bu servisin bal olduu dier baz hizmetlerin de durdurulacan
bildirince "Y" yazn ve Enter'a basn. imdi IIS'i tekrar balatmak iin ayn pencerede net
start w3svc yazn. Artk IIS'iniz PHP anlar hale gelmi olmal. Bunu, hemen snayalm.
Notepad veya bir baka dzyaz programyla unlar yazn:
Dosyay PHP.PHP adyla IIS'in kk dizin sayd klasre kaydedin. Browser'nzn URL
adresi alanna sunucu adyla birlikte dosyann adn yazn.
Bravo! te yeni bir dil renmi Web sunucuya sahip oldunuz.
P W S 4 . 0
Windows'un 95/98/SE/Me trlerine kiisel Web sunucu program olarak Personal
Web Server (PWS 4.0) kurulmaldr. PHP Zip dosyasndan kacak DLL'leri Windows
dizininde System klasrne kopyaladktan sonra, Zip dosyasndan km olan PHP.ini-dist
isimli dzyaz dosyasn Notepad ile an ve "extension_dir=" satrn bularak, karsndaki
"./" yazsn silip yerine PHP dosyalarn kopyaladnz dizinin adn (rnein C:\PHP) yazn.
PHP dizinin adn doru yazdnz kontrol edin! Sonra ";browscap =" satrn bulun ve
nndeki noktal virgl kaldrarak karsndaki "extra/browscap.ini" kelimelerinic:\Windows\browscap.ini olarak deitirin. Bu dosyay, PHP.ini adyla Windows dizinine
kaydedin. Daha nceki sayfalarda greceiniz ekilde Browscap.ini dosyasnn dosyasn
Windows dizinine kopyalam olmanz gerekir. (Windows dizininin Windows adn tadn
varsayyorum. Sizin Windows dizininiz baka ise, gerekli dzeltmeyi yapabilirsiniz.)
PHP-1 22
-
8/14/2019 PHP - Hakk cal
23/163
imdi, atnz PHP Zip dosyasnn iinden kan PWS-PHP4.reg adl dosyay bir
dzyaz programyla, rnein Notepad ile an. ".PHP"="[PUT PATH HERE]\\PHP4isapi.dll"
yazl satr PHP dosyalarn koyduunuz dizine gre, rnein yle deitirin:
".PHP" = "C:\\PHP\\PHP4isapi.dll"Burada ok dikkat etmeniz gereken nokta, ters-bl iaretlerinin baka yerlerde
normal olarak yazdmz gibi bir adet deil, iki adet olmasdr. Dosyay kaydettikten sonra,
iki kere tklayn ve Windows'un Registry'de deiiklik yapmay isteyip, istemediinize ilikin
sorusuna Evet yantn verin. Tamaam! Sizin de PHP bilen bir PWS'iniz oldu. Ama bunu bir
snayalm. Ve bunu bir Merhaba Dnya program ile yapalm ki, gelenek bozulmasn!
Dzyaz programnzla u metni merhaba.PHP adyla PWS'in Web iin kk dizin
sayd (muhtemelen C:\Inetpub\wwwroot) klasre kaydedin:
Sonra Personal Web Manager kutusunda, Ana balkl blmde, Yaymlama
ksmndaki "http://" diye balayan ve kiisel Web sunucunuzun ad ile devam eden
kpry tklayn. Varsaylan Browser'nz, kiisel Web sunucunuzun ana sayfasn aacaktr.
Browser'n URL adres blmne, merhaba.PHP yazn ve klavyede Enter tuuna basn. Eer
gerekten PWS'iniz, PHP renmise, size ve dnyaya merhaba diyecektir.
///////////////////////KUTU///////////
Windows'da Apache!
NT sisteminizde ISS deil de Apache for Win 32 Web Server programn
altryorsanz, srmne gre httpd.conf veya srm.conf dosyasna u ekleri yapmanz
gerekir:
ScriptAlias /PHP3/"c:/path-to-PHP-dir/"
PHP-1 23
-
8/14/2019 PHP - Hakk cal
24/163
AddType application/x-httpd-PHP3 .PHP3
Action application/x-httpd-PHP3"/PHP3/PHP.exe"
////////////////////////KUTU BTT//////////
Windows'da MySQLPHP, Windows ortamnda, Windows'un ODBC srclerini kullanarak, srcs
bulunan btn veritabanlarna ulaabilir. Ancak Windows ortamnda gelitirseniz bile, Web
sitenizi, Unix tabanl ve ODBC-uyumlu olmayan bir sunucuya gnderebilirsiniz. Bu
durumda sayfalarnzda kullanacanz verileri muhtemelen MySQL araclyla
veritabanndan ekeceksiniz demektir. Bu yzden Windows sisteminize MySQL kurmak ve
veritabanlarn bu arala gelitirmeniz yerinde olur. Unix/Linux ortamnda cretsiz olmakla
birlikte MySQL, Windows iin bedeli paylaml (shareware) olarak edinilebilir. Benioku
dosyasnda belirtildiine gre, program eitim amacyla ve 30 gn amamak kaydyla
kullanyorsanz, cret denmesi gerekmiyor. Dier durumlarda TCX firmasnn Internet'te
http://www.tcx.se adresindeki sitesindeki formlar doldurarak lisans alnmas gerekiyor. Bu
program, MySQL'in http://www.mysql.com/downloads/ adresinden edinebilirsiniz. Bu
adresteki mysql-shareware-3.22.34-win.zip dosyasn alarak, bir geici dizinde an.
(Sisteminiz gerek Internet sunucusu olarak ticar amal hizmet salayacaksa u dosyay
almanz gerekir: http://www.mysql.com/Downloads/MySQL-3.23/mysql-3.23.21-win-
src.zip) Shareware srmn ieren dosyay atnzda ortaya kacak setup.exe program
MySQL'i kuracaktr.
MySQL Server'n Windows'da da tpk Linux'ta olduu gibi altrlmas ve
durdurulmas gerekir. MySQL'in paylam srmn kullanmak iin Windows sistemlerinde
mysqld-shareware.exe programn altrmanz gerekir. DOS komut istemcisini an ve"C:/mysql/bin" dizinine giderek, srasyla u komutlar verin:
mysqld-shareware
mysqlshow
mysqlshow -u root mysql
PHP-1 24
-
8/14/2019 PHP - Hakk cal
25/163
mysqladmin version status proc
imdi MySQL server alyor ve biraz sonra PHP yoluyla kiisel Web Server'nza
hizmet vermeye hazr demektir. Bu komutlar icra ettiiniz srada bir hata mesaj ile
karalarsanz, MySQL'in kuruluunda hata yapm olabilirsiniz. DOS ekrarnda test veMySQLl veri tabanlarnn varln ve hizmete girdiini gsteren mesajlar grrseniz,
MySQL gzelce alyor demektir. Bunu bir de Browser ile ve PHP yoluyla snayalm:
Yukarda IIS'e PHP destei kazandrma almalar srasnda oluturmad iseniz, dz
yaz programnzda u tek satr yazn; php.php adyla, kiisel Web'inizin kk dizinine
kaydedin:
Browser'nz an; URL hanesine rnein http://localhost/PHP.PHP3 yazn. Alacak
sayfada iki eye dikkat edin: MySQL ve ODBC blmleri var m? MySQL blm varsa;
kendinizi yeniden kutlayn! ODBC blm yoksa, muhtemelen sisteminizde Microsoft'un
Open Database Connectivity (Ak Veriban Balants) srcleri kurulu deil demektir.
(Windows'da Denetim Masas'nda ODBC simgesini grmyorsanz, MS'un sitesinden gerekli
kur programn indirmeniz gerekebilir. Linux'ta ise MyODBC program ile bu imkan
kazanabilirsiniz.)
Bir kere daha tekrar etmek gerekirse, PHP ile veritabanna dayanan sayfalar
yapmak iin mutlaka ve sadece MySQL srclerini kullanmak gerekmez. Bunun yerine
MS'un ODBC srclerini kullanabilirsiniz. Ancak Web sitenize evsahiplii yapan firmann
size ODBC destei verip vermediini renmeniz gerekir. Aslnda ayn ekilde, evsahibi
firmann MySQL destei verip vermediini de renmek zorundasnz. (PHP ile MS-ODBCsrclerini kullanabilmek iin Andrew Stopford'un ASPToday sitesindeki
http://www.asptoday.com/articles/20000202.htm yazsnda geni bilgi bulabilirsiniz.)
Gemi olsun. Bana sorarsanz, PHP ile dolu yeni bir hayata balamak iin en
nemli adm attnz. Bundan sonras, sadece PHP dilini renmekten ibaret. Dilin
PHP-1 25
-
8/14/2019 PHP - Hakk cal
26/163
retecilerinden Zeev Suraski, bu yln banda srail'de yaplan ilk uluslararas PHP
Konferans'nda "PHP renmek zor mu?" diye soran bir bilgisayar meraklsna u cevab
veriyordu: "Bir haftadan fazla zaman ayrmanz gerekiyorsa, sizin iin zor demektir!"
PHP-1 26
-
8/14/2019 PHP - Hakk cal
27/163
PHP Dili
PHP bir Script dilidir; PHP ile yazdnz "programlar" birer dzyaz dosyasdr. Dil
gelerini ayrntl olarak ele almadan nce bir iki yazm kuralndan sz edelim.
PHP yorumlaycs, bu "program" altrabilmek iin dosyann iinde PHP
komutlarn arar. PHP komutlar birinci blmde grdmz gibi iki ekilde yazlabilir:
1.
2.
Bunlara PHP komut ayrac denir; birinci tr uzun veya standart ayra saylr;
ikincisine ike "ksa ayra" denir. PHP yorumlaycsnn ksa ayra kullanmasn istemiyorsak,
PHP.ini dosyasndaki, short_open_tag = On: satrn short_open_tag = Off; yapmak yeter.
Bununla birlikte uzun vadede, PHP programlarnzda HTML yerine XML kullanmak
istiyorsanz, imdiden elinizi uzun ayraca altrmanz yerinde olur; nk XML etiketleri
"" eklinde biter.
ASP ile alan Web programclar "
-
8/14/2019 PHP - Hakk cal
28/163
Web sunucusunda bu program aarsanz, ayn sonucu aldnz greceksiniz.
Burada bir yanl anlamaya yol amayalm. Javascript veya VBScript gibi HTML kodlarnn
iine gmdmz ve HTML sayfasnn iinde, Web ziyaretimizin bilgisayarna gnderilen
ve orada (istemci-tarafndan) icra edilen ve yine ayn ekilde SCRIPT> etiketi iine
koyduumuz Script kodlar ile burada etiketi ile ifad eettiimiz PHP kodlarnn
icra yerini kartrmayalm. PHP, nasl bir ayra ve etiket ile yazarsak yazalm, daima
sunucuda altrlar ve ziyaretiye asla PHP kodlar gsterillmez. merhaba2.PHP'nin
alt Browser'da kayna grntlersek, istemciye gelen kodlarn saf-ve-temiz HTML
olduunu greceiz.
PHP kodlarmz, oluturulmasn istediimiz sayfann HTML kodlar ile tabir yerinde
ise iie yazlr. Bunun bir rnei olarak yukardaki dosyay yle deitirerek,
merhaba3.adyla kaydedin:
PHP ile Merhaba
Sayfamzn grntsnde hi bir deiiklik olmamakla birlikte, Browser'a giden
HTML kodlar nemli lde deimi olacaktr.
PHP-1 28
-
8/14/2019 PHP - Hakk cal
29/163
Geri burada henz ihtiyacmz yok; nk bir bakta yazdmz kodun marifetini
anlayabiliyoruz; ama cidd PHP programclna baladmz zaman, hangi satrda neye
niyet ettiimi anlamamz daima mmkn olmayabilir. Biz kendi programmz satr satr
ezberlesek bile, ibirlii yaptmz dier Web programclarnn programmz anlamalarnsalamamz gerekir. Bunu, yorum satrlar ile yapabiliriz. PHP ayralar iinde iki trl
yorum bulunabilir: ok-satrl yorumlar ve tek satrl yorumlar. Birinci grubu, bana "/*" ve
sonuna "*/* iaretleri koyarak, ikinci grubu ise sadece bana *//* iareti koyarak
belirtiriz:
Bunu da PHP yorumcusu asla dikkate almaz
Buraya istediimiz kadar yorum yazabiliriz.
*/
print "Merhaba Dnya!";
// Bu ise PHP'nin tek satrl yorum blm
// Bu satrlar da PHP yorumcusu dikkate almayacaktr.
?>
PHP-1 29
-
8/14/2019 PHP - Hakk cal
30/163
PHP'rir bir dier yorum iareti ise # (Diyez) iaretidir. Bu iaretin banda olrduu
satr da PHP tarafndan dikkate alnmaz:
-
8/14/2019 PHP - Hakk cal
31/163
PHP'nin Yap Talar
PHP, bir programlama dili olarak, deikenler, deikenlerin deerleriyle bir ilemyapmay salayan ilemciler, ilemcilerle oluturulan deyimler ve nihayet bunlarn tmn
toplu olarak kullanmamz salayan ilevlere (fonksiyonlara) sahiptir. PHP, nesne-ynelimli
(object-oriented) bir dil olduu iin, nesne oluturma imkanna ve bunlarn kullanlmasn
salayan metodlara da sahiptir. Btn bu imkanlar kullanarak, PHP ile bir veritabanndan
veri alarak, bunlar HTML etiketlerinin deerleri olarak kullanabiliriz; Web sitemizi ziyaret
eden kiilerden bilgi alabiliriz, bu bilgilerle ilemler yapabiliriz. PHP'nin eitli komutlarn,
deyimlerini ve fonksiyonlarn kullanarak, programmzn alt Web sunucusunun
bulunduu bilgisayara da eitli dosya ilemleri yaptrabiliriz.
////////////////KUTU///////////
PHP programn durdurmak
imdi belki PHP'yi durdurmay hi dnmyorsunuz; ama ilerde bir fonksiyonun
verecei sonucun btn programn durdurulmasn gerektii zamanlar olabilir. PHP'nin
resm el kitabna bile ilk basksnda konulmas unutulmu olan program durdurma komutu,
exit kelimesidir; hi bir parametre almadan alr.
//////////////////KUTU BTT///////////
Bu tr karmak uygulamalara geebilmek iin nce, PHP dilinin unsurlarn biraz
yakndan inceleyelim.
Deikenler
Programclkta ilemlerimizi deikenlerle yaparz. Deikeni bir kap gibi
dnebilirsiniz. Szgelimi "Gn," deikenin ad ise bu deikenin deeri Pazar, Pazartesi,
Sal, vd., olabilir. Her deiken, trne gre, ya bir ya da daha fazla deer tutar. Adndan
PHP-1 31
-
8/14/2019 PHP - Hakk cal
32/163
da anlalaca gibi deikenin deeri deiir! Bu deiiklii biz yapabiliriz; programn
kendisi yapabilir.
PHP'de de, bir ok baka bilgisayar programlama dilinde olduu gibi deikenlerin
iine bir deer konmadan nce tanmlanmas mmkndr; fakat gerekli deildir.Deikenleri adnn nne $ iareti koyarak tanmlarz:
$adi;
$soyadi;
$123;
$sevdigiRenk;
Deikenler, harf, rakam veya alt izgi (_) ile balayabilirler; bu karakterleri
ierebilirler; ama iinde boluk veya dier iaretler bulunamaz. PHP deikenleri her trl
deiken tutabilirler: bir deikenin adnn yazl ekli onun tutabilecei deerin niteliini
belirlemez. Dolaysyla, "$adi" deikenin deeri "Reit" da olabilir, "1255" de olabilir.
PHP'de genellikle deikenleri deerini atayarak belirleriz:
$adi = "Reit";
$soyadi = "Glen";
$123 = 123;
$sevdigiRenk = "yeil";
Deikenler, kullanldklar ileme, tadklar deeri verirler:print $adi;
komutu, eer deeri "Reit" ise "Browser penceresine "Reit" kelimesini yazdrr.
PHP'de zel bir deikene deiken ad olarak kullanlacak deerleri de atayabiliriz:
$adi = "Reit";
$degisken = "adi";
print $$degisken;
Burada Browser penceresine yine "Reit" kelimesi yazlacaktr; nk PHP
$degisken adl deikenin "adi" adl deikeni tuttuunu bilecek ve iki Dolar iaretini
grnce, $degisken'in deerini deil, onun tuttuu deikenin deerini yazacaktr. Bu, size
u anda kark grnebilir. Daha sonra dngleri grdmzde bu teknii bir satrlk kod
ile yzlerce deeri yazdrmakta kullanacaz. Bu teknik yle de kullanlabilir:
PHP-1 32
-
8/14/2019 PHP - Hakk cal
33/163
$degisken = "adi";
$$degisken = "Reit";
print "$adi";
print $$degisken;
print "${$degisken}";
print "${'adi'}";
Buradaki drt "print" komutu da Browser'a "Reit" kelimesini yazdracaktr.
PHP'de bir deikenin tuttuu deer, bir baka deikene atanabilir. Bu ya duragan,
ya da dinamik olarak yaplr. Duragan yntemde:
$birinci_degisken = "Nurcan";
$ikinci_degisken = $birinci_degisken;
$birinci_degisken = "Tlay";
print $ikinci_degisken;Buradaki "print" komutu Browser penceresine "Reit" kelimesini yazdracaktr. ki
deiken arasndaki deer al-verii birinci deikenin tuttuu deeri deitirmeden nce
olduu iin, ikinci deiken birinci deikenin ilk deerini alm oldu. Fakat kimi zaman iki
deiken arasndaki deer al-verii srekli (dinamik) olsun isteriz. PHP, buna, ilk atama
srasnda & iareti kullanrsak izin verir:
$birinci_degisken = "Nurcan";
$ikinci_degisken = &$birinci_degisken;
$birinci_degisken = "Tlay";
print $ikinci_degisken;
Buradaki "print" komutu ise Browser penceresine "Tlay" kelimesini yazdracaktr.
nk iki deiken arasndaki deer al-verii birinci deikenin tuttuu deeri
deitirmeden nce halde, ikinci deikene birinci deikenin deerini dinamik olarak
atam olduk. Atama ilemi srasnda & iareti kullandmz iin, birinci deikenin deeri
deitiinde ikinci deikenin de deeri deiecektir.
Veri Trleri
PHP, deikenlere, tuttuklar deere gre farkl bellek alan tahsis eder; bu
bakmdan verilerimizin tr etkin bir programclk asndan nem tar. Ayrca PHP, dier
PHP-1 33
-
8/14/2019 PHP - Hakk cal
34/163
btn programlama dilleri gibi belirli veri trleri ile belirli ilemleri yapar veya yapamaz.
rnein, ancak iki say arasnda aritmedik toplama yaplabilir. ki metin tutan deiken
aritmetik olarak toplanamaz; ancak ierdikleri deerler ardarda eklenebilir. Ne var ki, PHP
sizin aritmetik toplama m, yoksa ardarda ekleme mi yapmak istediinizi bilmekdurumunda deildir. (PHP'ye 'muazzam dil' dedik; iinde yapay zek var demedik!)
Dolaysyla deerleri 5 ile 6 olan iki deikeni topladnz zaman ortaya 11 yerine 56
karsa, kabahati PHP'de deil, deikenlere veri atayan kiide (byk bir ihtimalle
kendinizde) aramalsnz.
PHP asndan dnyada alt tr deer vardr:
Tamsay (Integer): 5,124, 9834 gibi
ift (Double): 3,567 gibi
Alfanmerik (String): "Reit" gibi
Mantksal (Boolean): doru (true)/yanl (false) gibi
Nesne (Object)
Dizi (Array)
Baz uzmanlara gre, gerekte PHP'de mantksal (boolean) deiken tr yoktur. B
kannn sebebi, PHP'nin true (doru) ya da false (yanl) olarak atadmz deerleri 1 ve
bo/null deerlere evirmesi, mantksal olarak sorgulandnda 0 dndaki tam ve ondalk
deikenleri TRUE, 0' FALSE saymas, ve bo alfanmerik deikenleri FALSE, dolu
alfanmerik deikenleri ise TRUE olarak deerlendirmesidir. Ancak daha sonra
gereceimiz gibi PHP, Mantksal/Boolean adnda bir deiken deitirme fonksiyonuna
sahiptir ve bu tr deikenlerin tr sorulduunda "boolean" karln verir.
Tr Deitirme
Deikenlere atadmz deerlerinin trlerini genellikle biliriz; ama yzlerce
deikenle uratmz bir Web programnda deiken trn unutmak ok kolaydr. Kimi
zaman da deikenlere program yoluyla deer atarz; baka bir deyile programmz baz
deikenleri kendisi oluturabilir, ve bunlara kendisi deer atayabilir. Bu tr program
PHP-1 34
-
8/14/2019 PHP - Hakk cal
35/163
yoluyla atanan deerlerin de trnde kukuya kapldmz anlar olabilir. Bir deikenin
deerinin tr hakknda kukunuz varsa, en emin yol bunu PHP'nin kendisine sormaktr. Bu
sorgulamay gettype() fonksiyonu ile yaparz.
/////////////////KUTU/////////
Fonksiyon
PHP'nin gettype() ve print() gibi, kendi iinde bulunan kullanlmaya hazr bir ok
fonksiyonu vardr. Daha sonra kendi fonksiyonlarmz yazmann yollarn da greceiz.
Programclk dilinde ister dile ait olsun, ister kendimiz yazm olalm, bir fonksiyonu
kullanmaya "fonksiyon arma" denir. Fonksiyonlar da fonksiyon arabilirler. arlan bir
fonksiyon ya kendisinden beklenen ii yapar, ya da kendisini aran ileme veyafonksiyonu bir deer sunar. Buna fonksiyondan dnen deer denir.
////////////////////KUTU BTT///////////
imdi, bir PHP program yazalm, bir takm deikenlere deerler atayalm ve
bunlarn trlerini PHP'ye soralm. Bir dzyaz program ile u metni yazn ve turler.php
adyla kaydedin:
PHP'de Degisken Turleri
-
8/14/2019 PHP - Hakk cal
36/163
print gettype( $sayi ) ; //tamsayi/integer
print "
";print "
";$alfanumerik = "Reit";
print "kinci deikenin ad: \$alfanumerik
";print "Deeri : ";
print "$alfanumerik
";print("Tr : ");
print gettype( $alfanumerik ) ; //alfanmerik/string
print "
";print "
";$ondalik = 5.1234;print "nc deikenin ad: \$ondalik
";print "Deeri : ";
print "$ondalik
";print("Tr : ");
print gettype( $ondalik ) ; //ift,ondalk/double
print "
";print "
";$mantiksal = true;print "nc deikenin ad: \$mantiksal
";print "Deeri : ";
print "$mantiksal
";print("Tr : ");
print gettype( $mantiksal ) ; //mantksal/boolean
print "
";print "
";?>
Bu program altmzda karmza yle bir grntnn gelmesi gerekir:
PHP-1 36
-
8/14/2019 PHP - Hakk cal
37/163
Burada mantksal (boolean) deer olarak doru anlamna true deeri atadmz
halde, PHP'nin bu deikenin deeri olarak 1'i gsterdiine dikkat edin. PHP'de bir
fonksiyon, elde ettii deer doru ise sonu olarak 1 deerini verir. (Yanl/false deerinin
neye evrildiini bulabilir misiniz?) ///////////////KUTU//////////
Escape
turler.php dosyasn yazdysanz, u satrdaki, ters-bl iareti dikkatinizden
kamam olmal:
print "kinci deikenin ad: \$alfanumerik
";Daha nce grdk ki, tek veya ift trnak iine de alsak, PHP, bir deiken adn
grd zaman onun yerine o deikenin tuttuu deeri yazar. PHP bunu, deiken adnn
bandaki $ grerek yaparak. $ iareti gibi PHP iin zel anlam olan iaretlerin
anlamlandrlmasn nlemek ve bu iaretleri dz metin saymasn salamak iin bu
iaretlerin nne ters-bl iareti koyarz. Buna o karakteri kurtarma veya ESCaping denir.
PHP'nin anlaml iaretleri ve bunlarn ESCape-yazl yledir:
\' Tek trnak
\" ift trnak
\\ Ters-bl
\$ Dolar iareti
\n Yeni Satr (New Line)
\r Satr Ba (Return)
\t Sekme (Tab) karakteri
///////////////////////////KUTU////////////////
Kimi zaman bir deikene atadmz deerin trn deitirmek gerekir. Bunu
settype() fonksiyonu ile yaparz. Elimizde byle bir imkan var diye, bir deikenin
alfanmerik (String) olan deerini sayya evirebileceini sanmayn. PHP buna ok kzar!
u rnei de tur_degistir.php adyla kaydedelim:
PHP-1 37
-
8/14/2019 PHP - Hakk cal
38/163
PHP'de Degisken Turleri
-
8/14/2019 PHP - Hakk cal
39/163
settype( $degisken, double ); //ift,ondalk/double
print "Deeri : ";
print "$degisken
";print("Tr : ");
print gettype( $degisken ) ; //ift,ondalk/double
print "
";print "
";print "Drdnc deitirme ilemi: Mantksal/Boolean:
";settype( $degisken, boolean ); // Mantksal/Boolean
print "Deeri : ";
print "$degisken
";print("Tr : ");
print gettype( $degisken ) ; // Mantksal/Booleanprint "
";print "
";?>
Bu program altrdmzda, ilk atadmz deerin ondalk/double olarak
belirlendiine dikkat edin. Bu deerin trn alfanmerik/string olarak deitirdiimizde
deimediini gryoruz. Fakat tamsay/integer'a evirdiimizde PHP deerin tamsay
blmn alyor; ondalk-kesir blmn atyor. Nitekim daha sonra deikerin trn
yeniden ondalk yaptmz halde, atlan bu blm geri gelmiyor. Son olarak deikeni
mantksal ifade olarak deitirdiimizde, deerin doru/true olduunu anlyoruz; deer
olarak bize 1 dnyor. PHP, sfr dndaki tm deerleri doru/true'ya evirir; sfr' ise
yanl/false olarak atar ve bo/null deer verir.
u anda PHP'yi tam bilemediimiz iin nerede kullanlr kestiremiyoruz, ama diyelim
ki burada olduu gibi, deikeni bir daha dzelmeyecek ekilde deiiklie uratmak
istemeyebiliriz; fakat yine de deerinin trn deitirmek isteyebiliriz. Bunu da nerede
PHP-1 39
-
8/14/2019 PHP - Hakk cal
40/163
kullanabiliriz, u anda bilmiyoruz. Ama diyelim ki, byle bir ilem yapmaya ihtiyacmz
oldu! Hatrlyor musunuz, biraz nce zel bir ekilde bir deikene baka bir deikenin
adn deer olarak vererek, aslnda bu deikenin ilk deikenin deerini almasn
salamtk. Burada da ayn teknii kullanabiliriz. Bu kodu da tur_kopyala.php adylakaydedin:
PHP'de Degisken Turleri Kopyalama (Casting)
-
8/14/2019 PHP - Hakk cal
41/163
-
8/14/2019 PHP - Hakk cal
42/163
$degisken adl deikenin deeri deimeden durduu iin nc admda
yptmz ondalk tr olarak kopyalama sonucu yeni deikenin deeri yine kesiri ile
karmza kyor. ////////////////KUTU///////////
Drt yararl fonksiyon
PHP'de deiken deer tr deitirmekte kullanabileceimiz kullanlmaya hazr
fonksiyon vardr. ilerde dngleri ele aldmzda daha ok anlam kazanacak olan bu
deikenleri imdilik bir kenara kaydedin:
isset() ve unset()PHP, bir deiken tanmland anda, sanki iinde deer varm gibi, bilgisayarn
belleinde yer ayrr. Bu bazen bilgisayarn kt kaynaklarn zorlayabilir. isset() fnksiyonu,
PHP'nin bir deikenin iinde deer bulunup bulunmadn snamasn salar. unset() ise
varolan bir deikeni yok eder. Bu iki fonksiyonu birlikte kullanabiliriz ve bo deikenleri
yok ederek, bilgisayarn belliinde yer aabiliriz:
if (isset($bir_degisken)) {
print( $bir_degisken );
}
else {
unset($bir_degisken);
}
Bu kod paras, $bir_degisken isimli dikenin ii bo deise, ieriini
grntleyecek, ii bo ise varlna son verecektir.
empty()
isset() fonksiyonun tersi ileve sahiptir; bir deikene deer atanmamsa, veya
deeri sfr veya bo alfanmerik (null string) ise, doru (True) deeri verir.
$bir_degisken = 123;
echo empty($bir_degisken);
$bir_degisken = "";
PHP-1 42
-
8/14/2019 PHP - Hakk cal
43/163
echo empty($bir_degisken);
Bu program paras Browser penceresine sadece empty() fonksiyonun doru sonu
verdii birinci echo() deyiminde 1 yazdracaktr.
is_string() ,is_integer() ,is_double() ,
Snadklar deikenin aradklar trden deer iermesi halinde doru 'True) sonu
verirler.
-
8/14/2019 PHP - Hakk cal
44/163
-
8/14/2019 PHP - Hakk cal
45/163
$a = 6;
$b = "22/A"
print ($a + $b)
sonu olarak 28'i verecektir; veya
$a = 6;$b = "A/22"
print ($a + $b)
sonu olarak 6 kacaktr. Bu kk deneyi yaparsanz, PHP ile program yazarken
hangi deikenin ne sonu vermesi gerektiini dikkatle dnmek zorunda olduunuzu
grrsnz. Bir kiinin geliri ile adresini toplamak, programc olarak arzu ettiiniz bir ilem
olmayabilir!
Bununla birlikte elimizde bir kiinin ad ve soyad ayr deikenler halinde ise,bunlar birbirine ekleyerek (concatenation) ortaya yeni bir alfanmerik deiken
kartabiliriz:
-
8/14/2019 PHP - Hakk cal
46/163
PHP'nin atama ilemcisinin eittir (=) iareti olduunu hatrlyorsunuz birleik-
atama (combined-assignment) ilemcileri, bu iarete dier aritmetik ilemciler eklenerek
oluturulur.
lemci rnek Anlam+= $a += 5$a = $a + 5
-= $a -= 5 $a = $a - 5
/= $a /=5 $a = $a / 5
*= $a *= 5 $a = $a * 5
%= $a %= 5 $a = $a % 5
.= $a .= "metin" $a = $a" metin"
Bu ilemi zihnimizde, "A deikeninin mevcut deerine 5 ekle, kan sonucu A
deikenin yeni deeri yap!" eklinde canlandrabiliriz.
/////////////////KUTU//////////////
Bir Arttrmak veya Azaltmak iin
Deerleri sadece 1 arttrmak veya azaltmak iin PHP, bir kolaylk salar:
$a++veya ++$a: $a'nn deerini 1 arttrr;
$a--veya --$a: $a'nn deerini 1 eksiltir.
++ veya -- iaretinin deiken adndan nce veya sonra olmasnn sonucu farkl
olur. aretler deikenin adndan nce ise PHP nce deikenin deerini bir arttrr veya
eksiltir, sonra bu yeni deeri ileme katar; iaretler deiken adndan sonra ise, PHP
deikenin o andaki deerini ileme kadar, sonra deeri bir arttrr veya eksiltir.
/////////////////////KUTU BTT/////////////
PHP'nin karlatrma yapmas iin kullandmz ilemciler ise ilem iaretinin sa
ve solundaki deerleri veya deikenlerin deerlerini iaretin belirttii karlatrmay
yaptktan sonra ortaya ya doru (true) ya da yanl (false) sonucunu kartrlar. Sz gelimi,
deeri 6 olan deikenin 5'ten byk olup olmadn snarsak, sonu doru; 5'ten kk
olup olmadn snarsak sonu yanl kacaktr. PHP'nin karlatrma ilemcileri unlardr:
PHP-1 46
-
8/14/2019 PHP - Hakk cal
47/163
lemci rnek rnek $a=6 ise:
== eitse $a == 5 Yanl/False
!= eit deilse $a != 5 Doru/True
=== ayn ise $a === 5 Yanl/False> bykse $a > 5 Douru/True
< kkse $a < 5 Yanl/False
= 5 Doru/Trueveya eitse
PHP'nin karlatrma ilemcileri hem tam ve ondalk say tr deerlerle, hem de
alfanmerik deerlerle kullanlabilir.
Daha ileri aamalarda, bazen deikenlerimizin karlatrmasnn bu kadar basit
olamayacan; kimi zaman iki grup deikenin karlatrlmas gerektii durumlarn
bulunduu greceiz. Diyelim ki, bir rencinin baarl saylmas iin hem vize notunun,
hem de ylsonu snav notunun belirli saylardan byk olmas gerekiyor. Bu durumu ancak
karmak-mantksal snamadan geirmemiz gerekir. Bu snamay iki ayr snama sonucu ile
birlikte kullanrz. rnein:
vize notu yeterli - final notu yetersiz = kalr (yanl/false)
vize notu yeterli - final notu yeterli = geer (doru/true)
PHP'de bu karlatrmay iki grubun arasna koyduumuz iaretlerle yaparz
aretin sa ve sol tarafnn doruluu veya yanl iarete gre nihai sonucun doru veya
yanl olmasn salar. Bu karlatrmalar yaparken u ilemcileri kullanrz:
lemci Ad Anlam rnek
|| veya sol veya sa doru doru || yanl = doru
or veya sol veya sa doru doru || yanl = doru
&& ve sol ve sa doru doru || yanl = yanl
and ve sol ve sa doru doru || yanl = yanl
PHP-1 47
-
8/14/2019 PHP - Hakk cal
48/163
Xor artl-veya Sadece sol veya sa doru doru || yanl = doru
! Deil sol veya sa yanl doru || yanl = doru
"veya" ve "ve" snamalar iin iki ayr ilem iareti bulunmasnn sebebi, PHP'nin
ilem srasyla ilgilidir. Birazdan oraya geliyoruz. imdi, kavranmas kolay olmayan ikilimantksal snamalara bir rnek verelim; yukarda rencinin durumunu PHP komutu olarak
yazalm.
Mantksal karlatrma ilemleri daha da karmak olabilir. rnein, rencinin
gemi saylmas iin ylsonu vize ve final notlarnn 45'dan yksek, ve ya birinci smester
notunun ya da vize ve final notlarnn ortalamasnn 65'den yksek olmas art aranabilir.
(Kabul; kt bir rnek oldu. Ama srf altrma iin!) Bu durumda kodu yle yazmamz
gerekirdi:
PHP-1 48
-
8/14/2019 PHP - Hakk cal
49/163
Burada, PHP nce || veya && iaretinin sonucunu bulacak sonra and veya or
ilemcisinin gereini yapaaktr. Bu kodun verecei sonucu, bilgisayarda altrmadan
tahmin edebilir misiniz? pucu: Bu rencinin yerinde olmak istemezdim!
lem ncelii deyince.. Btn programlama dilleri gibi PHP iin de ilemlerin hangisrada yapld nem tar. "5 + 4 * 2" ileminin sonucu, nce 5 ile 4'n toplanmas ve
sonucun 2 ile arplmas halinde baka, 4'n 2 ile arplmas ve sonucun 5 ile toplanmas
halinde baka olacaktr. Bu bakmdan, PHP'nin hangi ilemi nce yapt, hangi ilemi sonra
yaptn bilmemiz gerekir. PHP'deki ilemlerin yapl sras yledir:
++ ve --
/ * %
+ -
< >
== === | =
&&
||
= += -= /= %= .=
and
xor
or
r.
Sabit Deerler
ster Web, ister Web-d amal olsun, bir programn bazen bandanh sonuna
kadar deeri deimeyen deikene ihtiyac olabilir. "Deeri deimeyen deiken"
teriminin anlamsz olduu kansnda iseniz, bunlara sabit deerler adn da verebilirsiniz!
PHP'de sabit deerler, Script boyunca deimeden kalr.
PHP-1 49
-
8/14/2019 PHP - Hakk cal
50/163
Sabit deerler, deikenlerden farkl ekilde oluturulur. Bunun iin PHP'nin define()
fonksiyonunu kullanrz. Bu fonksiyonun yazm kural yledir:
define ("SABIT_DEGER", deer);
Burada SABIT_DEGER yerine, tanmlamak istediimiz sabit deere vereceimizisim, deer yerine de sabit deeri yazarz. rnek:
Burada tanmladmz DOLAR_KURU sabit-deeri, tpk bir deiken gibikullanlabilir. Fakat bir sabit deeri tanmladktan sonra ieriini deitiremezsiniz. Sabit
deer ile ayn ismi tayan deiken oluturmak mmkndr; ancak ayn ismi tasa da bir
sabit ile deikeni (birinin adnn nnde $ iareti bulunduu iin) kartrmak kolay olmasa
gerek.
Tanmlanm olan bir sabiti yeniden oluturamayz; ama buna teebbs ettiimizde
PHP hata vermez. Bir sabit deerin oluturulmu olup olmadn defined() fonksiyonu ile
anlayabiliriz:
Bu program, bu ekilde ve define() komutunu en st satra alarak altrrsanz,
ikinci altrnzda programn sabit deeri yeniden oluturmay reddettiini grecektiniz.
PHP-1 50
-
8/14/2019 PHP - Hakk cal
51/163
-
8/14/2019 PHP - Hakk cal
52/163
Browser penceresinde "Trke bugn gnlerden Sunday" yazsn okursanz,sunucuda Trke iin blgesel ayar destei yok demektir!
PHP'nin zaman ve tarih belirlemekte kullanabileceiniz balca fonksiyonu getdate()
ise xyle kullanlr.
getdate() Tarih ve saat bilgisini alr ve ve vereceiniz bir isimdeki dizi-deikende
kaydeder. rnek:
$saat_tarih = getdate()
Bu durumda, $saat_tarih dizi deikeninde srasyla u bilgiler yer alr:
32 saniye
57 dakika
6 saat
30 ayn gn says (1-31)
0 haftann gn says (1-7)
7 ayn says (1-12)
2000 yl
211 yln kanc gn
Sunday gnn ad
July ayn ad
964929452 Unix sistemlerinde Epoch biiminde zaman bilgisi
PHP'nin tarih ve saat bilgisini biimlendirmede yararlandmz date() fonksiyonunudaha sonra metin biimlerdirme blmnde ele alacaz
PHP-1 52
-
8/14/2019 PHP - Hakk cal
53/163
PHP'de Program Denetimi
Bilgisayar program, belirli deerlere gre kendi izleyecei yolu kendisi bulmaldr.Bir Web program da ayn mantkla tasarlanr. PHP, bir ksmn daha nceki blmlerde, bir
ksmn da imdi ele aldmz aralar kullanarak, belirli durumlarda belirli istikametlere
gidecek, yeri geldiinde geri dnecek, yeri geldiinde baka blmlere srayacak bir ak
plan tasarlamamza imkan verir.
Web programlarmzda, ziyaretilerimizin sitemizde yaptklar veya yapmak
istediklerini bildirdikleri ie gre sayfalar, bu ilere gre sayfa ierikleri sunarz. Web
programmz ziyaretimizin hareket tarzna ve amacna uygun olarak ilerler. Bir programn
ak plann kontrol etmemizi salayan unsurlar ou zaman programn kendi kendine
karar vermesini salayan aralardr. PHP'de program denetim unsurlar, programn gidi
ynn deitirmemizi veya olduu yerde durmasn ve beklemesini veya bir ii biteviye
yapmasn salar. Bu blmde bu aralar ele alacaz.
if Deyimi
nsan olarak kararlarmz hemen hemen daima "bir ey yle ise byle, yle deilse
yle davranmak" zere almaz myz? PHP programnda if deyimi bunu salar. Kelime
anlam eer olan if deyimi ile programmz karar almaya zorlarz. Ne var programmz
bizim kadar akll olamayaca iin if artnn doru veya yanl olmas durumunda ne
yapacan da ona biz syleriz. if deyimi yle yazlr:
if ( koullar ) {
koullar doru ise yaplacak ilere ilikin komutlar}
elseif (dier koullar) {
dier koullar doru ise yaplacak ilere ilikin komutlar
}
else {
PHP-1 53
-
8/14/2019 PHP - Hakk cal
54/163
dier her durumda yaplacak ilere ilikin komutlar
}
PHP, if ifadesinin doru olmas halinde, ifadeye ait ilk ssl parantezin iindeki
komutlar icra eder; bu artlar doru deilse, elseif deyimi ile ileri srebileceimiz dier bir
grup artn doru olup olmadn snayabiliriz. Bu artlar yerine geliyorsa, PHP, elseif
blmndeki ileri icra eder. Nihayet dier her hangi bir durumda icra edilmesini
istediimiz komutlar else blmnde belirtiriz. PHP, if deyimi doru deilse, deyime ait
ssl parantezin iindeki ileri yapmadan yoluna devam eder; varsa elseif deyiminin
artlarn snar; elseif blm yok fakat else blm varsa bu blmdeki ileri icra eder.
Deyimde else blm de yoksa, PHP yoluna if deyiminden sonraki ilk admdan devam eder.
Bunu bir rnekle belirtelim:
ou zaman if deyimlerini birden fazla koulu snayacak ekilde yazarz; bununla
birlikte elseif ve else blmleri olmadan da yazlabilir:
PHP-1 54
-
8/14/2019 PHP - Hakk cal
55/163
Buradaki if deyimi $parola deikeninin bo alfanmerik olmas halinde ziyaretiyi
uyarak ve grevi bitecektir. Ziyareti bir parola yazmsa, daha sonraki komutlar bu
parolann doru olup olmadn snayabiliriz.
switch deyimi
PHP'de program akn ynlendirmekte kullandmz bir dier unsur, switch
deyimidir. Ad anahtar anlamna gelen switch deyimi, verilen bir deikenin deerinin
sraladmz koullardan hangisine uygun olduunu snar ve o koula ilikin komutlar icra
eder. PHP'nin yapt ii bitirdikten sonra switch deyiminin dna kmasn salayan, break
komutu vardr:
switch ( deiken ) {case KOUL-1 ;
Koul-1 doru ise yaplacak ilere ilikin komutlar
break;
case KOUL-2 ;
Koul-2 doru ise yaplacak ilere ilikin komutlar
break;
case KOUL-3 ;
Koul-3 doru ise yaplacak ilere ilikin komutlar
break;case KOUL-4 ;
Koul-4 doru ise yaplacak ilere ilikin komutlar
break;
......................
......................
default:
dier her durumda yaplacak ilere ilikin komutlar
}
switch deyimini yazarken mutlaka break ifadesini kullanmamz gerekmez; switch
deyiminin ak break ile kesilmemise, program ilk art yerine gelmi olsa bile dier
artlar da snamaya devam eder ve en sondaki default deyimine ulaarak (default'tan
sonra noktal virgl deil iki nokta stste iareti olduuna dikkat edin), bu blmdeki
komutlar icra eder. Ne var ki programclk mantna aykr olabilir: bir deikenin ierii
PHP-1 55
-
8/14/2019 PHP - Hakk cal
56/163
-
8/14/2019 PHP - Hakk cal
57/163
switch iin ksa yol
Kimi zaman uzun uzadya switch deyimi yazmamz gerekmeyebilir; bir deikenin
deerini sadece bir arta uygunluk asndan snamamz gerekir. Bunu soru ve iki nokta
stste iaretleri (? ... :) olarak yazlan ilemci ile yaparz. Diyelim ki, Web sitemizi ziyareteden kiinin parola yazp yazmadn sramak istiyoruz:
Bu kod parac, ziyaretinin parola girip girmediini $parola deikeninin iinin
bo olup olmadna bakarak anlayacak ve $parola deikenin ii bo ise (yani soru
iaretinin sorgulad durumun doru olmas halinde) iki nokta stskte iaretinden nceki
metni $uyar deikenin ierii haline getirecek; $parola deikeninin ii dolu ise (yani
koul yerine gelmiyorsa, durum yanl ise) iki nokta stste iaretinden sonraki metni
$uyar deikeninin ierii yapacaktr. Bir sonraki echo() komutu ise ierii bu snav
sonucuna gre belirlennen $uyar deikeninin deerini Browser penceresinde
grntleyecektir.
/////////////////////////////KUTU BTT///////////////
Dngler
Yukardaki iki denetim gesi de programn ileri doru akn bozmayan aralardr.
Oysa bazen programmzn bir koul gerekleincele kadar yerinde saymas ve koul
gereklemedike ilerlememesi gerekebilir. Kimi zaman da programmza bir ii bitirmeden
ileri gitmemesini biz bildiririz. Program aknn bu tr denetimini dng deyimleri salar.
PHP'de iki tr dng vardr: bir durum devam ettii veya etmedii srece yaplan ve ka
kere tekrar edecei bilinemeyen while dngleri, ve tekrar says belirli for dngleri.
PHP-1 57
-
8/14/2019 PHP - Hakk cal
58/163
while dngs
Bir deikenin ieriinin belirli bir art karlamas veya karlamamas halinde icra
edilir. Burada dikkat edeceimiz nokta, programn icras srasnda deikenin ieriinin
veya koulun deimesinin salanmasdr. Aksi taktirde pgrammz sonsuz dngye girerve muhtemelen ker. while dngs yle yazlr:
while (koul) {
Koul doru ise yaplacak ilere ilikin komutlar
}
Bu yntemin yaygn kullanld alan, bir sayala yaptrlan ilerdir. Aadaki
program while.php adlma kaydedip, alrrsanz, PHP, Browser'n yaz tr boyutunu
1'den 7'ye kadar byterek, ayn metni yazdracaktr:
PHP'de Dng
Programmz, while dngs iindeki iken, sonsuz dngden kurtulabilmek iin,
yazy yazdrdktan sonra, $sayac deikenini bir arttryor. Aksi taktirde, deiken hi bir
zaman while dngsnn bekledii arta kavuarak 7'ye eit hale gelemeyecektir.
(Program, sondaki "$sayac ++;" satrn kaldrarak denerseniz, zararsz bir sonsuz
PHP-1 58
-
8/14/2019 PHP - Hakk cal
59/163
dngnn ne olduunu grebilirsiniz! Ama nce Browser'n dur dmesinin yerinde durup
durmadna bir bakn!)
while dngsn arad artn yerine gelmesi, her zaman burada olduu gibi, tabir
yerinde ise "elle" yaplmaz; dngnn icra ettii komutlar veya fonksiyonlar koulu ierendeikeni deitirebilirler. Szgelimi elektronik ticaret sitemizde Web ziyaretimizin while
iinde yapt alveriin tutarn koul olarak kullanabiliriz ve bu koulu ieren deiken
alveri ile deiebilir.
do..while
while dngs farkettiiniz gibi, ileri srdmz art, iyi yapmadan nce snar; ve
bu art ortadan kalkmamsa (yani henz doru/true ise) yapaca ii yapar; baka bir
deyile while dngsnn yapaca i hi yaplmayabilir. Fakat snamann i yapldktan
sonra yerine getirildii bir ekli de vardr: do..while.. Bu dng ise yle yazlr:
do {
Koul doru ise yaplacak ilere ilikin komutlar
}
while (koul);
Burada grdnz gibi do..while dngs en az bir kere icra edilir; nk artn
snanmas yaplacak ie ilikin komutlardan sonra gelmektedir. Bu dngnn arad artn
dngnn yapt ilerin sonucu veya kod blmnde bizim tarafmzdan gerekletirilmesi
iin igerekli komutlarn bulunmasna dikkat etmelisiniz. Yoksa, bu dng de sonsuzlua
eriir! Yukarda rnei, bu yntemle yazalm:
-
8/14/2019 PHP - Hakk cal
60/163
?>
Bu dngy yazarken, while satrnn sorunda noktal virgl bulunduuna dikkat
edin.
for dngs
PHP'de Web programlarmz, dngnn belirli bir sayda olmasn ve mesela bu
saynn bizim istediimiz basamaklarda artmasn gerektiriyorsa, dngy for deyimiyle
kurabiliriz. Ayrca for deyimi saya gibi artn yerine gelmesini salayacak arttrma vea
eksiltme ilemlerini kendisi yapaca iin, sonsuz dngye girme tehlikesi de hemen
hemen yoktur. Bu dng yle yazlr:
for ( $yeni_degisken atama ; koul ; art basamas ) {
Koul doru ise yaplacak ilere ilikin komutlar
}
for deyiminin ilk gesi, dng sayac olarak kullanlacak bir deiken olukturulmas
ve buna deer atanmasna ilikindir; sonra bir noktal vrigl ile bu sayacn snr olan koul
belirtilir. Yine noktal virgl ile ayrarak, saya deikeninin art hz verilir. Bunu da yine
yukardaki rnekle gsterelim:
Buradaki kod, while ve do..while gre ok daha ksa; ve while dngs sayac
arttrmay salayan satr unutulsa bile alaca halde, for dngs unsurlara ilikin
noktal virgller eksik olursa almayacak ve bize bylece sonsuz dng tehlikesinihatrlatm olacaktr. for dngs kendi sayacn verdiiniz art karlayncaya kendisi
arttracak, yani buradaki rnei gre $saya deikeni 7 oluncaya kadar alacak ve art
karland anda, sona erecektir.
//////////////////KUTU///////////////
PHP-1 60
-
8/14/2019 PHP - Hakk cal
61/163
foreach
PHP'nin programcya ok kolaylk salayan bir dier dngs, foreach dngsdr.
Ancak bir deikenin btn elemanlarn tekrar saysnda esas alan bu dngnn alma
ilkelerini grebilmek iin dizi deiken kavramn ele alm olmamz gerekiyor. imdilik bu
dngnn varln bir kenara yazp, dizi deikenlere kadar, unutabilirsiniz.
////////////////////KUTU BTT///////////////
Dngy sona erdirmek iin: break
Programmzn ak, bazen dngnn durdurulmasn gerektirir. rnein, saya
deikenini ziyaretinin vermesi gerektii ve vermedii durumda, dngnn balamamas
yerinde olur. Programn gerektirdii byle bir sebeple dngy break komutuyla durduruz.Szgelimi aadaki kodda kullandmz $tekrar deikenini deerini ziyaretiden
form yoluyla aldmz varsayalm:
Bu kod parasn, bir sayfa kodunun iine yerletirir ve nce bu ekliyle, danha
sonra $tekrar= 0 yazarak snarsanz, break komutunun ie yaradn greceksiniz.
($tekrar deikeninin deerini, Form yoluyla ziyaretiden deiken deeri almay
reninceye kadar imdilik kaydyla biz yapyoruz. Ayrca buradaki if deyiminin ssl
parantez olmadan yazldna dikkat edin.
PHP-1 61
-
8/14/2019 PHP - Hakk cal
62/163
Dngy srdrmek iin: continue
break ifadesinin dngy tamamen durdurduunu farkettiniz mi? Oysa
programmzn ak, kimi zaman da dngnn sadece belirli bir durumda kendisinden
beklenen ii yapmamakla birlikte byle tmyle kesilmesini de gerektirmez. Yineyukardaki rnee dnersek, saya deikenini ziyaretinin vermesi gerektii ve vermedii
durumda, dngnn tmyle kesilmesini deil de, sadece sayac gsteren $sayac
deikeninin sfrdan byk bir deere ulalmasn beklememiz yerinde olabilir. Bu
devamll continue komutuyla salarz:
Yine bu rnekte kullandmz $sayac deikeninin deerini ziyaretiden form
yoluyla aldmz varsayarak, kodu yle deitirebiliriz:
Bu durumda PHP, conktinue komutunu grd anda for dngsnn geri kalan
ksmn icra etmek yerine baa dnecek ve dngy yeniden icra etmeye balayacaktr.
Dngnn ilk satrnnda kod parasn, bir sayfa kodunun iine yerletirir ve nce bu
ekliyle, danha sonra $sayac= 1 yazarak snarsanz, continue komutunun program saya
deikeninin deeri 1 oluncaya kadar durdurduunu ama bu srada for dngsnn devam
ettiini greceksiniz. ($sayac deikeninin deerini, Form yoluyla ziyaretiden nasl
alacamz daha sonra greceiz.)
PHP-1 62
-
8/14/2019 PHP - Hakk cal
63/163
-
8/14/2019 PHP - Hakk cal
64/163
Fonksiyonlar
Bir bilgisayar programnn kalbi, fonksiyonlardr. Fonksiyonlar, bir kere tanmlanr vebir ok kereler, ihtiya olduu noktada hizmete arlr. Fonksiyonlar genellikle bir i veya
hesaplama yaparlar ve bunun sonucu olarak ortaya yeni bir deer kartrlar. Bu deere
"fonksiyondan dnen deer" denir.
Fonksiyonun bir program iin ne kadar nemli bir unsur olduunu bir rnekle
belirtelim. Diyelim ki Web'de rencilerimizin yl iinde aldklar notlar gsteren bir
programmz var. Bu siteyi ziyaret eden rencilerin, iskterlerse, bir dmeyi tklayarak, o
andaki not ortalamalarn hesap ettirmelerini salamak istiyoruz. Bu hesab yapacak olan
ilem, bir fonksiyondur. Web ziyaretisi dmeyi tklad anda, program, ortalama
hesabn yapacak olan fonksiyonu, o sayfada bul