php hakki_Ícal

Upload: arsivlik12

Post on 30-May-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 PHP Hakki_cal

    1/117

    PHPHPnsz...................................................................................................................................................4

    PHP Destei veren sitelerle ilgili not:......................................................................................................................................................................

    5

    PHP'ye Giri........................................................................................................................................6

    PHP ve Veritaban.........................................................................................................................................................................

    8

    PHP ve Web Sunucusu.........................................................................................................................................................................

    9

    Unix/Linux Sistemleri

    ......................................................................................................................................................................9

    Linux'ta program derlediniz mi?......................................................................................................................................................................

    9

    Gvenli socket ve Internet Eriimi Katman......................................................................................................................................................................

    12

    Windows-PWS ve IIS......................................................................................................................................................................

    14

    IIS 4.0 ve 5.0.............................................................................................................................................................................................

    14

    Browser Yetenek Dosyas: Browscap.ini......................................................................................................................................................................

    14

    PWS 4.0.............................................................................................................................................................................................

    15

    Windows'da Apache!......................................................................................................................................................................

    16

    Windows'da MySQL......................................................................................................................................................................

    16

    PHP'nin Yap Talar...........................................................................................................................21

    PHP programn durdurmak.........................................................................................................................................................................

    21

    PHP-1 1

  • 8/14/2019 PHP Hakki_cal

    2/117

    Deikenler.........................................................................................................................................................................

    21

    Veri Trleri.........................................................................................................................................................................

    23

    Tr Deitirme......................................................................................................................................................................

    23

    Fonksiyon.........................................................................................................................................................................

    23

    Escape.........................................................................................................................................................................

    25

    Drt yararl fonksiyon.........................................................................................................................................................................

    29

    lemciler (Operatrler).........................................................................................................................................................................

    30

    Bir Arttrmak veya Azaltmak iin......................................................................................................................................................................

    32

    Sabit Deerler.........................................................................................................................................................................

    34

    Tarih ve saat Verisi

    .........................................................................................................................................................................35

    PHP'de Program Denetimi.................................................................................................................37

    if Deyimi.........................................................................................................................................................................

    37

    switch deyimi.........................................................................................................................................................................

    38

    switch iin ksa yol......................................................................................................................................................................

    39

    Dngler.........................................................................................................................................................................

    40

    while dngs......................................................................................................................................................................

    40

    PHP-1 2

  • 8/14/2019 PHP Hakki_cal

    3/117

    do..while......................................................................................................................................................................

    41

    for dngs......................................................................................................................................................................

    42

    foreach.........................................................................................................................................................................

    42

    Dngy sona erdirmek iin: break......................................................................................................................................................................

    42

    Dngy srdrmek iin: continue......................................................................................................................................................................

    43

    Fonksiyonlar.......................................................................................................................................44

    Fonksiyon Tanmlama ve arma.........................................................................................................................................................................

    44

    Fonksiyona varsaylan deer verebiliriz.........................................................................................................................................................................

    48

    Deikenlerin kapsam: global ve static.........................................................................................................................................................................

    50

    Dizi-Deikenler, Nesneler.................................................................................................................53

    Dizi Deikenler..................................................................................................................................53

    Dizi Deiken Oluturalm.........................................................................................................................................................................

    53

    Dizi deikenleri kullanalm.........................................................................................................................................................................

    56

    Dizi Deikenlerin Dzenlenmesi.........................................................................................................................................................................

    59

    Dizileri birletirme: array_merge()

    ......................................................................................................................................................................59

    Dizilere deiken ekleme: array_push()......................................................................................................................................................................

    60

    Dizinin ilk elemann silme: array_shift()......................................................................................................................................................................

    60

    PHP-1 3

  • 8/14/2019 PHP Hakki_cal

    4/117

    Diziden kesit alma: array_slice()......................................................................................................................................................................

    60

    Dizileri sralama: sort() ve rsort()......................................................................................................................................................................

    60

    likili dizileri sralama: asort() ve ksort()......................................................................................................................................................................

    61

    Nesneler...............................................................................................................................................61

    Bir Nesne Oluturalm.........................................................................................................................................................................

    61

    PHP banda.....................................................................................................................................64

    Formlar ................................................................................................................................................64

    Form'dan GET Metoduyla Gelen Bilgiler.........................................................................................................................................................................

    65

    URL Kodlar.........................................................................................................................................................................

    68

    Form'dan POST Metoduyla Gelen Bilgiler.........................................................................................................................................................................

    71

    Form ile ilemciyi Birletirelim.........................................................................................................................................................................

    72Dosya "kartma".........................................................................................................................................................................

    74

    Dosya lemleri...................................................................................................................................75

    Harici Dosya (include).........................................................................................................................................................................

    76

    include mu, require m?.........................................................................................................................................................................

    77

    Dosyalar hakknda bilgi.........................................................................................................................................................................

    78

    Dosya var m? file_exits()......................................................................................................................................................................

    78

    Dosya m, dizin mi? is_file() ve is_dir()

    PHP-1 4

  • 8/14/2019 PHP Hakki_cal

    5/117

    ......................................................................................................................................................................

    78

    Dosya okunabilir mi? is_readable()......................................................................................................................................................................

    78

    Dosya yazlabilir mi? is_writable()......................................................................................................................................................................

    78

    Dosya altrlabilir mi? is_executable()......................................................................................................................................................................

    78

    Dosya boyutu: filesize()......................................................................................................................................................................

    79

    Dosyaya son eriim tarihi: fileadate(), filemtime() ve filectime()......................................................................................................................................................................

    79

    Dosyalar oluturma ve silme.........................................................................................................................................................................

    79

    Dosya ama.........................................................................................................................................................................

    80

    Bir Fonksiyonu durdurmak iin: l!.........................................................................................................................................................................

    80

    Dosya okuma: fgets(), fread() ve fgetc().........................................................................................................................................................................

    81

    fseek() ile l belirleme.........................................................................................................................................................................

    83

    Dosyaya yazma ve ek yapma: fwrite() ve fputs().........................................................................................................................................................................

    84

    Kullanmdaki dosyay kilitleyin!.........................................................................................................................................................................

    85

    Dizinlerle lemler.........................................................................................................................................................................

    85

    Dizin ieriini listeleme: opendir() ve readdir()......................................................................................................................................................................

    85

    Dizin oluturma: mkdir()......................................................................................................................................................................

    86

    PHP-1 5

  • 8/14/2019 PHP Hakki_cal

    6/117

    Dizin silme: rmdir()......................................................................................................................................................................

    86

    Bir Dosya lemi rnei: Konuk Defteri.........................................................................................................................................................................

    86

    Metin Dzenleme ve Dzenli fadeler................................................................................................90

    Temel Alfanmerik Fonksiyonlar.....................................................................................................90

    substr()......................................................................................................................................................................

    90

    trim()......................................................................................................................................................................

    91

    chr()......................................................................................................................................................................

    91

    ord()......................................................................................................................................................................

    91

    strlen()......................................................................................................................................................................

    91

    printf() ve sprintf()......................................................................................................................................................................

    91

    number_format()......................................................................................................................................................................

    92

    Tarih ve Saat Dzenleme...................................................................................................................93

    Dzenli fadeler...................................................................................................................................94

    Eletirme deyimleri ve iaretler.........................................................................................................................................................................

    94

    Dzenli fadelerde zel Karakterler.........................................................................................................................................................................

    95

    Karakter Gruplar.........................................................................................................................................................................

    95

    Dzenli fade Fonksiyonlar.........................................................................................................................................................................

    97

    ereg() ve eregi()

    PHP-1 6

  • 8/14/2019 PHP Hakki_cal

    7/117

    ......................................................................................................................................................................

    98

    ereg_replace() ve eregi_replace()......................................................................................................................................................................

    98

    split()......................................................................................................................................................................

    99

    sql_regcase()......................................................................................................................................................................

    100

    PHP ile Veritaban...............................................................................................................................101

    MySQL Veritaban...............................................................................................................................101

    mySQL veri trleri.........................................................................................................................................................................

    102PHP-MySQL likisi.............................................................................................................................104

    PHP'de Gvenlik.................................................................................................................................109

    Parola ve SSL.........................................................................................................................................................................

    109

    Trnak areti Sorunu.........................................................................................................................................................................

    110

    PHP Kaynaklar.........................................................................................................................................................................

    110

    PHP-1 7

  • 8/14/2019 PHP Hakki_cal

    8/117

    nsz

    Rasmus Lerdorf, tarihin ilk dnemlerinde yani Internet'in henz yayld 1990'larn ortalarnadoru i aryordu; hayat yksn bir kiisel sayfada yaynlamak ve bavuraca yerlere busayfann adresini verebileceini dnd. Fakat o dnemde zellikle niversitelerin Unixalarnda kurulan Web Sunucularda kiisel sayfa yapmak kolay deildi. Rasmus, kendisi iinhazrlad yazlmn Web'e aina olmayanlar starafndan da kolayca kullanabileceinidnd. Bu yazlmn byke bir blm Perl dilinden alnmt. Adna Personal Home Page(Kiisel Ana Sayfa) dedii bu programn ok tutulmas zerine Rasmus Lerdorf, Internet Sitesikuran herkesin birinci gn deilse bile ikinci gn farkna vard ihtiyac, yani bir form yoluylaziyaretiden gelen bilgileri ilemeyi salayan ekleri yazd ve programn ad PHP/FI (FormInterpreter/Form Yorumlayc) oldu. Kimileri programn bu srmne PHP2 adn takt; ve buad, programn ok deimesine ve gelimesine ramen uzun sre deimeden kald.

    Rasmus Lerdorf, 1995'in ortalarnda, Zeev Suraski, Stig Bakken, Shane Caraveo ve JimWinstead ile bir grup kurdu ve PHP'yi Perl'den dn alma rutinlerle i yapan bir paketolmaktan kartp, Nesne-Ynelimli (Object-Oriented) bir programlama dili haline getirdi. Bugrup, bugn PHP4 ad verilen bu dili gelitirmekte ve yeni ilevsellikler kazanmas iin sreklialmaktadr. PHP, Linux gibi, Ak Sistem kurallarna tabidir; isteyen programda istediideiiklii yapabilir; ancak bu deiiklikten para kazanamaz ve yapt deiiklikleri isteyenherkese aklamak zorundadr.Linux'un nmzdeki yllarda en ok kullanlan iletim sistemi olaca yolundaki bilgilerkukusuz en ok Linus Torvalds' artt. Linux'un bu baarsndaki en nemli anahtar noktaolan ak kaynak gelitiriliyor ve dnyann heryerinden yazlm gelitiricilerin desteini alyorolmas. Ayn baary Web yazlm gelitirme dili PHP de gsteriyor. PHP bundan iki yl

    ncesine kadar ad duyulmam basit bir dildi. Ancak imdi gerek performans gerek destekasndan dier Web yazlm gelitirme dilleri ile kolayca yaryor; hatta bunlar fazlasylageiyor. Hemen her trl iletim sistemiyle alyor olmas da cabas. PHP, her trlveritabanyla sorunsuz alyor olmasyla ve Zend derleyicisiyle daha da yaygnlk ve gkazanacak. PHP ve ak kaynak olarak gelitirilmeye balanan MySQL'in birliktekullanldklarnda yakaladklar etkinlik binlerce Dolar verilerek alnan veritaban ve uygulamadilleriyle yarmann tesinde farklara sahip.Trkiye'de PHP olduka yeni kullanlmaya baland. Dnyadaki PHP kullanclarnn tercihettikleri 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 laykolduu yeri alacan gsteriyor.

    Bu kitap PHP'nin 4'nc srmne gre yazdk. Burada verdiimiz rnekleriuyguladnzda beklenen sonucu alamazsanz, nce sizin sisteminizde kurulu PHP'ninsrmn kontrol etmelisiniz. Bu kitapktaki rnek kodlar PC Life dergisinin Internetsitesinde, http://www.pclife.com.tr/........../php_kodlar.zip adresinde bulabilirsiniz. Ayrca bukitapktaki kodlarn tmnn gerek bir Web sunucuda nasl ilediini grmek iinhttp://www.mycgiserver.com/~ocal/ adresine bakabilirsiniz.Bununla birlikte bir programlama dilinin incelikleri, ancak kodlarnz kendiniz yazarsanzrenilebilir. rnek kodlardan, ancak kendi yazdnz kodlar beklediiniz sonucu vermedii

    PHP-1 8

  • 8/14/2019 PHP Hakki_cal

    9/117

    taktirde, karlatrma amacyla yararlanmalsnz. Sizi biraz da buna zorlamak iin yer yerkonular 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, yaplandrmasrasnda iletim sistemlerine ve Web sunucularna varsaylan deer olarak sadece .php

    uzatmasn tanmasn bildiriyorlar. PHP programlarnza bundan baka uzatmalarverecekseniz, Linux'ta Apache konfigrasyon dosyasn, Windows'da ise Registry kaytlarndeitirmeniz gerekir.ki blm olarak sunacamz PHP kitapnn birinci blmnn yazlmasnda yurdumuzdaPHP kullanclarn eitme ve destekleme hareketinin ncleri Sayn Kayra Otaner, SerdarSoydemir ve zgr Akan, deerli yardmlarn esirgemediler. kinci kitapkta yer alacakuygulamalarn tmn bu grup gelitirdi ve Ak Kaynak hareketinin gerek temsilcileriolduklarn gstererek, serbeste kullanlmak zere okuyucularmza sundular. Kendilerinesonsuz teekkrlerimizi sunarz. Bununla birlikte bu kitapkta varolan hatalarn tm banaaittir.PHP Destei veren sitelerle ilgili not:

    Bu kitapkta bir ka sayfa ilerledikten sonra, yapmak isteyeceiniz ilk ilerden birinincretli veya cretsiz PHP destei veren bir Wes sitesi evsahibi (Hosting) firmasaramak olacan tahmin ediyorum. Bu amala aramalarnzahttp://www.pageresource.com/putweb/index.html adresinden balamanz salk veririm.Eer doruca byle bir evsahibi firmaya ulamak istersenizhttp://www.mycgiserver.com adresine gidebilirsiniz. Kitapn sonunda eitli PHPkaynaklarnn bir listesini de bulabilirsiniz.

    PHP-1 9

  • 8/14/2019 PHP Hakki_cal

    10/117

    PHP'ye Giri

    C/C++, Pascal, hatta Visual Basic bilen kiiler iin PHP renmek hemen hemen bir ledensonray ayrmak suretiyle yaplabilecek bir itir. Bu dillere aina olmayanlar ise belki bir kaleden sonralarn ayrmak zorunda kalabilirler! PHP, bir Script dilidir; yani kodlar dz yazdosyalar halinde kaydedilir ve kullanlaca ortamda bir yorumlayc tarafndan yorumlanr.Bu, PHP ile yazacanz programlar, derlemek yani ortaya bir EXE veya altrlabilir bakabir dosya kartmaya gerek olmad anlamna gelir. Fakat PHP Script'lerinizi altrabilmekiin bu dili bilen bir programa ihtiyacnz vardr. Bu programn tek bana (komut istemcipenceresinde veya terminal ekrannda) almas mmkn olduu gibi, Web Server tarafndanda altrlabilir olmas gerekir. Baka bir deyile Web Sunucu programnn PHP anlar halegetirilmesini 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, iletimsistemine kendisi ile uyumlu Script dilleriyle yazlm programlar altrma imkankazandran bir teknolojidir (Zend konusunda ek bilgiyi Internet'te www.zend.com adresindebulabilirsiniz.) Bugn bu dilin resm ad "PHP: Hypertext Preprocessor" (Hiper-metin n-ilemcisi) olarak deitirildi, ve eitli Web Server'larn PHP dili anlamas iin gerekliyorumlayclar yeniden retlidi. 20 Ocak 200'de srail'de PHP'nin ilk uluslararas konferansyapld 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 programndantutun veritaban ynetimine kadar hemen her trl program yazabilirsiniz. Bizi bu kitapktailgilendiren tarafyla PHP, Web Sunucu'ya bir takm iler yaptrmak iin program yazmadilidir. Tpk CGI/Perl veya ASP ya da ColdFusion, Java (Javascript deil!) gibi! PHP kodlar,oluturacamz HTML sayfalarnda HTML etiketlerinin arasnda kendi zel ayrac iindeyazlr:

    ster kiisel bilgisayarmzda, ister gerek Internet ortamnda olsun, bir Web Sunucu,ziyaretinin (Internet istemci programnn, Browser'n) talep ettii dosya adnn uzatmasolarak ".PHP," ".PHP2," ".PHP3," veya ".PHP4" grnce, kendine kendine, "Yine bana ikt!" diye dnr! nk Web Server, uzatmas ".htm" veya ".html" olan bir dosyay, kendisabit disklerinden birinde bulur ve zahmetsizce, ziyaretinin bilgisayarna gnderir. Fakat,".asp," .pl," ".cfm" gibi, ".PHP" uzatmas, Web Sunucu'ya bu sayfay olduu gibi, alpziyaretinin Browser'na gndermek yerine, nce PHP yorumlaycy ararak, ona teslim

    PHP-1 10

  • 8/14/2019 PHP Hakki_cal

    11/117

    etmesi gerektiini bildirir. PHP yorumlaycs (yani Windows ortamnda PHP.exe veya 4'ncsrmle gelen PHP4isapi.dll, Unix ve trevlerinde altrlabilir PHP dosyas), kendisineteslim edilen bu belgede nce "" ayralar arasndaki PHP kodlarn seerek alrve gerei ne ise onu yapar. Bu ayralarn iinde kalan kodlar, bizim yaplmasn istediimizilemin 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. SzgelimiHTML etiketlerini kullanarak, Web Sunucusu'ndaki bir veritaban dosyasn ap, iindekiverileri okuyamayz. HTML yoluyla Web Sunucusu'nun sabit disklerindeki dz yazdosyalarn da okuyamayz ve bu disklere dosya yazamayz. HTML etiketleri ile Webziyaretimizden bilgi edinebilir ve bunlar Sunucu'ya yollayabiliriz; ama o kadar! Bu bilgileriie yarar ekle sokmak iin bize Server'da alan bir program gerekir. Server'da alanprogram, 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 buScript pogramlarnn program olmasn hi engellemez.)

    Ne diyorduk? Web Sunucu, ".PHP" uzatmasn grnce telaa kaplr, bu dosyay PHPyorumlaycsna verir ve o da "" ayralar iindeki kodlar icra eder, demitik.Bu icraatn sonunda ortaya kan rn eer ziyaretiye gnderilecekse, HTML etiketleri iindegnderilir; yani ziyareti asla PHP kodlarn gremez. Kimi zaman PHP programmznalmas sonucu ortaya ziyaretiye gnderilecek bir rn kmaz; elde edilen sonu ya bakabir programa (rnein elektronik ileti gnderen bir Sendmail progamna) hammadde olarakverilir, ya da Server'da sabit diske yazlr. Fakat her durumda, Web ziyaretimiz bizim PHPkodlarmz gremez; bu Web sayfalarmzda PHP kodu kullanmamz halinde, sayfalarmznBrowser tarafndan tannmas veya tannmamas gibi bir durumun ortaya kmamas demektir.Ziyareti ne tr Browser kullanrsa kullansn, kendisine Sunucu'dan daima saf HTML kodugelecei iin, sayfalarmz rahata grebilecektir. Tabi bir nokta var: Sayfalarmzda herhangibir Browser'n arzal yorumlad veya hi yorumlayamad HTML etiketleri bulunabilir; yada sz gelimi ziyaretiye giden HTML'in iinde Browser'da altrlacak olan baka Scriptkodlar bulunabilir; ve Browser bu kodlar anlamayabilir. rnein, HTML sayfanzdaVBScript kodlar kullanm iseniz, Netscape ile sitenize balanm olan kiiler bu kodunoluturmasn istediiniz etkiyi gremeyeceklerdir; nk Netscape VBScript anlamaz! PHPile yazacanz Web programlarnn (eski deyimiyle "sayfalarn") oluturaca HTMLbelgesinin Browser trleri ve srmleri ile uyarlln salamak yine Web programcs olaraksizin sorumluluunuzdadr.zetlersek, PHP bir CGI programlama dilidir; bu dille, Web Sunucusu ile Web ziyaretisiarasndaki buluma noktas olan CGI'da bilgi alverii yaplabilir; Sunucu'da bulunan bakaprogramlar altrlabilir ve bylece Web sayfalarmza HTML'in snrlamalarnn tesindehareket ve ziyareti ile etkileme olana kazandrlabilir.Sanrm iyi bir Web programcs olarak u anda ekrana "Merhaba Dnya!" yazdrmak iinsabrszlanyorsunuz. Ama bunun iin, PHP sayfanz ya PHP-uyumlu bir Web Sunucusu'ndakiWeb sitenize yklemek, ya da kiisel bilgisayarnzdaki kiiel Web Sunucusu'na PHPretmek zorundasnz. Bu ikinci yntemi kuvvetle tavsiye ederim; nk yazacanz PHPprogramlarn gerek Internet Sunucusunda snamak, bazen arzu edilmeyen durumlara yolaabilir. Oysa kiinin bu denemeleri, evinde ve iyerinde kendi bilgisayarnda yapmas, ouzaman daha az baars ve gzyana yol aar! En azndan, PHP hatalarnz ve gzyalarnz

    PHP-1 11

  • 8/14/2019 PHP Hakki_cal

    12/117

    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 sistemlerindenayr, ticar olmayan Ak Sistem ortamlarnda alan bir Script dili ile bu dille kullanlabilecekyine Ak Sistem rn bir veritaban eriim ve ynetim aracna sahip olmak gelir. Perl, geriPHP'den ok nce Ak Sistem rn olarak, isteyen Web Programcs'nn cretsiz edineceibir CGI programlama dili olarak Web'in ilk gnnden beri Web Programcsnn emrinde idi.Ama Perl, metin dosyalarndan yaz ekmek ve bunlar biimlendirerek rapor haline getirmekamacyla gelitirilen bir dil olduu iin, zellikle veritabanna dayal ilemlerde programcyaok glk kartyordu. ASP ise (ASP destei salayan ve cretsiz Web sitesi veren firmalarngiderek artmasna ve veritaban konusunda hem kolaylk, hem de byk bir etkinliksalamasna ramen) ounlukla cretli Web sitesi aldmz ticar amal evsahibi (Hosting)

    firmalarnn salad bir teknoloji olarak grld. PHP, tasarmclarnn MySQL vePostgreSQL teknolojilerini gelitiren kurum ve firmalarla yapt yakn ibirlii sonucu ikincisrmnden itibaren veri-ynlendirmeli Web uygulamas alannda nemli bir ara olarakbelirdi. Dolaysyla, PHP kurulumu dendii zaman, kendiliinden, MySQL kurulumu dakastedilmi olur. imdi PostgreSQL da ekleyebiliriz.PHP, bir dildir; MySQL ve PostgreSQL ise bir demet srcdr. PHP ile, Web Server'asayfanz Internet ziyaretisine gndermeden nce bir takm komutlar icra etmesini, bir takmveri dosyalarn ap iindeki bilgileri alp bunlar HTML kodlaryla bezeyip, Browser'abildiimiz klasik HTML sayfas olarak gndermesi talimatn veririz. MySQL ve PostgreSQLise, Windows sistemlerinde Denetim Masas'nda grdnz ODBC Veri Kayna Ynetmeniadl ara gibi, bir vertaban sunucusu, yani Database Server pprogramlardr. Yakn zamana

    kadar bu iki veritaban ynetim arac arasnda fazla bir ekime yoktu. Ancak imdi zellikleLinux kullanclar topluluklarnda iki program arasnda verimlilik testleri yaplyor; hangisinindaha iyi oldununa ilikin youn bir tartma sryor. PHPBuilder.com uzmanlar, yaptklarbir ok denemede, MySQL'in daha hzl ve daha etkin altklar sonucuna varyorlar. (Bukonuda daha geni bilgi edinmek iin Internet'tewww://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 cretsizdatlr hale gelmi bulunuyor. Buna gre MySQL'i bir ticar uygulamann iinde motor olarakkullanacaksanz reteci firmaya lisans creti demeniz gerekir; bunun dndaki uygulamalariin 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 ilealabilir; 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 iingelitirilmi add-on (sonradan eklenen) modller vardr. PHP, bir ok LDAP istemci programiin yazlm API'lere de sahiptir. PHP ile IMAP, SMTP gibi Internet elektronik mektupprotokollerini kullanmak da mmkndr.Biz bu kitapkta rneklerimizde ve uygulamalarmzda MySQ'den yararlanacaz. PHP-

    PHP-1 12

  • 8/14/2019 PHP Hakki_cal

    13/117

    MySQL ikilisini kiisel bilgisayarmza kurmak iin nce gerekli programlar Internet'tenindirmemiz gerekir. Bunun iin u adreslerden yararlanabilirsiniz:http://www.PHP.net/downloads.PHPhttp://www.mysql.com/downloads/index.htmlPHP ve Web Sunucusu

    Bizim amzdan PHP, bir Web sunucu programdr; kurulaca sistemdeki Web sunucusu ileuyumlu olmas gerekir. 4'nc srm itibariyle, PHP btn Unix-trevi sistemler (rneinLinux) ve Microsoft Windows sistemleri ile uyumludur. Birlikte alabilecei Web sunucuprogramlar arasnda Apache, IIS, FHTTP, Omni HTTPd, Xitami ve Windows 95/98 iin PWS(Personal Web Server) vardr. Gerek Internet ortamnda sunucu programlara PHP yeteneikazandrma ilemi, Web Pnogramcs olarak bizi ilgilendirmez; bizim iin Internet sitemizeevsahiplii yapan Hosting firmasnn PHP destei verip vermediini bilmek yeter. Fakattasarmlarmz snayabilmek iin kendi bilgisayarmza bir kiisel Web Server kurmak ve buprogram PHP-uyumlu hale getirmek gerekir. Burada sadece iki rnek ele alacaz: Linux iinApache sunucu program ve MS-Windows iin PWS. Bu iki programdan hangisi sizin

    sisteminize uygunsa onu kendi bilgisayarnza kuracanz varsayarak, imdi PHP ve MySQLkurulumu ile uraabiliriz.Unix/Linux SistemleriKurma ilemine Unix ortamndan balayalm. Burada Unix sistemi dediimiz zaman Unix'intekrar biliim haritasnda yerini almasn salayan Linux'u kastediyorum. Bunun iin ncehttp://www.PHP.net/ adresini ziyaret etmemiz gerekiyor. Eer PHP uzman olacaksanz, burassizin ikinci eviniz olabilir. Downloads kprsn tklayarak alacak sayfada Unix/Linux iinkaynak kodunu bilgisayarnza aktarn. PHP'yi kuracanz bilgisayarda bir Web sunucuprogram 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'i Internet'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. Teyplereyedekleme amacyla gelitirilmitir. tar dosyalar sktrlmsa uzatmas .gz, deilse .tar olur.gcc: GNU'nun C derleyicisidir. nsan tarafndan okunabilen kaynak kodlarn makinatarafndan okunabilen nesne (object) dosyalarna dntrr. C programlama diliyle yazlmkaynak 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 dosyalarbirbirine balayarak ortaya altrlabilir bir program dosyas kartr. Genellikle Makefile'niinde linker'n altrlmas talimat bulunur ve sizin bu program kullanmanz gerekmez.ldconfig : paylalan kitaplk dosyalarn (shared librari) arar. Bu dosyalardan birden fazlaprogram tarafndan paylalr, ve dosya adlarnda .so bulunur../configure : C derleyecisi ve header dosyalarnn nerede olduunu aratrr, ve vard sonucagre Makefiles dosyasnda deiiklik yapar.

    PHP-1 13

  • 8/14/2019 PHP Hakki_cal

    14/117

    /////////////////KUTU BTT///////////////PHP, bir Unix/Linux sisteminde mstakil yorumlayc veya Apache Web sunucusunun birmodl olarak almak zere derlenebilir. PHP, mstakil yorumlayc olarak kurulduunda,Web sunucusu, her ihtiya halinde PHP yorumlaycsnn bir rneini altrr. Bu, bir sresonra Web sunucusunun bulunduu iletim sisteminin yknn artmasna ve ileyiinde

    yavalamaya yol aabilir. Oysa PHP, sunucunun bir modl olarak kurulduunda, bu sakncaortaya kmaz. (Bu zellii ile PHP, klasik CGI/Perl'n alma tarzndan ayrlr, ASP'nin veColdFusion'n alma tarzna yaklar.) Bununla birlikte kt niyetle veya beceriksizceyazlm PHP programlar modl olarak kurulmu PHP'yi kertirlerse, Web sunucusunu dakertmi olurlar; oysa mstakil PHP yorumlayc kerse, Web sunucusuna bir ey olmaz.Burada yapacamz kurulum ilemi srasnda Linux kurulu olan bilgisayarmza Apache Websunucu programn, bu sunucunun kullanaca gvenli Socket katmann salayacak Mod_SSLprogramn, bu programn gerektirdii OpenSSL aracn, MySQL veritaban sunucusunu vePHP Scripting dilini kurmu olacaz.PHP'yi Linux ortamnda Apache Web sunucusuna modl olarak kurmak iin srasyla uilemleri 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 dosyalarngeni yer olan geici bir dizinde an, ve o dizine gidin. Szgelimi, Apache'nin tar-zip olaraksktrlm 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'yiatnz klasre gidin ve buradaki configure dosyasn altrn:# cd apache_1.3.12

    # ./configure --prefix=/usr/local/apache

    Buradaki rnekte Apache'yi /usr/local/apache dizinine koyduumuza dikkat edin. Bu dizini, birok kurulumun varsaym olarak arayaca dizin olduu iin tercih ediyoruz. Ama isterseniz sizApache'yi baka dizine de kurabilirsiniz.2. Sra MySQL veritaban sunucusunda. Linux'ta root oturumunda iken sktrlm dosyalarindirdiiniz geici dizine gein ve dosyalar an; sonra oluturulan dizine giderek, configurekomutu 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 &

    PHP-1 14

  • 8/14/2019 PHP Hakki_cal

    15/117

    # ./mysqladmin -u root password 'parola'

    Kurulum ileminin baarl olup olmadn snamak iin, kurulum srasnda oluturlan rnekveritaban dosyalarn bulunup bulunmadn soruturabilir ve kendimiz yeni bir veritabanoluturabiliriz. Bunun iin u komutu yazalm:# BINDIR/mysqlshow -p

    # mysql -u root -p

    Sistem "Enter password:" karln verdiinde, yukarda kullanm izinlerini belirlerkenyazdnz parolay yazn; MySQL sunucusu alacak ve size kullanc izinlerinin bulunduu"mysql" ve snama amacyla oluturulan "test" adl iki veritabannn bulunduunubildirecektir. imdi kendi veritabanmz oluturalm. MySQL sunucu komut istemcisi satrnaunu yazn (Bilgisayarn verecei karlklardan ayrt etmek iin kendi yazdklarmz koyurenkle gsteriyoruz):mysql> create database deneme;

    Sunucu "Query OK, 1 row affected (0.00 sec)" eklinde karlk verecektir. imdi buveritabann 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 sonranoktal 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. MySQLkomutlarn daha ayrntl renebilmek iin MySQL'in http://www.mysql.com adresindekisitesini 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

    PHP-1 15

  • 8/14/2019 PHP Hakki_cal

    16/117

    grmek istiyorsanz, "configure --help" komutunu verebilirsiniz. Biz sadece PHP'ye MySQLve Apache opsiyonlarn eklemekle yetineceiz:# ./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 KatmanKuracanz Web sunucusu gerek Internet'e alacaksa, sisteminize Mod_SSL yeteneinikazandrmanz gerekir. Bu sistemin rsaref-2.0 adnda bir eki vardr; ancak Amerika dndakurulan Web Sunucularda rsaref-2.0 ekinin kurulmas gerekmez. Apache sunucusunu sadecePHP dosyalarnz snamak amacyla kendi bilgisayarnza kuruyorsanz, Mod_SSL kurmakart 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.gzdosyasn 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 ..

    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 \

    PHP-1 16

  • 8/14/2019 PHP Hakki_cal

    17/117

    --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 gvenliksertifikalarn istediini bildirecektir. Sertifika oluturma konusunda fazla bilgi iin,http://www.modssl.org/docs/2.6/ssl_faq.html#ToC25 adresine bakabilirsiniz.) Diyelim kisadece ISS'in yeri, firma ad ve bir iki dier bilgiden oluan zel bir sertifika oluturmaklayetineceksiniz. 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.3HTTP server," eklinde balayan uzun bir mesaj verecektir. Bu durumda Apache sunucusu ukomutla 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/////////////////Bu ilemleri baaryla bitirmi olsak bile sistemin altn kontrol etmemiz gerekir. nceApache'nin altndan emin olalm. Bunun iin nce Apache'nin yaplandrlmasna PHP'nuneklendiinden 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 kpyaplandrma 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 bulunmadnsnayabilirsiniz:# 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 an ve HTTP

    PHP-1 17

  • 8/14/2019 PHP Hakki_cal

    18/117

  • 8/14/2019 PHP Hakki_cal

    19/117

    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 bobrakn) ve Script engine kutusuna iaret koyun.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 bulunduudizinin yolunu (rnein C:\PHP\ PHP4isapi.dll) yazn.

    IIS'i tamamen durdurun; ama bunun iin sadece Internet Services Manager'daki Stopdmesini tklamak yetmez; komut istemci (MSDOS Prompt) penceresinde net stop iisadminyazn. 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 w3svcyazn. Artk IIS'iniz PHP anlar hale gelmi olmal. Bunu, hemen snayalm. Notepad veya birbaka dzyaz programyla unlar yazn:

    Dosyay PHP.PHP adyla IIS'in kk dizin sayd klasre kaydedin. Browser'nzn URL adresialanna sunucu adyla birlikte dosyann adn yazn.

    Bravo! te yeni bir dil renmi Web sunucuya sahip oldunuz.PWS 4.0Windows'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 Systemklasrne kopyaladktan sonra, Zip dosyasndan km olan PHP.ini-dist isimli dzyazdosyasn Notepad ile an ve "extension_dir=" satrn bularak, karsndaki "./" yazsn silipyerine PHP dosyalarn kopyaladnz dizinin adn (rnein C:\PHP) yazn. PHP dizinin adndoru yazdnz kontrol edin! Sonra ";browscap =" satrn bulun ve nndeki noktal virglkaldrarak karsndaki "extra/browscap.ini" kelimelerini c:\Windows\browscap.ini olarakdeitirin. Bu dosyay, PHP.ini adyla Windows dizinine kaydedin. Daha nceki sayfalardagreceiniz ekilde Browscap.ini dosyasnn dosyasn Windows dizinine kopyalam olmanz

    gerekir. (Windows dizininin Windows adn tadn varsayyorum. Sizin Windows dizininizbaka ise, gerekli dzeltmeyi yapabilirsiniz.)imdi, atnz PHP Zip dosyasnn iinden kan PWS-PHP4.reg adl dosyay bir dzyazprogramyla, rnein Notepad ile an. ".PHP"="[PUT PATH HERE]\\PHP4isapi.dll" yazlsatr 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 olarakyazdmz gibi bir adet deil, iki adet olmasdr. Dosyay kaydettikten sonra, iki kere tklayn

    PHP-1 19

  • 8/14/2019 PHP Hakki_cal

    20/117

    ve Windows'un Registry'de deiiklik yapmay isteyip, istemediinize ilikin sorusuna Evetyantn verin. Tamaam! Sizin de PHP bilen bir PWS'iniz oldu. Ama bunu bir snayalm. Vebunu 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 URLadres blmne, merhaba.PHP yazn ve klavyede Enter tuuna basn. Eer gerektenPWS'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/"AddType application/x-httpd-PHP3 .PHP3Action 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 durumdasayfalarnzda kullanacanz verileri muhtemelen MySQL araclyla veritabanndanekeceksiniz demektir. Bu yzden Windows sisteminize MySQL kurmak ve veritabanlarn buarala gelitirmeniz yerinde olur. Unix/Linux ortamnda cretsiz olmakla birlikte MySQL,Windows iin bedeli paylaml (shareware) olarak edinilebilir. Benioku dosyasndabelirtildiine gre, program eitim amacyla ve 30 gn amamak kaydyla kullanyorsanz,cret denmesi gerekmiyor. Dier durumlarda TCX firmasnn Internet'te http://www.tcx.seadresindeki sitesindeki formlar doldurarak lisans alnmas gerekiyor. Bu program, MySQL'inhttp://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) Sharewaresrmn ieren dosyay atnzda ortaya kacak setup.exe program MySQL'i kuracaktr.MySQL Server'n Windows'da da tpk Linux'ta olduu gibi altrlmas ve durdurulmasgerekir. 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

    PHP-1 20

  • 8/14/2019 PHP Hakki_cal

    21/117

    mysqlshowmysqlshow -u root mysqlmysqladmin version status procimdi MySQL server alyor ve biraz sonra PHP yoluyla kiisel Web Server'nza hizmetvermeye hazr demektir. Bu komutlar icra ettiiniz srada bir hata mesaj ile karalarsanz,

    MySQL'in kuruluunda hata yapm olabilirsiniz. DOS ekrarnda test ve MySQLl veritabanlarnn varln ve hizmete girdiini gsteren mesajlar grrseniz, MySQL gzelcealyor demektir. Bunu bir de Browser ile ve PHP yoluyla snayalm:Yukarda IIS'e PHP destei kazandrma almalar srasnda oluturmad iseniz, dz yazprogramnzda 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 sayfadaiki eye dikkat edin: MySQL ve ODBC blmleri var m? MySQL blm varsa; kendiniziyeniden kutlayn! ODBC blm yoksa, muhtemelen sisteminizde Microsoft'un OpenDatabase 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 imkankazanabilirsiniz.)Bir kere daha tekrar etmek gerekirse, PHP ile veritabanna dayanan sayfalar yapmak iinmutlaka ve sadece MySQL srclerini kullanmak gerekmez. Bunun yerine MS'un ODBCsrclerini kullanabilirsiniz. Ancak Web sitenize evsahiplii yapan firmann size ODBCdestei verip vermediini renmeniz gerekir. Aslnda ayn ekilde, evsahibi firmann MySQLdestei verip vermediini de renmek zorundasnz. (PHP ile MS-ODBC srclerinikullanabilmek iin Andrew Stopford'un ASPToday sitesindekihttp://www.asptoday.com/articles/20000202.htm yazsnda geni bilgi bulabilirsiniz.)Gemi olsun. Bana sorarsanz, PHP ile dolu yeni bir hayata balamak iin en nemli admattnz. Bundan sonras, sadece PHP dilini renmekten ibaret. Dilin retecilerinden ZeevSuraski, bu yln banda srail'de yaplan ilk uluslararas PHP Konferans'nda "PHP renmekzor mu?" diye soran bir bilgisayar meraklsna u cevab veriyordu: "Bir haftadan fazla zamanayrmanz gerekiyorsa, sizin iin zor demektir!"

    PHP-1 21

  • 8/14/2019 PHP Hakki_cal

    22/117

    PHP DiliPHP bir Script dilidir; PHP ile yazdnz "programlar" birer dzyaz dosyasdr. Dil geleriniayrntl 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.inidosyasndaki, short_open_tag = On: satrn short_open_tag = Off; yapmak yeter. Bununlabirlikte 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 Hakki_cal

    23/117

    Sayfamzn grntsnde hi bir deiiklik olmamakla birlikte, Browser'a giden HTMLkodlar nemli lde deimi olacaktr.Geri burada henz ihtiyacmz yok; nk bir bakta yazdmz kodun marifetinianlayabiliyoruz; ama cidd PHP programclna baladmz zaman, hangi satrda neye niyetettiimi anlamamz daima mmkn olmayabilir. Biz kendi programmz satr satr ezberlesekbile, ibirlii yaptmz dier Web programclarnn programmz anlamalarn salamamzgerekir. Bunu, yorum satrlar ile yapabiliriz. PHP ayralar iinde iki trl yorum bulunabilir:ok-satrl yorumlar ve tek satrl yorumlar. Birinci grubu, bana "/*" ve sonuna "*/* iaretlerikoyarak, 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

    PHP-1 23

  • 8/14/2019 PHP Hakki_cal

    24/117

    // Bu satrlar da PHP yorumcusu dikkate almayacaktr.

    ?>

    PHP'rir bir dier yorum iareti ise # (Diyez) iaretidir. Bu iaretin banda olrduu satr da PHPtarafndan dikkate alnmaz:

  • 8/14/2019 PHP Hakki_cal

    25/117

    PHP'nin Yap Talar

    PHP, bir programlama dili olarak, deikenler, deikenlerin deerleriyle bir ilem yapmaysalayan ilemciler, ilemcilerle oluturulan deyimler ve nihayet bunlarn tmn toplu olarakkullanmamz salayan ilevlere (fonksiyonlara) sahiptir. PHP, nesne-ynelimli (object-oriented) bir dil olduu iin, nesne oluturma imkanna ve bunlarn kullanlmasn salayanmetodlara da sahiptir. Btn bu imkanlar kullanarak, PHP ile bir veritabanndan veri alarak,bunlar HTML etiketlerinin deerleri olarak kullanabiliriz; Web sitemizi ziyaret edenkiilerden bilgi alabiliriz, bu bilgilerle ilemler yapabiliriz. PHP'nin eitli komutlarn,deyimlerini ve fonksiyonlarn kullanarak, programmzn alt Web sunucusununbulunduu bilgisayara da eitli dosya ilemleri yaptrabiliriz.////////////////KUTU///////////PHP programn durdurmak

    imdi belki PHP'yi durdurmay hi dnmyorsunuz; ama ilerde bir fonksiyonun vereceisonucun btn programn durdurulmasn gerektii zamanlar olabilir. PHP'nin resm el kitabnabile ilk basksnda konulmas unutulmu olan program durdurma komutu, exit kelimesidir; hibir parametre almadan alr.//////////////////KUTU BTT///////////Bu tr karmak uygulamalara geebilmek iin nce, PHP dilinin unsurlarn biraz yakndaninceleyelim.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 da anlalaca gibideikenin deeri deiir! Bu deiiklii biz yapabiliriz; programn kendisi yapabilir.PHP'de de, bir ok baka bilgisayar programlama dilinde olduu gibi deikenlerin iine birdeer konmadan nce tanmlanmas mmkndr; fakat gerekli deildir. Deikenleri adnnnne $ iareti koyarak tanmlarz:$adi;

    $soyadi;

    $123;

    $sevdigiRenk;

    Deikenler, harf, rakam veya alt izgi (_) ile balayabilirler; bu karakterleri ierebilirler; amaiinde 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";

    PHP-1 25

  • 8/14/2019 PHP Hakki_cal

    26/117

    $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 adldeikenin "adi" adl deikeni tuttuunu bilecek ve iki Dolar iaretini grnce, $degisken'indeerini deil, onun tuttuu deikenin deerini yazacaktr. Bu, size u anda karkgrnebilir. Daha sonra dngleri grdmzde bu teknii bir satrlk kod ile yzlerce deeriyazdrmakta kullanacaz. Bu teknik yle de kullanlabilir:$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 dadinamik 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 deikenarasndaki deer al-verii birinci deikenin tuttuu deeri deitirmeden nce olduu iin,ikinci deiken birinci deikenin ilk deerini alm oldu. Fakat kimi zaman iki deikenarasndaki 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 ikideiken arasndaki deer al-verii birinci deikenin tuttuu deeri deitirmeden ncehalde, ikinci deikene birinci deikenin deerini dinamik olarak atam olduk. Atama ilemisrasnda & iareti kullandmz iin, birinci deikenin deeri deitiinde ikinci deikeninde deeri deiecektir.

    PHP-1 26

  • 8/14/2019 PHP Hakki_cal

    27/117

    Veri Trleri

    PHP, deikenlere, tuttuklar deere gre farkl bellek alan tahsis eder; bu bakmdanverilerimizin tr etkin bir programclk asndan nem tar. Ayrca PHP, dier btnprogramlama dilleri gibi belirli veri trleri ile belirli ilemleri yapar veya yapamaz. rnein,

    ancak iki say arasnda aritmedik toplama yaplabilir. ki metin tutan deiken aritmetik olaraktoplanamaz; ancak ierdikleri deerler ardarda eklenebilir. Ne var ki, PHP sizin aritmetiktoplama m, yoksa ardarda ekleme mi yapmak istediinizi bilmek durumunda deildir. (PHP'ye'muazzam dil' dedik; iinde yapay zek var demedik!) Dolaysyla deerleri 5 ile 6 olan ikideikeni topladnz zaman ortaya 11 yerine 56 karsa, kabahati PHP'de deil, deikenlereveri atayan kiide (byk bir ihtimalle kendinizde) aramalsnz.PHP asndan dnyada alt tr deer vardr:Tamsay (Integer): 5,124, 9834 gibiift (Double): 3,567 gibiAlfanmerik (String): "Reit" gibiMantksal (Boolean): doru (true)/yanl (false) gibi

    Nesne (Object)Dizi (Array)Baz uzmanlara gre, gerekte PHP'de mantksal (boolean) deiken tr yoktur. B kannnsebebi, PHP'nin true (doru) ya da false (yanl) olarak atadmz deerleri 1 ve bo/nulldeerlere evirmesi, mantksal olarak sorgulandnda 0 dndaki tam ve ondalk deikenleriTRUE, 0' FALSE saymas, ve bo alfanmerik deikenleri FALSE, dolu alfanmerikdeikenleri ise TRUE olarak deerlendirmesidir. Ancak daha sonra gereceimiz gibi PHP,Mantksal/Boolean adnda bir deiken deitirme fonksiyonuna sahiptir ve bu trdeikenlerin tr sorulduunda "boolean" karln verir.Tr DeitirmeDeikenlere atadmz deerlerinin trlerini genellikle biliriz; ama yzlerce deikenle

    uratmz bir Web programnda deiken trn unutmak ok kolaydr. Kimi zaman dadeikenlere program yoluyla deer atarz; baka bir deyile programmz baz deikenlerikendisi oluturabilir, ve bunlara kendisi deer atayabilir. Bu tr program yoluyla atanandeerlerin de trnde kukuya kapldmz anlar olabilir. Bir deikenin deerinin trhakknda kukunuz varsa, en emin yol bunu PHP'nin kendisine sormaktr. Bu sorgulamaygettype() fonksiyonu ile yaparz./////////////////KUTU/////////Fonksiyon

    PHP'nin gettype() ve print() gibi, kendi iinde bulunan kullanlmaya hazr bir ok fonksiyonuvardr. Daha sonra kendi fonksiyonlarmz yazmann yollarn da greceiz. Programclk

    dilinde ister dile ait olsun, ister kendimiz yazm olalm, bir fonksiyonu kullanmaya "fonksiyonarma" denir. Fonksiyonlar da fonksiyon arabilirler. arlan bir fonksiyon yakendisinden beklenen ii yapar, ya da kendisini aran ileme veya fonksiyonu bir deersunar. Buna fonksiyondan dnen deer denir.////////////////////KUTU BTT///////////imdi, bir PHP program yazalm, bir takm deikenlere deerler atayalm ve bunlarntrlerini PHP'ye soralm. Bir dzyaz program ile u metni yazn ve turler.php adylakaydedin:

    PHP-1 27

  • 8/14/2019 PHP Hakki_cal

    28/117

    PHP'de Degisken Turleri

  • 8/14/2019 PHP Hakki_cal

    29/117

    $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:Burada mantksal (boolean) deer olarak doru anlamna true deeri atadmz halde, PHP'ninbu deikenin deeri olarak 1'i gsterdiine dikkat edin. PHP'de bir fonksiyon, elde ettii deerdoru ise sonu olarak 1 deerini verir. (Yanl/false deerinin neye evrildiini bulabilirmisiniz?)///////////////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 grdzaman onun yerine o deikenin tuttuu deeri yazar. PHP bunu, deiken adnn bandaki $grerek yaparak. $ iareti gibi PHP iin zel anlam olan iaretlerin anlamlandrlmasnnlemek ve bu iaretleri dz metin saymasn salamak iin bu iaretlerin nne ters-bliareti koyarz. Buna o karakteri kurtarma veya ESCaping denir. PHP'nin anlaml iaretleri vebunlarn 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 detur_degistir.php adyla kaydedelim:

    PHP-1 29

  • 8/14/2019 PHP Hakki_cal

    30/117

    PHP'de Degisken Turleri

  • 8/14/2019 PHP Hakki_cal

    31/117

    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/Boolean

    print "
    ";print "
    ";

    ?>

    Bu program altrdmzda, ilk atadmz deerin ondalk/double olarak belirlendiinedikkat 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 ondalkyaptmz halde, atlan bu blm geri gelmiyor. Son olarak deikeni mantksal ifade olarakdeitirdiimizde, 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/nulldeer verir.u anda PHP'yi tam bilemediimiz iin nerede kullanlr kestiremiyoruz, ama diyelim kiburada olduu gibi, deikeni bir daha dzelmeyecek ekilde deiiklie uratmakistemeyebiliriz; fakat yine de deerinin trn deitirmek isteyebiliriz. Bunu da neredekullanabiliriz, 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 deerolarak vererek, aslnda bu deikenin ilk deikenin deerini almasn salamtk. Burada daayn teknii kullanabiliriz. Bu kodu da tur_kopyala.php adyla kaydedin:

    PHP'de Degisken Turleri Kopyalama (Casting)

    PHP-1 31

  • 8/14/2019 PHP Hakki_cal

    32/117

  • 8/14/2019 PHP Hakki_cal

    33/117

    print gettype( $kopya_degisken ) ; //ift,ondalk/double

    print "
    ";

    print "
    ";

    print "Drdnc kopyalama ilemi: Mantksal/Boolean:
    ";

    $kopya_degisken = ( boolean ) $degisken; // Mantksal/Boolean

    print "Deeri : ";

    print "$kopya_degisken
    ";

    print("Tr : ");

    print gettype( $kopya_degisken ) ; // Mantksal/Boolean

    print "
    ";

    print "
    ";

    ?>

    Bu programn can alc noktas rnein "$kopya_degisken = ( boolean ) $degisken;"eklindeki komut; burada $kopya_degisken adl deikene $degisken adl deikenin deerini(eittir iareti ile) kazandrrken, arada yeni deikenin kazanmasn istediimiz trn adnparantez iinde yazyoruz. Burada gerekte, $degisken adl deikenin deerine hi bir eyolmuyor. Bu program altrrsanz, ilk deerin ontalk ksmnn nceki rnekte olduu gibideiim ilemi sonunda tamamen yok olmadn grebilirsiniz.

    $degisken adl deikenin deeri deimeden durduu iin nc admda yptmz ondalktr olarak kopyalama sonucu yeni deikenin deeri yine kesiri ile karmza kyor.////////////////KUTU///////////Drt yararl fonksiyon

    PHP'de deiken deer tr deitirmekte kullanabileceimiz kullanlmaya hazr fonksiyonvardr. ilerde dngleri ele aldmzda daha ok anlam kazanacak olan bu deikenleriimdilik 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 birdeikenin iinde deer bulunup bulunmadn snamasn salar. unset() ise varolan birdeikeni yok eder. Bu iki fonksiyonu birlikte kullanabiliriz ve bo deikenleri yok ederek,bilgisayarn belliinde yer aabiliriz:if (isset($bir_degisken)) {

    print( $bir_degisken );

    }

    PHP-1 33

  • 8/14/2019 PHP Hakki_cal

    34/117

    else {

    unset($bir_degisken);

    }

    Bu kod paras, $bir_degisken isimli dikenin ii bo deise, ieriini grntleyecek, iibo ise varlna son verecektir.empty()isset() fonksiyonun tersi ileve sahiptir; bir deikene deer atanmamsa, veya deeri sfrveya bo alfanmerik (null string) ise, doru (True) deeri verir.$bir_degisken = 123;

    echo empty($bir_degisken);

    $bir_degisken = "";

    echo empty($bir_degisken);

    Bu program paras Browser penceresine sadece empty() fonksiyonun doru sonu verdiibirinci 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 Hakki_cal

    35/117

    print ($b);

    ?>

    Bu program Browser penceresine, 123'n hexadecimal ifadesi olan "1194666" yazdracaktr.lemciler (Operatrler)

    Yukardaki rnekleri birlikte yaptysak, = iaretini bol bol kullandk ve bylece PHP'nin birok operatrnden biriyle tantk. Buna PHP dilinde "atama operatr" denir. Bu ilemcisadece yukarda kullandmz gibi, bir deikenin bir deere eitliini ilan etmek amacylakullanlmaz. rnein:print ( $sayi = 123 ) ;

    ifadesinde olduu gibi, bir fonksiyonun iinde de hem atama ilemi yaplabilir; hem de ilemyrtlr. PHP'nin aritmetik, birleik-atama, birletirme, karlatrma ve mantksal snamaoperatrleri vardr.Aritmetik ilemciler:+ Toplama 6+5 = 11

    - kartma 6-5 = 1/ Blme 6/5 = 1.2* arpma 6*5 = 30% Kalan (Modulus) 6%5 = 1Aritmetik ilemleri gerek saylarla yaptmz gibi, tuttuu deer say olan deikenlerle deyapabiliriz.Daha nce, PHP'de deiken tanmlar ve bunlara deer atarken say olan deikenleri trnakiareti kullanmadan, alfanmerik deikenleri ise trnak iinde yazdmz hatrlayacaksnz.Bu, geleneksel hale gelmi olan bir programclk alkanldr. PHP, trnak kullanmasanz dabir deikenin say olup olmadn anlar; daha sonra bu deikenlerle aritmetik ilemyapabilir. PHP ayrca rakamla balayan alfanmerik deikenleri say olarak kullanmaya

    kalktnzda, bu deerin bandaki btn rakamlar say olarak kabul eder. PHP asndan harfveya iaretle balayan alfanmerik deikenlerin say olarak deeri sfrdr. rnek:$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, bunlarbirbirine ekleyerek (concatenation) ortaya yeni bir alfanmerik deiken kartabiliriz:

  • 8/14/2019 PHP Hakki_cal

    36/117

    $adi_soyadi = $adi . " " . $soyadi;

    print ("
    ");

    print ($adi_soyadi);

    print ($adi . "'nn soyad " . $soyadi . "'dir.")

    ?>

    Bu rnekte, sadece ekleme yoluyla yeni bir deiken oluturmakla kalmyoruz; fakatalfanmerik deikenleri, baka metinlerle de birbirine ekleyebildiimizi gryoruz. Bu ileminokta iaretiyle (.) yapyoruz. Bu ilemciyle sadece deikenlerin deerlerini deil fakatmetinleri de birbirine ekleyebiliriz:

    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 deikeninyeni 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. aretlerdeikenin adndan nce ise PHP nce deikenin deerini bir arttrr veya eksiltir, sonra buyeni deeri ileme katar; iaretler deiken adndan sonra ise, PHP deikenin o andakideerini ileme kadar, sonra deeri bir arttrr veya eksiltir./////////////////////KUTU BTT/////////////PHP'nin karlatrma yapmas iin kullandmz ilemciler ise ilem iaretinin sa vesolundaki deerleri veya deikenlerin deerlerini iaretin belirttii karlatrmay yaptktansonra 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 olmadnsnarsak sonu yanl kacaktr. PHP'nin karlatrma ilemcileri unlardr: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

    PHP-1 36

  • 8/14/2019 PHP Hakki_cal

    37/117

  • 8/14/2019 PHP Hakki_cal

    38/117

    $ilk_sem = 45;

    $ortalama = ($vize + $final) / 2;

    if (($vize >= 45 && $final >= 45) and ($ilk_se >= 65 || $ortalama >= 65)){

    print ("renci geti!");

    }

    else {

    print ("renci kald!");

    }

    ?>

    Burada, PHP nce || veya && iaretinin sonucunu bulacak sonra and veya or ilemcisiningereini yapaaktr. Bu kodun verecei sonucu, bilgisayarda altrmadan tahmin edebilirmisiniz? pucu: Bu rencinin yerinde olmak istemezdim!lem ncelii deyince.. Btn programlama dilleri gibi PHP iin de ilemlerin hangi srada

    yapld nem tar. "5 + 4 * 2" ileminin sonucu, nce 5 ile 4'n toplanmas ve sonucun 2 ilearplmas halinde baka, 4'n 2 ile arplmas ve sonucun 5 ile toplanmas halinde bakaolacaktr. Bu bakmdan, PHP'nin hangi ilemi nce yapt, hangi ilemi sonra yaptnbilmemiz gerekir. PHP'deki ilemlerin yapl sras yledir:++ ve --/ * %+ -< >== === | =&&||

    = += -= /= %= .=andxororr.Sabit Deerler

    ster Web, ister Web-d amal olsun, bir programn bazen bandanh sonuna kadar deerideimeyen deikene ihtiyac olabilir. "Deeri deimeyen deiken" teriminin anlamszolduu kansnda iseniz, bunlara sabit deerler adn da verebilirsiniz! PHP'de sabit deerler,Script boyunca deimeden kalr.

    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 vereceimiz isim, deeryerine de sabit deeri yazarz. rnek:

  • 8/14/2019 PHP Hakki_cal

    39/117

    $TL_Tutar = $Dolar_miktar * DOLAR_KURU;

    print ($TL_Tutar);

    ?>

    Burada tanmladmz DOLAR_KURU sabit-deeri, tpk bir deiken gibi kullanlabilir.Fakat bir sabit deeri tanmladktan sonra ieriini deitiremezsiniz. Sabit deer ile ayn ismitayan 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 hatavermez. Bir sabit deerin oluturulmu olup olmadn defined() fonksiyonu ile anlayabiliriz:

    Bu program, bu ekilde ve define() komutunu en st satra alarak altrrsanz, ikincialtrnzda programn sabit deeri yeniden oluturmay reddettiini grecektiniz. Sabitdeerleri, Web sitesinde ziyaretilerin girdii verilerden alarak kendiliinden oluturan birprogram yazdnzda, defined() fonksiyonu mantksal hata yapmanz nler.PHP'nin kullanlmaya hazr bir ka sabid deeri vardr. True (doru) deeri 1 olan, False(yanl) ise deeri sfr says veya bo alfanmerik olan iki sabittir. Dier sabitler unlardr:

    __FILE__ : O anda almakta olan PHP dosyasnn ad (kelimenin nnde ve sonunda iki alt-izgi var);__LINE__ : Bu ifadenin yer ald satrn says (kelimenin nnde ve sonunda iki alt-izgivar);PHP_VERSION: PHP'nin srm (ki kelimenin arasnda bir alt-izgi var);PHP_OS: PHP'nin alt iletim sistemi (ki kelimenin arasnda bir alt-izgi var);PHP_VERSION : PHP'nin srm (ki kelimenin arasnda bir alt-izgi var);Bunlara ek olarak, E_ERROR, E_WARNING, E_NOTICE ve E_PARSE eklinde hatadurumunda hatann eitli zelliklerini bildiren sabit deerleri de kullanabiliriz.PHP hakknda ok daha geni bilgiyi phpinfo() fonksiyonunu arak alabilirsiniz.//////////////////KUTU//////////////

    Tarih ve saat Verisi

    PHP, o andaki zaman bilgisini, saat, dakika, saniye ve salise olarak; tarih bilgisini yl, ay, gn(say veya isim olarak), programmzn herhangi bir yerinde bize bildirebilir. Bu bilgiyi Websunucusunda istediimiz anda, muhtemelen sunucunun bulunduu bilgisayarn sistemsaatinden alacak olan PHP, sunucu programnda farkl blgesel ayarlar iin gerekli dzenlemeyaplmsa, bu imkandan yararlanarak bize sunucunun deil, arzu ettiimiz blgenin saat vetarihini bildirebilir.

    PHP-1 39

  • 8/14/2019 PHP Hakki_cal

    40/117

    zellikle Trkiye'de olmayan bir sunucuda bu imkann bulunup bulunmadn, ancaksnayarak veya sistem yneticisine sorarak renebiliriz. Bylebir sNama iin u kodlarprogramnzn bana koyun:

    Browser penceresinde "Trke bugn gnlerden Sunday" yazsn okursanz, sunucuda Trkeiin blgesel ayar destei yok demektir!PHP'nin zaman ve tarih belirlemekte kullanabileceiniz balca fonksiyonu getdate() ise xylekullanlr.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 saniye57 dakika6 saat30 ayn gn says (1-31)0 haftann gn says (1-7)7 ayn says (1-12)2000 yl211 yln kanc gnSunday gnn adJuly ayn ad964929452 Unix sistemlerinde Epoch biiminde zaman bilgisi

    PHP'nin tarih ve saat bilgisini biimlendirmede yararlandmz date() fonksiyonunu dahasonra metin biimlerdirme blmnde ele alacaz

    PHP-1 40

  • 8/14/2019 PHP Hakki_cal

    41/117

    PHP'de Program Denetimi

    Bilgisayar program, belirli deerlere gre kendi izleyecei yolu kendisi bulmaldr. Bir Webprogram da ayn mantkla tasarlanr. PHP, bir ksmn daha nceki blmlerde, bir ksmn daimdi ele aldmz aralar kullanarak, belirli durumlarda belirli istikametlere gidecek, yerigeldiinde geri dnecek, yeri geldiinde baka blmlere srayacak bir ak plantasarlamamza imkan verir.Web programlarmzda, ziyaretilerimizin sitemizde yaptklar veya yapmak istediklerinibildirdikleri ie gre sayfalar, bu ilere gre sayfa ierikleri sunarz. Web programmzziyaretimizin hareket tarzna ve amacna uygun olarak ilerler. Bir programn ak plannkontrol etmemizi salayan unsurlar ou zaman programn kendi kendine karar vermesinisalayan aralardr. PHP'de program denetim unsurlar, programn gidi ynndeitirmemizi 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 yledavranmak" zere almaz myz? PHP programnda if deyimi bunu salar. Kelime anlam eerolan if deyimi ile programmz karar almaya zorlarz. Ne var programmz bizim kadar akllolamayaca iin if artnn doru veya yanl olmas durumunda ne yapacan da ona bizsyleriz. 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 {

    dier her durumda yaplacak ilere ilikin komutlar

    }

    PHP, if ifadesinin doru olmas halinde, ifadeye ait ilk ssl parantezin iindeki komutlar icraeder; bu artlar doru deilse, elseif deyimi ile ileri srebileceimiz dier bir grup artn doruolup olmadn snayabiliriz. Bu artlar yerine geliyorsa, PHP, elseif blmndeki ileri icraeder. Nihayet dier her hangi bir durumda icra edilmesini istediimiz komutlar elseblmnde belirtiriz. PHP, if deyimi doru deilse, deyime ait ssl parantezin iindeki ileriyapmadan yoluna devam eder; varsa elseif deyiminin artlarn snar; elseif blm yok fakatelse blm varsa bu blmdeki ileri icra eder. Deyimde else blm de yoksa, PHP yoluna ifdeyiminden sonraki ilk admdan devam eder. Bunu bir rnekle belirtelim:

  • 8/14/2019 PHP Hakki_cal

    42/117

    if ( $sarki == "Gne Doacak" ) {

    echo ("Setiiniz arknn ad: Gne Doacak!");

    }

    elseif ($sarki == "Beklerim Ben") {

    echo ("Setiiniz arknn ad: Beklerim Ben!");

    }

    else {

    echo ("Ltfen bir ark seiniz!");

    }

    ?>

    ou zaman if deyimlerini birden fazla koulu snayacak ekilde yazarz; bununla birlikteelseif ve else blmleri olmadan da yazlabilir:

    Buradaki if deyimi $parola deikeninin bo alfanmerik olmas halinde ziyaretiyi uyarak vegrevi bitecektir. Ziyareti bir parola yazmsa, daha sonraki komutlar bu parolann doru olupolmadn snayabiliriz.switch deyimi

    PHP'de program akn ynlendirmekte kullandmz bir dier unsur, switch deyimidir. Adanahtar anlamna gelen switch deyimi, verilen bir deikenin deerinin sraladmzkoullardan hangisine uygun olduunu snar ve o koula ilikin komutlar icra eder. PHP'ninyapt 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

    PHP-1 42

  • 8/14/2019 PHP Hakki_cal

    43/117

    break;

    ......................

    ......................

    default:

    dier her durumda yaplacak ilere ilikin komutlar

    }

    switch deyimini yazarken mutlaka break ifadesini kullanmamz gerekmez; switch deyimininak break ile kesilmemise, program ilk art yerine gelmi olsa bile dier artlar da snamayadevam eder ve en sondaki default deyimine ulaarak (default'tan sonra noktal virgl deil ikinokta stste iareti olduuna dikkat edin), bu blmdeki komutlar icra eder. Ne var kiprogramclk mantna aykr olabilir: bir deikenin ierii verdiimiz artlardan birinitutmusa, muhtemelen dier artlar yerine getirmeyecek demektir. Bu durumda dierkoullarn snanmas gereksiz e default ilerin icra edilmesi ise hata olur. Bu deyimi de birrnekle grelim:switch ( $sarki ) {

    case "Gne Doacak" ;

    echo ("Setiiniz arknn ad: Gne Doacak
    ") ;

    break;

    case "Derdime Derman" ;

    echo ("Setiiniz arknn ad: Derdime Derman
    ") ;

    break;

    case "Haberi Yok" ;

    echo ("Setiiniz arknn ad: Haberi Yok
    ") ;

    break;

    case "Sonsuza kadar" ;

    echo ("Setiiniz arknn ad: Sonsuza kadar
    ") ;

    break;

    default:

    echo ("Setiiniz arknn ad bilinmiyor
    ") ;

    }

    Programmz, bu kodu icra ederken,, $sarki adl deikenin deerini, buradaki drt isimlekarlatracaktr. arknn ad, "Gne Doacak" ise ilk durum gereklemi olacak; programBrowser pencerisine arknn adn yazacak (ve muhtemelen bu szlerini grntleyecek!) ve

    ikinci adma break ifadesine geecektir. break, switch deyiminin sona ermesini salar; PHPyoluna, switch deyiminin kapanan ssl parantezinden sonra devam eder. Bu rnekte breakifadesi kullanlmam olsayd, PHP, dier artlar da snacak ve boun azaman kaybedecekti;daha da garibi, en sondaki default komutu da icra edilecei iin programmz Browserpencerisine hem seilen arknn adn, hem de "Setiiniz arknn ad bilinmiyor" yazacakt.Bunu gznnde tutarak, switch deyimini daima break ile birlikte yazmamz gerekir.////////////////KUTU///////////////

    PHP-1 43

  • 8/14/2019 PHP Hakki_cal

    44/117

    switch iin ksa yolKimi zaman uzun uzadya switch deyimi yazmamz gerekmeyebilir; bir deikenin deerinisadece bir arta uygunluk asndan snamamz gerekir. Bunu soru ve iki nokta ststeiaretleri (? ... :) olarak yazlan ilemci ile yaparz. Diyelim ki, Web sitemizi ziyaret edenkiinin parola yazp yazmadn sramak istiyoruz:

    Bu kod parac, ziyaretinin parola girip girmediini $parola deikeninin iinin bo olupolmadna bakarak anlayacak ve $parola deikenin ii bo ise (yani soru iaretininsorgulad durumun doru olmas halinde) iki nokta stskte iaretinden nceki metni $uyardeikenin ierii haline getirecek; $parola deikeninin ii dolu ise (yani koul yerinegelmiyorsa, durum yanl ise) iki nokta stste iaretinden sonraki metni $uyar deikenininierii 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 bazenprogrammzn bir koul gerekleincele kadar yerinde saymas ve koul gereklemedikeilerlememesi gerekebilir. Kimi zaman da programmza bir ii bitirmeden ileri gitmemesini bizbildiririz. Program aknn bu tr denetimini dng deyimleri salar. PHP'de iki tr dngvardr: bir durum devam ettii veya etmedii srece yaplan ve ka kere tekrar edeceibilinemeyen while dngleri, ve tekrar says belirli for dngleri.while dngs

    Bir deikenin ieriinin belirli bir art karlamas veya karlamamas halinde icra edilir.Burada dikkat edeceimiz nokta, programn icras srasnda deikenin ieriinin veya koulundeimesinin salanmasdr. Aksi taktirde pgrammz sonsuz dngye girer ve muhtemelenker. while dngs yle yazlr:while (koul) {

    Koul doru ise yaplacak ilere ilikin komutlar

    }

    Bu yntemin yaygn kullanld alan, bir sayala yaptrlan ilerdir. Aadaki programwhile.php adlma kaydedip, alrrsanz, PHP, Browser'n yaz tr boyutunu 1'den 7'ye kadarbyterek, ayn metni yazdracaktr:

    PHP'de Dng

    PHP-1 44

  • 8/14/2019 PHP Hakki_cal

    45/117

    Programmz, while dngs iindeki iken, sonsuz dngden kurtulabilmek iin, yazyyazdrdktan sonra, $sayac deikenini bir arttryor. Aksi taktirde, deiken hi bir zamanwhile dngsnn bekledii arta kavuarak 7'ye eit hale gelemeyecektir. (Program, sondaki"$sayac ++;" satrn kaldrarak denerseniz, zararsz bir sonsuz dngnn ne olduunugrebilirsiniz! 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 ieren deikenideitirebilirler. Szgelimi elektronik ticaret site