11.07.2015 Views

PhP PHP'ye giriş Peki ama PHP nedir? PhP nasıl çalıştırılır? 1 PhP ...

PhP PHP'ye giriş Peki ama PHP nedir? PhP nasıl çalıştırılır? 1 PhP ...

PhP PHP'ye giriş Peki ama PHP nedir? PhP nasıl çalıştırılır? 1 PhP ...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>PhP</strong><strong>PHP</strong>Personal Home Page/ / Form InterpreterHypertext PreprocessorDers 5• Rasmus Lerdorf, 1994 yılında bir iş başvurusu yaptığında kendisiile ilgili bilgileri sergileyebileceği web ortamında bir personalhome page yapma <strong>ama</strong>cıyla yola çıkarak <strong>PHP</strong> dilinin ilk versiyonunuortaya çıkarmıştır.• Başlangıçta büyük bir kısmı Perl dilinden alınmış olan bu dile dahasonraları bir form yoluyla ziyaretçiden gelen bilgileri işlemeyisağlayan ekleri yazdı ve programın adı <strong>PHP</strong>/FI (FormInterpreter/ Form Yorumlayıcı) oldu.• Rasmus Lerdorf, 1995'in ortalarında, Zeev Suraski, Stig Bakken,Shane Caraveo ve Jim Winstead ile bir grup kurdu ve <strong>PHP</strong>'yiPerl'den ödünç alma rutinlerle iş yapan bir paket olmaktançıkartıp, Nesne-Yönelimli (Object-Oriented) bir programl<strong>ama</strong> dilihaline getirdi.• <strong>PHP</strong> ve açık kaynak olarak geliştirilmeye başlanan MySQL'inbirlikte kullanıldıklarında yakaladıkları etkinlik binlerce dolarverilerek alınan veritabanı ve uygul<strong>ama</strong> dilleriyle yarışmanınötesinde farklılıklara sahip oldu.12<strong>PHP</strong>’yegiriş• C/C++, Pascal, hatta Visual Basic bilen kişiler için <strong>PHP</strong>öğrenmek hemen hemen bir öğleden sonrayı ayırarakyapılabilecek bir iştir.• Bu dillere aşina olmayanlar ise belki birkaç öğledensonralarını ayırmak zorunda kalabilirler!• <strong>PHP</strong>, bir script dilidir; yani kodları düz yazı dosyalarıhalinde kaydedilir ve kullanılacağı ortamda ilgiliyorumlayıcı tarafından yorumlanarak çalıştırılır.<strong>Peki</strong> <strong>ama</strong> <strong>PHP</strong> <strong>nedir</strong>?• <strong>PHP</strong> ile artık oturup her türlü işlevselliği sahipprogramlar yazabilirsiniz; yani <strong>PHP</strong> başlı başınauygul<strong>ama</strong> alanları bulabilecek düzeye ulaşmıştır.• Başka bir deyişle <strong>PHP</strong> ile oyun programından tutunveritabanı yönetimine kadar hemen her türlü programıyazabilirsiniz.• <strong>PHP</strong> kodları, oluşturacağımız HTML sayfalarındaHTML etiketlerinin arasında kendi özel ayracı içindeyazılır:34<strong>PhP</strong> nasıl çalıştırılır?r? 1• Dosya adı uzantısı olarak ".<strong>PHP</strong>," ".<strong>PHP</strong>2," ".<strong>PHP</strong>3," veya ".<strong>PHP</strong>4"görünce, kendine kendine, "Yine bana iş çıktı!" diye düşünür!• Çünkü Web Server, uzantısı ".htm" veya ".html" olan bir dosyayı,kendi sabit disklerinden birinde bulur ve zahmetsizceziyaretçinin bilgisayarına gönderir.• Fakat, ".asp," .pl," ".cfm" gibi, ".php" uzantısı, Web Sunucu'ya busayfayı olduğu gibi alıp ziyaretçinin Browser'ına göndermekyerine, önce <strong>PHP</strong> yorumlayıcıyı çağırarak, ona teslim etmesigerektiğini bildirir.• <strong>PHP</strong> yorumlayıcısı (yani Windows ortamında <strong>PHP</strong>.exe veya 4'ncüsürümle gelen <strong>PHP</strong>4isapi.dll, Unix ve türevlerinde çalıştırılabilir<strong>PHP</strong> dosyası), kendisine teslim edilen bu belgede önce "" ayraçları arasındaki <strong>PHP</strong> kodlarını seçerek alır ve gereği neise onu yapar.• Bu ayraçların içinde kalan kodlar, bizim yapılmasını istediğimizişlemin komutlarıdır. HTML ile yetinmeyip, <strong>PHP</strong> kullanmamızınsebebi, bu komutların HTML'in yap<strong>ama</strong>yacağı şeyleri yapmasıdır.<strong>PhP</strong> nasıl çalıştırılır?r? 2• Bu icraatın sonunda ortaya çıkan ürün eğer ziyaretçiye gönderilecekse,HTML etiketleri içinde gönderilir; yani ziyaretçi asla <strong>PHP</strong> kodlarınıgöremez.• Kimi z<strong>ama</strong>n <strong>PHP</strong> programımızın çalışması sonucu ortaya ziyaretçiyegönderilecek bir ürün çıkmaz; elde edilen sonuç ya başka bir progr<strong>ama</strong>(örneğin elektronik ileti gönderen bir Sendmail programına) hammaddeolarak verilir, ya da Server'da sabit diske yazılır.• Fakat her durumda, Web ziyaretçimiz bizim <strong>PHP</strong> kodlarımızı göremez.• Ziyaretçi ne tür Browser kullanırsa kullansın, kendisine Sunucu'dandaima saf HTML kodu geleceği için, sayfalarımızı rahatça görebilecektir.• Özetlersek, <strong>PHP</strong> bir CGI programl<strong>ama</strong> dilidir; bu dille, Web Sunucusu ileWeb ziyaretçisi arasındaki buluşma noktası olan CGI'da bilgi alışverişiyapılabilir; Sunucu'da bulunan başka programlar çalıştırılabilir veböylece Web sayfalarımıza HTML'in sınırl<strong>ama</strong>larının ötesinde hareketve ziyaretçi ile etkileşme olanağı kazandırılabilir.561


<strong>PHP</strong> ve Veritabanı• Sayfanızı Internet ziyaretçisine göndermeden önce birtakım komutları icra etmesini, bir takım veri dosyalarınıaçıp içindeki bilgileri alıp bunları HTML kodlarıylabezeyip, Browser'a bildiğimiz klasik HTML sayfası olarakgöndermesi talimatını veririz.• MySQL ve PostgreSQL ise, Windows sistemlerindeDenetim Masası'nda gördüğünüz ODBC Veri KaynağıYönetmeni adlı araç gibi, bir veritabanı sunucusu, yaniDatabase Server programlarıdır.<strong>PHP</strong> ve Web Sunucusu• Bizim açımızdan <strong>PHP</strong>, bir Web sunucu programıdır;kurulacağı sistemdeki Web sunucusu ile uyumlu olmasıgerekir.• <strong>PHP</strong> 4'ncüsürümüitibariyle, <strong>PHP</strong> bütün Unix-türevisistemler (örneğin Linux) ve Microsoft Windowssistemleri ile uyumludur. Birlikte çalışabileceği Websunucu programları arasında Apache, IIS, FHTTP,Omni HTTPd, Xitami ve Windows 95/98 için PWS(Personal Web Server) vardır.• Gerçek Internet ortamında sunucu programlara <strong>PHP</strong>yeteneği kazandırma işlemi, Web Programcısı olarakbizi ilgilendirmez; bizim için Internet sitemize evsahipliği yapan Hosting firmasının <strong>PHP</strong> desteği veripvermediğini bilmek yeter.78<strong>PHP</strong> Dili<strong>PHP</strong> Dili• <strong>PHP</strong> bir Script dilidir; <strong>PHP</strong> ile yazdığınız"programlar" birer düzyazı dosyasıdır.• <strong>PHP</strong> yorumlayıcısı, bu "programı" çalıştırabilmek içindosyanın içinde <strong>PHP</strong> komutlarını arar. <strong>PHP</strong> komutlarıiki şekilde yazılabilir:1. 2. • <strong>PHP</strong> komutlarınızı daha uzun olmakla birlikte etiketiyle de kullanabilirsiniz. Aşağıdakikodu merhaba2.<strong>PHP</strong> adıyla kaydedin:print ("Merhaba Dünya!");


<strong>PHP</strong>'nin Yapı Taşları$adi = “Ahmet";$degisken = "adi";print $$degisken;• Burada Browser penceresine yine “Ahmet” kelimesi yazılacaktır; çünkü <strong>PHP</strong>$degisken adlı değişkenin "adi" adlı değişkeni tuttuğunu bilecek ve iki Dolarişaretini görünce, $degisken 'in değerini değil, onun tuttuğu değişkenin değeriniyazacaktır.• Bu, size şu anda karışık görünebilir. Daha sonra döngüleri gördüğümüzde butekniği bir satırlık kod ile yüzlerce değeri yazdırmakta kullanacağız. Bu teknikşöyle de kullanılabilir:$adi = "adi";$degisken = "adi";$$degisken = "Ahmet";print "$adi";print $$degisken;print "${$degisken}";print "${'adi'}";• Buradaki dört "print" komutu da Browser'a "Ahmet" kelimesini yazdıracaktır.<strong>PHP</strong>'nin Yapı Taşları• <strong>PHP</strong>'de bir değişkenin tuttuğu değer, bir başka değişkeneatanabilir. Bu ya durağan, ya da dinamik olarak yapılır. Durağanyöntemde:$birinci_degisken = "Elif";$ikinci_degisken = $birinci_degisken;$birinci_degisken = "Betül";print $ikinci_degisken;• Buradaki "print" komutu Browser penceresine "Elif" kelimesiniyazdıracaktır.• İki değişken arasındaki değer alış-verişi birinci değişkenintuttuğu değeri değiştirmeden önce olduğu için, ikinci değişkenbirinci değişkenin ilk değerini almış oldu.• Buna değerle erle iletme de denir.1314<strong>PHP</strong>'nin Yapı TaşlarıVeri Türleri• Bazı durumlarda iki değişken arasındaki değer alış-verişi sürekli(dinamik) olsun isteriz. <strong>PHP</strong>, buna, ilk at<strong>ama</strong> sırasında & işaretikullanırsak izin verir:$birinci_degisken = "Nurcan";$ikinci_degisken = &$birinci_degisken;$birinci_degisken = "Tülay";print $ikinci_degisken;• Buradaki "print" komutu ise Browser penceresine "Tülay" kelimesiniyazdıracaktır.• Çünkü iki değişken arasındaki değer alış-verişi referans ileyapıldığından birinci değişkenin değerini dinamik olarak ikincideğişkene atamış olduk.• Buna referansla iletme de denir.• <strong>PHP</strong>, değişkenlere, tuttukları değere göre farklıbellek alanı tahsis eder; bu bakımdan verilerimizintürü etkin bir programcılık açısından önem taşır.• Ayrıca <strong>PHP</strong>, diğer bütün programl<strong>ama</strong> dilleri gibibelirli veri türleri ile belirli işlemleri yapar veyayap<strong>ama</strong>z.• Örneğin, ancak iki sayı arasında aritmetik topl<strong>ama</strong>yapılabilir. İki metin tutan değişken aritmetik olaraktoplan<strong>ama</strong>z; ancak içerdikleri değerler ard ardaeklenebilir.• Ne var ki, <strong>PHP</strong> sizin aritmetik topl<strong>ama</strong> mı, yoksa ardarda ekleme mi yapmak istediğinizi bilmek durumundadeğildir. Dolayısıyla değerleri 5 ile 6 olan iki değişkenitopladığınız z<strong>ama</strong>n ortaya 11 yerine 56 çıkarsa,kabahati <strong>PHP</strong>'de değil, değişkenlere veri atayan kişide(büyük bir ihtimalle kendinizde) ar<strong>ama</strong>lısınız.1516Veri TürleriTür Değiştirme• <strong>PHP</strong> açısından dünyada altı tür değer vardır:• Tamsayı (Integer): 5,124, 9834 gibi• Çift (Double): 3,567 gibi• Alfanümerik (String): "Reşit" gibi• Mantıksal (Boolean): doğru (true)/yanlış (false) gibi• Nesne (Object)• Dizi (Array)• Bazı uzmanlara göre, gerçekte <strong>PHP</strong>'de mantıksal (boolean)değişken türü yoktur.• Bunun sebebi, <strong>PHP</strong>'nin true (doğru) ya da false (yanlış) olarakatadığımız değerleri 1 ve boş/null değerlere çevirmesi, mantıksalolarak sorgulandığında 0 dışındaki tam ve ondalık değişkenleriTRUE, 0'ı FALSE sayması, ve boş alfanümerik değişkenleriFALSE, dolu alfanümerik değişkenleri ise TRUE olarakdeğerlendirmesidir.• Ancak daha sonra gereceğimiz gibi <strong>PHP</strong>,Mantıksal/Boolean adındabir değişken değiştirme fonksiyonuna sahiptir ve bu türdeğişkenlerin türü sorulduğunda "boolean" karşılığını verir.• Değişkenlere atadığımız değerlerinin türlerinigenellikle biliriz; <strong>ama</strong> yüzlerce değişkenle uğraştığımızbir Web programında değişken türünü unutmak çokkolaydır.• Kimi z<strong>ama</strong>n da değişkenlere program yoluyla değeratarız; başka bir deyişle programımız bazıdeğişkenleri kendisi oluşturabilir, ve bunlara kendisideğer atayabilir.• Bu tür program yoluyla atanan değerlerin de türündekuşkuya kapıldığımız anlar olabilir.• Bir değişkenin değerinin türü hakkında kuşkunuzvarsa, en emin yol bunu <strong>PHP</strong>'nin kendisine sormaktır.• Bu sorgul<strong>ama</strong>yı gettype() fonksiyonu ile yaparız.17183


Fonksiyon• <strong>PHP</strong>'nin gettype() ve print() gibi, kendi içinde bulunankullanılmaya hazır bir çok fonksiyonu vardır.• Daha sonra kendi fonksiyonlarımızı yazmanın yollarınıda göreceğiz.• Programcılık dilinde ister dile ait olsun, ister kendimizyazmış olalım, bir fonksiyonu kullanmaya fonksiyonçağırma denir.• Fonksiyonlar da fonksiyon çağırabilirler.• Çağrılan bir fonksiyon ya kendisinden beklenen işiyapar, ya da kendisini çağıran işleme veya fonksiyonubir değer sunar. Buna fonksiyondan dönen değerdenir.Escape• <strong>PHP</strong> bunu, değişken adının başındaki $ görerek yaparak. $ işaretigibi <strong>PHP</strong> için özel anlamı olan işaretlerin anlamlandırılmasını önlemekve bu işaretleri düz metin saymasını sağl<strong>ama</strong>k için bu işaretlerinönüne ters-bölü işareti koyarız. Buna o karakteri kurtarma veyaESCAPING denir.• <strong>PHP</strong>'nin anlamlı işaretleri ve bunların ESCAPE-yazılışı şöyledir:• \' Tek tırnak \[• \" Çift tırnak \]• \\ Ters-bölü \{• \$ Dolar işareti \}• \n Yeni Satır (New Line)• \r Satır Başı (Return)• \t Sekme (Tab) karakteri• Kimi z<strong>ama</strong>n bir değişkene atadığımız değerin türünü değiştirmekgerekir. Bunu settype() fonksiyonu ile yaparız.• Php%20Örnekler/ornek2.php• Php%20%20Örnekler/ornek3.rnekler/ornek3.phpPhp Örnekler\ornek3a.ornek3a.php1920Bazı Yararlı Fonksiyonlar 1isset() ve unset()• <strong>PHP</strong>, bir değişken tanımlandığı anda, sanki içinde değer varmış gibi,bilgisayarın belleğinde yer ayırır. Bu bazen bilgisayarın kıt kaynaklarınızorlayabilir. isset() fonksiyonu, <strong>PHP</strong>'nin bir değişkenin içinde değerbulunup bulunmadığını sın<strong>ama</strong>sını sağlar.• unset() ise var olan bir değişkeni yok eder. Bu iki fonksiyonu birliktekullanabiliriz ve boş değişkenleri yok ederek, bilgisayarın belliğindeyer açabiliriz:if (isset($bir_degisken)) {print( $bir_degisken );}else {unset($bir_degisken);}• Bu kod parçası, $bir_degisken isimli değişkenin içi boş değilse,içeriğini görüntüleyecek, içi boş ise varlığına son verecektir.Bazı Yararlı Fonksiyonlar 2• empty() : isset() fonksiyonun tersi işleve sahiptir; birdeğişkene değer atanmamışsa, veya değeri sıfır veya boşalfanümerik (NULL string) ise, doğru (True) değeri verir.$bir_degisken = 123;echo empty($bir_degisken);$bir_degisken = "";echo empty($bir_degisken);• Bu program parçası Browser penceresine sadece empty()fonksiyonun• doğru sonuç verdiği birinci echo() deyiminde 0 yazdıracaktır.• yanlış sonuç verdiği ikinci echo() deyiminde 1 yazdıracaktır.2122Bazı Yararlı Fonksiyonlar 3is_string(), is_numeric(), is_integer(),is_double(), is_null, is_array()Bazı Yararlı Fonksiyonlar 4intval(), doubleval(), strval()• Sınadıkları değişkenin aradıkları türden değer içermesi halinde doğru (True) sonuçverirler.


İşlemciler (Operatörler)• Yukarıdaki örnekleri birlikte yaptıysak, = işaretini bol bolkullandık ve böylece <strong>PHP</strong>'nin bir çok operatöründen biriyletanıştık. Buna <strong>PHP</strong> dilinde "at<strong>ama</strong> operatörü" denir.• Bu işlemci sadece yukarıda kullandığımız gibi, bir değişkenin birdeğere eşitliğini ilan etmek <strong>ama</strong>cıyla kullanılmaz. Örneğin:print ( $sayi = 123 ) ;• ifadesinde olduğu gibi, bir fonksiyonun içinde de hem at<strong>ama</strong>işlemi yapılabilir; hem de işlem yürütülür.• <strong>PHP</strong>'nin aritmetik, birleşik-at<strong>ama</strong>, birleştirme, karşılaştırma vemantıksal sın<strong>ama</strong> operatörleri vardır.• Aritmetik işlemciler:+ Topl<strong>ama</strong> 6+5 = 11- Çıkartma 6-5 = 1/ Bölme 6/5 = 1.2* Çarpma 6*5 = 30% Kalan 6%5 = 1Stringleri Birleştirmek• Bununla birlikte elimizde bir kişinin adı ve soyadı ayrı değişkenlerhalinde ise, bunları birbirine ekleyerek (concatenation) ortaya yenibir alfanümerik değişken çıkartabiliriz:


Sabit Değerler• "Değeri değişmeyen değişken" teriminin anlamsız olduğu kanısında iseniz, bunlarasabit değerler adını da verebilirsiniz!• <strong>PHP</strong>'de sabit değerler, Script boyunca değişmeden kalır.define ("SABIT_DEGER", değer);• Sabit değerler, değişkenlerden farklı şekilde oluşturulur. Bunun için <strong>PHP</strong>'nindefine() fonksiyonunu kullanırız. Bu fonksiyonun yazım kuralı şöyledir:Bazı sabit değerlererler• <strong>PHP</strong>'nin kullanılmaya hazır bir kaç sabit değeri vardır. True (doğru)değeri 1 olan, False (yanlış) ise değeri sıfır sayısı veya boş alfanümerikolan iki sabittir.•Diğer sabitler şunlardır:•__FILE__ : O anda çalışmakta olan <strong>PHP</strong> dosyasının adı (kelimenin önündeve sonunda iki altçizgi vardır);•__LINE__ : Bu ifadenin yer aldığı satırın sayısı (kelimenin önünde vesonunda iki alt-çizgi vardır);•<strong>PHP</strong>_VERSION : <strong>PHP</strong>'nin sürümü (İki kelimenin arasında bir alt-çizgivardır);•<strong>PHP</strong>_OS : <strong>PHP</strong>'nin çalıştığı işletim sistemi• Bunlara ek olarak, E_ERROR, E_WARNING, E_NOTICE ve E_PARSEşeklinde hata durumunda hatanın çeşitli özelliklerini bildiren sabitdeğerleri de kullanabiliriz.•<strong>PHP</strong> hakkında çok daha geniş bilgiyi phpinfo() fonksiyonunu çağırarakalabilirsiniz.3132<strong>PHP</strong>'de Program Denetimi• Bilgisayar programı, belirli değerlere göre kendiizleyeceği yolu kendisi bulmalıdır.• Bir Web programı da aynı mantıkla tasarlanır. <strong>PHP</strong>, birkısmını daha önceki bölümlerde, bir kısmını da şimdiele aldığımız araçları kullanarak, belirli durumlardabelirli yerlere gidecek, yeri geldiğinde geri dönecek,yeri geldiğinde başka bölümlere geçecek bir akış planıtasarl<strong>ama</strong>mıza imkan verir.• Web programımız ziyaretçimizin hareket tarzına ve<strong>ama</strong>cına uygun olarak ilerler.• Bir programın akış planını kontrol etmemizi sağlayanunsurlar çoğu z<strong>ama</strong>n programın kendi kendine kararvermesini sağlayan araçlardır.if Deyimi• if şartının doğru veya yanlış olması durumunda ne yapacağını da ona bizsöyleriz.• if deyimi şöyle yazılır:if ( koşullar ) {koşullar doğru ise yapılacakişlere ilişkin komutlar}elseif (diğer koşullar) {diğer koşullar doğru ise yapılacakişlere ilişkin komutlar}else {diğer her durumda yapılacakişlere ilişkin komutlar}3334switch deyimiswitch için kısa yol• Verilen bir değişkenin değerinin sıraladığımız koşullardan hangisineuygun olduğunu sınar ve o koşula ilişkin komutları icra eder.• <strong>PHP</strong>'nin yaptığı işi bitirdikten sonra switch deyiminin dışına çıkmasınısağlayan, break komutu vardır:switch ( değişken ) {case KOŞUL-1 :Koşul-1 doğru ise yapılacakişlere ilişkin komutlarbreak;case KOŞUL-2 :Koşul-2 doğru ise yapılacakişlere ilişkin komutlarbreak;...default:diğer her durumda yapılacakişlere ilişkin komutlar}• Kimi z<strong>ama</strong>n uzun uzadıya switch deyimi yazmamızgerekmeyebilir; bir değişkenin değerini sadece bir şartauygunluk açısından sın<strong>ama</strong>mız gerekir.• Bunu soru ve iki nokta üst üste işaretleri (koşul) ? ... :… olarakyazılan işlemci ile yaparız.• Diyelim ki, Web sitemizi ziyaret eden kişinin parola yazıpyazmadığını sın<strong>ama</strong>k istiyoruz:35366


Döngüler• Programımızın bir koşul gerçekleşinceye kadar yerindesayması ve koşul gerçekleşmedikçe ilerlememesigerekebilir.• Kimi z<strong>ama</strong>n da programımıza bir işi bitirmeden ilerigitmemesini biz bildiririz.• Program akışının bu tür denetimini döngü deyimlerisağlar.• <strong>PHP</strong>'de iki tür döngü vardır: bir durum devam ettiği veyaetmediği sürece yapılan ve kaç kere tekrar edeceğibilinemeyen while döngüleri, ve tekrar sayısı belirli fordöngüleri.while döngüsü• Bir değişkenin içeriğinin belirli bir şartı karşıl<strong>ama</strong>sı veyakarşıl<strong>ama</strong>ması halinde icra edilir.• Burada dikkat edeceğimiz nokta, programın icrasısırasında değişkenin içeriğinin veya koşulun değişmesininsağlanmasıdır.• Aksi taktirde programımız sonsuz döngüye girer vemuhtemelen çöker.• while döngüsü şöyle yazılır:while (koşul) {Koşul doğru ise yapılacakişlere ilişkin komutlar}3738Do … while• while döngüsü fark ettiğiniz gibi, ileri sürdüğümüzşartı, iyi yapmadan önce sınar; ve bu şart ortadankalkmamışsa (yani henüz doğru/true ise) yapacağı işiyapar; başka bir deyişle while döngüsünün yapacağı işhiç yapılmayabilir.• Fakat sın<strong>ama</strong>nın iş yapıldıktan sonra yerine getirildiğibir şekli de vardır:• do… while … Bu döngü ise şöyle yazılır:do {Koşul doğru ise yapılacakişlere ilişkin komutlar}while (koşul);for döngüsü• döngünün belirli bir sayıda olmasını ve mesela bu sayının bizimistediğimiz bas<strong>ama</strong>klarda artmasını gerektiriyorsa, döngüyü fordeyimiyle kurabiliriz.• Ayrıca for deyimi sayaç gibi şartın yerine gelmesini sağlayacakarttırma veya eksiltme işlemlerini kendisi yapacağı için, sonsuzdöngüye girme tehlikesi de hemen hemen yoktur.• Bu döngü şöyle yazılır:for ( $yeni_deg at<strong>ama</strong> ; koşul ; artış ) {Koşul doğru ise yapılacakişlere ilişkin komutlar}3940foreach• <strong>PHP</strong>'nin programcıya çok kolaylık sağlayan bir diğerdöngüsü, foreach döngüsüdür.• Ancak bir değişkenin bütün elemanlarını tekrarsayısında esas alan bu döngünün çalışma ilkelerinigörebilmek için dizi değişken kavramını ele almışolmamız gerekiyor.foreach ($array as $current) {// ...}• Başka bir yazım şekliforeach ($array as $key => $value){// ...}break, continueDöngüyü sona erdirmek için:break• Programımızın akışı, bazen döngünün durdurulmasını gerektirir.• Örneğin, sayaç değişkenini ziyaretçinin vermesi gerektiği ve vermediğidurumda, döngünün başl<strong>ama</strong>ması yerinde olur.• Programın gerektirdiği böyle bir sebeple döngüyü break komutuyladurdururuz.Döngüyü sürdürmek için:continue• break ifadesinin döngüyü t<strong>ama</strong>men durdurduğunu fark ettiniz mi?• Oysa programımızın akışı, kimi z<strong>ama</strong>n da döngünün sadece belirli birdurumda kendisinden beklenen işi yapm<strong>ama</strong>kla birlikte böyle tümüylekesilmesini de gerektirmez.41427


FonksiyonlarFonksiyon Tanıml<strong>ama</strong> ve Çağırma• Bir bilgisayar programının kalbi, fonksiyonlardır.• Fonksiyonlar, bir kere tanımlanır ve bir çok kereler, ihtiyaçolduğu noktada hizmete çağrılır.• Fonksiyonlar genellikle bir iş veya hesapl<strong>ama</strong> yaparlar ve bununsonucu olarak ortaya yeni bir değer çıkartırlar. Bu değere"fonksiyondan dönen değer" denir.• Şu ana kadar sürekli kullandığımız echo() ve print() bu tür<strong>PHP</strong> fonksiyonlarıdır.• <strong>PHP</strong>'nin kendi fonksiyonlarını göreve çağırmak, yine yukarıdakiörneklerde olduğu gibi, program içinde gerektiği yere adını vekullanacağı değeri yazmakla olur:print ("Bu bir metindir!");• <strong>PHP</strong> bizim kendi fonksiyonlarımızı kullanmamıza da izin verir.• Bunun için önce fonksiyonu tanıml<strong>ama</strong>mız gerekir• <strong>PHP</strong>'de fonksiyonlar function komutu ile oluşturulur.• Fonksiyon birden fazla değer bekleyecekse, bunlarındeğişken adlarının arasına virgül koyarız.• Fonksiyona ulaştırılan değerlere argüman denir.• Fonksiyon, kendisine bir değer ulaştırılmasını beklemesebile içi boş parantez koymamız gerekir.• Buna göre <strong>PHP</strong>'de fonksiyon şöyle yazılır:function fonksiy_adı(arg1, arg2, ... ,argN){fonksiyonun yapacağı işlereilişkin komutlar}• örnek5. rnek5.phpörnek5a. rnek5a.php4344Fonksiyona varsayılan değer verebiliriz• Buradaki örneklerde tanımladığımız fonksiyonlarabekledikleri değerleri, onları göreve çağırdığımıznoktada biz veriyoruz.• Ancak öyle durumlar olabilir ki, fonksiyonun beklediğideğerlerden biri veya bir kaçı, göreve çağıran satırtarafından verilmeyebilir; fonksiyon varsayılan birdeğerle çalıştırılabilir.function yazdir ($metin, $boyut=3) {print ("$metin");}• Php%20%20Örnekler/ornek5b.rnekler/ornek5b.phpDeğişkenlerin kapsamı: global ve static• Bir fonksiyonun değişkenleri, sadece o fonksiyonun ömrü süresincevardır; hiç bir fonksiyon diğer bir fonksiyonun değişkenlerinin veyakendisine verilmemiş bir başka değişkenin değerini bilemez; kullan<strong>ama</strong>z.• Bir fonksiyonun dışında tanımladığımız değişkenlerimizi fonksiyonatanıtabilmek için global deyimini kullanırız; böylece değişken bütünprogram boyunca küresel nitelik kazanmış olur:function yazdir () {global $metin;print ("İşte metin: $metin ");}• Bir fonksiyonun içinde oluşturduğumuz bir değişkenin fonksiyon sonaerdiğinde sıfırlanm<strong>ama</strong>sı için bir çare olması gerekir. Bu çarenin adı,static deyimidir.function saydir () {static $sayi = 0;$sayi++;print ("Fonksiyonun tuttuğu sayı:$sayi ");}4546Strigler• Programl<strong>ama</strong> için i in kullanacağığınız z verilerin çoğu String tipindedir.• Stringler genel olarak tek tırnakltrnaklı ve çift tırnakltrnaklı olmak üzere ikideğişikik şekilde karşışımızaçıkar.• Çift tırnakltrnaklı dizi değişkenlerin içerisinde ibir değişken ilekarşışılaşılırsa bunun değeri eri yerine yerleştirilir.$who= 'Kilroy'Kilroy';$where= 'here'here';echo "$whowas $where";Kilroy was here• Bir diğer yol küme kparantezleri arasına na yazmaktır:$n = 12; echo "Youare the {$n}thperson";You are the 12th person• Tek tırnakltrnaklı stringlerde değişkenin değeri eri yerine yerleştirilmez.$name = 'Fred'Fred';$str= 'Hello'Hello, , $name'; // single-quotedecho $str;Hello, , $nameStringleri Yazmak• echo()bir ve daha fazla değeri eri bir defada yazdırır.r.echo "Printy";echo("("Printy"); // also validecho "First", "second"second", "third"third";Firstsecondthird• print()sadece bir argüman alır r ve onu yazdırır.r.if (! print("("Hello, world")) {die("("you'renot listening to me!");}Hello, world• printf()belirli bir biçime ime göre gyazdırma işlemi iyapar:printf('%.2f', 27.452); 27.45printf('('Thehex value of %d is %x', 214, 214);The hex value of 214 is d6printf('Bond. James Bond. %03d.', 7);Bond. James Bond. 007.printf('%02d/%02d/%04d', $month$month, , $day$day, , $year$year);02/15/2002printf('('You\'ve've spent $%5.2f so far', 4.1);You've spent $ 4.10 so far$date= sprintf("%02d/%02d/%04d", $month$month, , $day$day, , $year$year);// now we can interpolate $datewherever we need a date47488


Tek bir karaktere erişimim• strlen()fonksiyonu stringin uzunluğunu unu verir.$string= 'Hello'Hello, world';$length= strlen($($string);// $length$is 12• Dizi değişken yazımı kullanarak her bir karaktere erişebilirsiniz:ebilirsiniz:$string= 'Hello'Hello';for ($i=0; $i < strlen($($string); $i++) {printf("("The%dthcharacter is %s\n", $i, $string$string[$i]);}The 0th character is HThe 1th character is eThe 2th character is lThe 3th character is lThe 4th character is oStringleri temizlemek• Bir stringin başışındaki ve sonundaki beyaz boşluklarlukların n temizlenmesi :$trimmed= trim (string[, charlist ]);$trimmed= ltrim(string[, charlist ]);$trimmed= rtrim(string[, charlist ]);Örneğin;$title= " Programming <strong>PHP</strong> \n";$str_1 = ltrim($($title);// $str$str_1 is "Programming"<strong>PHP</strong> \n"$str_2 = rtrim($($title);// $str$str_2 is " Programming <strong>PHP</strong>“$str_3 = trim($($title);// $str$str_3 is "Programming"<strong>PHP</strong>"$str_4 = strip_tagstags(“<strong>PHP</strong><strong>PHP</strong>”);// $str$str_4 is "<strong>PHP</strong>"$str_5 = htmlspecialchars(“<strong>PHP</strong><strong>PHP</strong>”);// $str$str_5 is "<strong>PHP</strong>"4950Büyük k veya KüçüKüçük k harfe değiştirmek$string1 = "FRED flintstone";$string2 = "barney"rubble";// KüçüKüçük k harfe dönüştürür.d r.print(strtolowerstrtolower($string1));// Büyük B k harfe dönüştürür.d r.print(strtoupperstrtoupper($string1));// Katarın n sadece ilk harfini büyük b k harf yapar.print(ucfirstucfirst($string2));// Kelimelerin sadece ilk harflerini büyük b k harf yapar.print(ucwordsucwords($string2));fred flintstoneFRED FLINTSTONEBarney rubbleBarney Rubble51Dizi-Değişkenler, Nesneler• Verileri değişken adını verdiğimiz kaplarda tuttuğumuzu biliyoruz.• Fakat bu kapların sadece bir birim bilgi tutmaktadır.• Oysa programlarımızda genellikle, sözgelimi "öğrencilerin adları"dediğimiz z<strong>ama</strong>n yüzlerce ismi tutabilen kaplara ihtiyacımız olur.• Aksi taktirde, öğrenci sayısı kadar değişken oluşturmamız gerekirki, bu durumda değişken oluşturma zahmetinden vazgeçmek dahauygun olur; öğrencilerin isimleri, değişkene koymadan dakullanabiliriz.• İşte, bu tür, bir grup bilgiyi topluca tutan değişkenlere dizi-değişken(array) denir, program boyunca en çok işe yarayan değişken türüdür.• <strong>PHP</strong>'nin diğer bir çok dilden farkını sağlayan bir özelliği, büyükölçüde dizi değişkenlere dayanan, içinde kendi değişkenleri ve kendifonksiyonları olan nesne (object) oluşturma imkanına sahipbulunmasıdır.• Bu açıdan <strong>PHP</strong>, nesne-yönelimli (Object-oriented) diller grubunagirer.52Dizi Değişken OluşturalımDizi Değişken Oluşturalım• <strong>PHP</strong> içerisinde iiki tür t r dizi değişken vardır: r: indeksli ve ilişkili (associative(associative).• İndeks değerleri erleri tamsayıdır r ve 0 dan başlarlar.İndeksli dizi değişkenlerdeğerleri erleri yerine bakarak ayrıt t ederler.• İlişkili dizi değişkenler değerlerierleri string anahtarlara sahiptir. Anahtarlar tablosütunları gibi davranır.r.• İlk sütun sdeğerine erine erişmek için i in kullanılan lan anahtardır.r.• <strong>PHP</strong> dizi değişkenleriİlişkilişekilde depolar. İlişkili ve indeksli dizi değişkenlerarasında ki fark anahtarların n nasıl l olduğuna una bağlıdır.$yas['Ahmet'] kek tırnak tkullanmak zorundu değildir$yas[Ahmet], $sunular[2]• Anahtar değerlerierleri string veya tamsayı olabilir. $array[3] ve $array['3']aynı anl<strong>ama</strong> gelmesine karşışılık $array['03'] başka bir elemana karşışılık k gelir.• Negatif değerlerde erlerde geçerli erli anahtarlardır r fakat bu değerler erler dizi değişkeninsonundan başışına doğru bir yere karşışılık k gelmez.print "Hello, $person[name]"; // yanlış print "Hello,print "Hello, $person["name"]"; // yanlış print "Hello,print "Hello, $person[‘name’]"; // Bu doğrudur.53• Dizi değişkene bir değer er at<strong>ama</strong>sı yapılırken dizi değişken deoluşturulurturulur.echo $addresses[0];// prints nothingecho $addresses; // prints nothing$addresses[0] = 'spam'spam@cyberpromo.net';echo $addresses; // prints "Array“• Dizi değişkenlere ilk değer er at<strong>ama</strong>sı$addresses[0] = 'spam'spam@cyberpromo.net';$addresses[1] = 'abuse'abuse@example.com';• İlişkili dizi değişkenler$price['['Gasket'] = 15.29;$price['Wheel'] = 75.25;$price['Tire'] = 50.00;• Dizi değişkenleri oluşturmak için i in array()yapıcısından yararlanılabilir:labilir:$addresses= array('('spam@cyberpromo.net','abuse@example.com', 'root'root@example.com');549


Dizi Değişken OluşturalımDizi Değişken Oluşturalım• Diğer bir yol$price= array('('Gasket'=>15.29, 'Wheel'=>75.25, 'Tire'=>50.00);• Sadece dizi değişkenin oluşturulmasturulması içinin$addresses= array( ( );• Anahtarın n başlanglangıç değeri eri verildikten sonra değerler erler listesi verilerek dizideğişken oluşturulabilir:$days= array(1 => 'Monday'Monday', 'Tuesday'Tuesday', 'Wednesday'Wednesday','Thursday', 'Friday'Friday', 'Saturday'Saturday', 'Sunday'Sunday');// 2 is Tuesday, , 3 is Wednesday, etc.• Başlanglangıç indeks değeri eri sayısal sal olmayan string ise bundan sonraki indeksler 0dan başlayarak değerler erler alır.$gunler= array('('Friday'' => 'Black'Black', 'Brown', 'Green');// AşağıAğıdaki ile aynıdır.$gunler= array('('Friday'' => 'Black'Black', 0 => 'Brown', 1=> 'Green'Green');• Var olan dizi değişkene eleman eklemek$aile = array('Ahmet', 'Fatma');$aile[] = ‘Yusuf'; // $aile[2] is 'Yusuf'• İlk satır 0 indeksinden başlayarak dizi değişkeni oluşturur.İkinci satırda iseboşta olan bir sonraki indeks değeri eri 2 olduğundanundan $aile[2]= 'Yusuf'at<strong>ama</strong>sı yapar.$kisi= array('ad' => 'Ahmet');$kisi[] = 'Mehmet'; // $kisi$kisi[0]='Mehmet'• Dikkat! Burada <strong>PHP</strong> eklenen elemana sayısal sal indeks değeri eri verir.• Dizi değişkenin boyutunu count( ( ) ve sizeof( ( ) fonksiyonları yardımıylaylaöğrenebiliriz:$family= array('('Fred', 'Wilma'Wilma', 'Pebbles'Pebbles'); ');$size = count($($family); // $size is 3$confusion= array( ( 10=>'ten', 11=>'eleveneleven', 12=>'twelvetwelve'); ');$size = count($($confusion); // $size is 35556Dizi Değişken OluşturalımÇok Boyutlu dizi değişkenler• Bir aralıktaki tamsayı değerlerini erlerini kullanarak dizi değişkenoluşturmak için i in range(a,b)fonksiyonu kullanılır.$num= range(2, 5);$let= range('a', 'z');$rev_num= range(5, 2);• Başlanglangıç değer er at<strong>ama</strong>sı yapılmlmışbir dizi değişkeni kullanarakyeni bir dizi değişken oluşturmak için i in array_padpad( ( )fonksiyonundan yararlanılır. r. Bu fonksiyonun ilk elemanı dizideğişken, ikinci elemanı oluşturulacak olan dizi değişkeninminimum eleman sayısı, , eklenecek değerlerdir.erlerdir.$scores= array(5, 10);$padded= array_padpad($ ($scores,, 5, 0);// $padded$is now array(5, 10, 0, 0, 0)• Dizi değişkenlerin elemanları da dizi değişken olabilir.• Bu gerçek ek kullanılaraklarak çok boyutlu dizi değişkenler oluşturulur.$row_0 = array(1, 2, 3);$row_1 = array(4, 5, 6);$row_2 = array(7, 8, 9);$multi= array($($row_0, $row$row_1, $row$row_2);• Dizi değişkenin elemanına na erişmek için i invalue = $multi$multi[2][0];// satır r 2, sütün s n 0. $value$= 7• Dizi değişkenin değerini erini bir string içerisinde kullanmak için i in küme kparantezleri içerisinde iyazmak gerekir.echo("("Thevalue at row 2, column 0 is {$multimulti[2][0]} [2][0]}\n");• Elemanların n yeni dizi değişkenin başışına eklenmesini istiyorsanız:$padded= array_padpad($ ($scores, -5, 0);Php Örnekler/ornek6.rnekler/ornek6.phpPhp Örnekler/ornek6c.rnekler/ornek6c.phpPhp Örnekler\örnek6e.rnek6e.phpPhp Örnekler/ornek6a.rnekler/ornek6a.phpPhp Örnekler/ornek6d.rnekler/ornek6d.phpPhp Örnekler/ornek6f.rnekler/ornek6f.php5758Dizi Değişkenlerin DüzenlenmesiDizileri birleştirme: array_merge()• İki veya daha fazla dizinin bütün elemanlarını birleştirerek, ortaya yenibir dizi çıkartır. Örnek:$bir_dizi = array ( "Özbay"zbay", "Muharrem", "Hasan" );$iki_dizi = array ( "Altun"Altun", "Taç", ", "Civelek");$yeni_dizi = array_merge( $bir_dizi, $iki_dizi );• Bu kod ile oluşturulan $yeni_dizi isimli dizi değişkenin hangielemanlara sahip olduğunu, şöyle bir kodla görebilirsiniz:foreach ( $yeni_dizi as $yeni_eleman ) {print (" $yeni_eleman ");}596010


Dizi Değişkenlerin DüzenlenmesiDizi Değişkenlerin DüzenlenmesiDizinin ilk elemanını silme: array_shift()• Bir dizi-değişkenin ilk elemanını tümüyle silmek için array_shiftshift()fonksiyonunu kullanırız. Bu fonksiyona sadece birinci elemanı silinecekdizinin adını vermek yeter. Örnek:$birinci_dizi = array ( "Özbay"zbay" " , "Muharrem" , "Hasan" ,"Şahika" );$silinen = array_shift($birinci_dizi);• array_shiftshift(),adını verdiğiniz dizinin içeriğini değiştirir; buradakiörnekte, $silinen adlı değişken dizinin silinen birinci elemanın değerinitutar.Diziden kesit alma: array_slice()• Bir dizi-değişkenin bütün elemanları yerine bir kesitini kullanmakistiyorsak, bunu array_sliceslice()fonksiyonu ile yapabiliriz. Bufonksiyona kesit alınacak dizinin adı, kesitin başladığı yer ve kaç adetdeğişken alınacağı argüman olarak verilir. Örnek$birinci_dizi = array ( "Özbay"zbay", "Muharrem", "Hasan","Şahika", "Altun"Altun", "Taç" " , "Civelek" , "Tabak");$kesit = array_slice($birinci_dizi, 3, 4);• array_splicesplice( ( ) fonksiyonu yardımıyla yla eleman eklenip veya silinebilir.$removed= array_splicesplice(array, , start [, length [, replacement ] ]);• Aşağıdaki dizi değişkeni göz g önüne ne alalım:$subjects = array('physics', 'chem', 'math', 'bio', 'cs', 'dr<strong>ama</strong>','classics');• Örnek olarak 2,3,4 ve 5 pozisyonlarındaki ndaki ( index numarasında nda itibaren değil) elemanlarısilmek için: i in:$removed= array_splicesplice($ ($subjects,, 2, 4);// $removed$is array('('math', 'bio'bio', 'cs'cs')// $subjects$is array('('physics', 'chem'chem', 'classics'classics');• 2 pozisyonundan itibaren sonuna kadar elemanları silmek içiniin$removed= array_splicesplice($ ($subjects,, 2);• 4 pozisyonundan itibaren $new$deki 3 elemanı üzerine eklemek için i in$new = array('law', 'business', 'IS');array_splice($subjects, 4, 3, $new);// $subjects is array('physics', 'chem', 'math', 'bio', 'law','business', 'IS')6162Dizi Değişkenlerin DüzenlenmesiDizi Değişkenlerin Düzenlenmesi• Araya sıkışsıştırmak için i in sıfır s r eleman yerine yerleştirme yapılmallmalıdır:$subjects= array('('physics', 'chem'chem', 'math'math');$new= array('('law', 'business'business');array_splicesplice($ ($subjects,, 2, 0, $new$new); );// $subjects$is array('('physics','chem','law','business','math')• İlişkili dizi değişkenler içinde i inde bu örneklerçalışır$capitals= array('USA'=> 'Washington','GreatBritain' => 'London','New Zealand' => 'Wellington','Australia' => 'Canberra','Italy' => 'Rome');$down_under= array_splicesplice($ ($capitals,, 2, 2);// remove New Zealand and Australia$france= array('('France' => 'Paris');array_splicesplice($ ($capitals,, 1, 0, $france$france);// insert France between USA and G.B.• Dizi değişken içerisindeki ielemanları değişkenlere aktarmak için i in list()yapıcısından yararlanılır.r.$person= array('name'=>'('name'=>'Fred','age'=>35,'wife'=>'Betty');list($n, $a, $w) = $person$person;// $n is 'Fred'Fred', $a is 35, $w is 'Betty'Betty'• Ekstra değerler erler ihmal edilir. Olmayan değerler erler için i in NULL at<strong>ama</strong>sı yapılır.$values= array('('hello', 'world'world');list($a, $b, $c) = $values$values;// $a is 'hello'hello', $b is 'world'world', $c is NULL• İstenmeyen değerler erler için i in ardışıışık k virgül l kullanılır.$values= range('a','e');list($m,,$n,,$o) = $values$values;// $m is 'a', $n is 'c', $o is 'e'6364Dizi Değişkenlerin Düzenlenmesi• Dizi değişkenin anahtarlar array_keyskeys( ( ) ve depolanmışolan değerlerierleriarray_valuesvalues()fonksiyonları yardımıyla yla elde ederiz:$person= array('name' => 'Fred'Fred', 'age'age' ' => 35, 'wife'wife' ' =>'Wilma');$keys= array_keyskeys($ ($person);// $keys$is array('name', 'age'age', 'wife'wife')$values= array_valuesvalues($ ($person);// $values$values is array('('Fred', 35, 'Wilma'Wilma');• Bir değerinerin isset( ( ) veya anahtarın n var olup olmadığıığınıarray_keykey_exists( ( )$a = array(0,NULL,'');function tf($v) { return $v ? "T" : "F"; }for ($i=0; $i < 4; $i++) {printf("%d: %s %s\n", $i, tf(issetisset($a[$i])),tf(arrayarray_key_exists($i, $a)));}65Dizi Değişkenlerin DüzenlenmesiDizileri sıral<strong>ama</strong>: sort() ve rsort()• Bir dizinin içindeki değerleri alfabetik veya küçükten büyüğe doğru sıral<strong>ama</strong>kiçin sort(arrayarray, sorttype) fonksiyonunu kullanırız.sorttype değerleri SORT_REGULAR, SORT_NUMERIC, SORT_STRING,SORT_LOCALE_STRING şeklinde değerler erler alabildiği i gibi boş da olabilir.Örnek:$bdizi=array("Ahmet", "Mehmet", "Hasan","Şahika", "Altan", "Tarık", "Suha"Suha","Tahir");sort($dizi);• <strong>PHP</strong>, dizideki bütün değerleri A'dan Z'ye sıraya sokacaktır. sort()fonksiyonudizinin içeriğini değiştirir.• Bir diziyi Z'den A'ye veya büyükten küçüğe doğru sıral<strong>ama</strong>k için dersort(arrayarray, sorttype) fonksiyonunu kullanabilirsiniz (<strong>PHP</strong>4.0 Türkçekarakterleri tanımıyor.)• Bir noktada dikkatli olmak gerekir: bu fonksiyonu ilişkili (değerlerin anahtarıolarak endeks adı bulunan) dizide kullanırsanız, <strong>PHP</strong>, anahtar değerlerini(endeks adlarını) atar, yerine 0'dan itibaren rakam koyar. Bunu önlemek için,ilişkili dizileri asort()veya ksort()fonksiyonu ile sıral<strong>ama</strong>k gerekir.6611


Dizi Değişkenlerin Düzenlenmesiİlişkili dizileri sıral<strong>ama</strong>:asort(), arsort() ve ksort(), krsort()• İlişkili dizilerin diğer dizi değişkenlere göre farkı, değerlerinin bir de adıbulunmasıdır. Değerlerin adlarına anahtar denir. Bir ilişkili diziyi değerlerinegöre sıral<strong>ama</strong>k için asort(arrayarray, sorttype) fonksiyonu kullanılır.• Örnek:$bdizi=array( ogr01=>"Özbayzbay", ogr02=>"Muharrem",ogr013>"Hasan", ogr04=>"Şahika");asort ($bdizibdizi);• <strong>PHP</strong>, bu diziyi değerler itibariyle alfabetik sıraya sokacaktır. Eğer sıranındeğere göre değil de değerlerin anahtarına (burada ogr01, ogr02 olankelimeler) göre yapılmasını istiyorsak, ksort(arrayarray, sorttype)fonksiyonunu kullanırız. Örnek:$bdizi=array( ( ogr01=>"Özbayzbay", ogr02=>"Muharrem" ,ogr013>"Hasan“, , ogr04=>"Şahika");ksort ($bdizibdizi);• <strong>PHP</strong>, şimdi bu diziyi anahtarlara göre alfabetik sıraya sokacaktır.Dizi Değişkenlerin Düzenlenmesi• Dizi değişkenin içerisindeki ideğerlerin erlerin toplamı array_sumsum( ( )fonksiyonu ile yapılır.$scores= array(98, 76, 56, 80);$total = array_sumsum($ ($scores);// $total = 310• array_diffdiff( ( ) Birinci dizi değişkenin değerlerinin erlerinin diğerlerininiçerisinde olmayanlarının n değerlerini erlerini geri dönddndürür: r:$a1 = array('('bill', 'claire'claire', 'elle', 'simon'simon', 'judy'judy');$a2 = array('('jack', 'claire'claire', 'toni'toni');$a3 = array('elle', 'simon'simon', 'garfunkel'garfunkel');// find values of $a1 not in $a2 or $a3$diff= array_diffdiff($a1, $a2, $a3);// $diff$is array('('bill', 'judy'judy‘);6768Sınıflar ve Nesneler• Nesne yönelimli (Object-oriented) programl<strong>ama</strong> icat edildiğinde,geleneksel programl<strong>ama</strong>ya aşina olanlar önce tereddüt ettiler;sonra bunun ne harika bir teknik olduğunu gördüler venesnelerden vazgeçmez oldular.• Kabaca tanımlarsak, nesne, kendi değişkenleri ve icra edeceğikomutlardan oluşan fonksiyonları ile bir bütündür.• Sınıfı bir kere tanımladıktan sonra istediğimiz kadar örneğinioluşturabiliriz.• Bir nesnenin yapacağı işten, o nesnenin metodu diye söz ederiz.Bu açıdan bakarsanız, programlarımızda nesneler sadecemetotları için işe yararlar.• Diyelim ki programımızda bir "öğrenci" nesnesi oluşturmakistiyoruz. Bu nesnenin içinde adı, soyadı ve notlar gibideğişkenler, ve bu değişkenlerle yapılan bir takım işler bulunsun.• İşe nesnenin tabir yerinde ise şablonu olan class'ı oluşturmaklabaşlayalım; gerisini de yaptıkça görelim.• Php Örnekler/ornek7.rnekler/ornek7.php69Sınıf• Her sınıf tanımı class anahtar sözcüğü ile başlar sınıf ismininardından gelen bir çift kaşlı ayracın arasında sınıf özelliklerinin veyöntemlerinin tanımları bulunur.• Sınıf ismi olarak herhangi bir geçerli yafta kullanılabilir ancak bu<strong>PHP</strong> için ayrılmış sözcüklerden biri olm<strong>ama</strong>lıdır. Geçerli bir sınıf ismibir harf veya alt çizgi ile başlar, sayılar, harfler veya alt çizgileriçerebilir.• Bir sınıfın kendi sabitleri, değişkenleri (özellikler, veri üyeleri) veişlevleri (yöntemler, üye fonksiyonlar) olabilir.• 70Sınıf - Örnek• Bir nesne bağlamı içinden bir yöntem çağırmak için $thisdiye bir sözde değişken kullanılır.• $this çağrılan nesneye bağlıdır.– $a = new A();$a->foo();A::foo();$b = new B();$b->bar();B::bar();71new Anahtar Sözcüğü• Bir sınıfın örneğini oluşturmak için yeni bir nesneoluşturulup bir değişkene atanmalıdır. Nesnenin hatadurumunda daima yeni bir değişkene atanarakoluşturulması için kurucusunun bir istisna oluşturm<strong>ama</strong>sıgerekir. Sınıflar, örnekleme öncesi tanımlanmış olmalıdır(ve bu, bazı durumlarda bir gereksinimdir).• 7212


Nesne At<strong>ama</strong>• Oluşturulmuş bir sınıf örneğinin yeni bir değişkene atanması sırasında, yeni değişken,atanan nesneyle aynı örneğe erişecektir. Bu davranışın örneklerin bir işleveaktarılmasından bir farkı yoktur. Kopyal<strong>ama</strong>k suretiyle oluşturulmuş bir nesnenindaima bir kopyası yapılabilir.• • Yukarıdaki örneğin çıktısı:NULLNULLobject(BasitSınıf)#1 (1) {["var"]=>string(30) "$at<strong>ama</strong> bu değere sahip olacak“}Bir Sınıfın Miras Alınması• Bir sınıfın bildiriminde extends anahtar sözcüğü kullanılarak başka bir sınıfınyöntemleri ve özellikleri miras alınabilir. Çok sayıda sınıfı miras alarak genişlemekmümkün değildir, bir sınıf sadece bir ana sınıfı miras alabilir.• Miras alınan yöntemler ve özellikler, ebeveyn sınıfta tanımlı isimleriyle yenidenbildirilerek geçersiz kılınabilir; bu sadece ebeveyn sınıfın final tanımlı yöntemleri içinyapıl<strong>ama</strong>z.• Geçersiz kılınmış yöntemlere ve duruk özelliklere parent:: öneki ile atıfta bulunarakerişilebilir.• • Yukarıdaki örneğin çıktısı:Sınıf genişletiliyorbir öntanımlı değer7374Yapıcılar• <strong>PHP</strong> 5 geliştiricilerin sınıflar için yapıcı yöntemler bildirmesine imkan verir.Bir yapıcı yöntemi olan sınıflar her yeni nesne oluşturuluşunda bu yöntemiçağırırlar, bu bakımdan nesne kullanılmadan önce yapılması gerekenilklendirmeler için kurucular çok uygundur.• Yokediciler• <strong>PHP</strong> 5, C++ gibi nesne yönelimli dillerdekine benzer bir yokedicitasarımına sahiptir. Yokedici yöntem, belli bir nesneye yönelik tümgönderimler kaldırıldığı ya da nesne kapanma sırasında açıkça yokedildiği anda çalıştırılacaktır.• 7576<strong>PHP</strong> işibaşışındaFormlar• <strong>PHP</strong>'de bir programı oluşturmaya ve programın akışını kontroletmeye yetecek kadar bilgi sahibi olduk.• Bu bölümde, bu bilgilerimizi uygul<strong>ama</strong>ya koyacağız; ve bu aradahalâ öğrenmemiz gereken bir iki noktaya ayrıntılı olarakdeğineceğiz.• Özellikle metinlerin düzenlenmesi konusuna bakmamız ve veDüzenli İfadeler (Regular Expressions) denen kavramla tanışmakve bunun araçlarını öğrenmek zorundayız.• <strong>PHP</strong>'nin işbaşında olması demek, <strong>PHP</strong> bilgimizi HTMLsayfalarımızı <strong>PHP</strong> ile oluşturma, Form bilgilerini derleme, birveritabanından veri alarak bunları sayfalarımızda kullanma veziyaretçinin vereceği bilgileri veritabanına işleyebilmekdemektir.• Şimdi kolları yeniden sıvayalım ve <strong>PHP</strong>'yi uygul<strong>ama</strong>ya koyulalım.• Web sunucusu ve istemcisi (Browser) arasındaki etkileşme ve alışverişinnasıl işlediğine ilişkin bilgilerimiz olduğunu varsayarak, sadeceInternet'te Form, bir Web sayfasının ziyaretçiden veri alabildiği vebunları Web sunucusuna ulaştırabildiği başlıca araç olduğunuhatırlayalım.• Form, ziyaretçinin bizim istediğimiz bilgilerin yanı sıra ziyaretçininbilgisayarından Web sunucusu bilgisayara, daha bir çok bilgiyi deberaberinde getirir.• Web programcısı ve Web tasarımcısı olarak bu bilgileri bilmeye daimaihtiyacımız var.• Browser türünü ve sürümü belirleyerek, onu uygun sayfayayönlendirmekten tutun, ziyaretçiden istediğimiz bilgilerin Sunucuyaulaştığında nerede ve hangi değişkende tutulduğuna kadar, gerekli birçok bilgi Sunucu çevre değişkenleri ve Sunucu değişkenleri dediğimizdizilerde bulunur.• Form tasarımına ve bir Form'un bilgilerini <strong>PHP</strong> ile yakal<strong>ama</strong>ya veişlemeye geçmeden önce Web Server'ı ve bize verdiği bilgileri dahayakından tanımamız yararlı olur.• Php Örnekler/ornek8.php777813


POST veya GET Metotlarıyla Gelen Bilgiler• HTTP açısından aGET ile POST'untek farkı gelen değerlerin erlerin nerede nasıltutulduğundan undan ibaret değildir.• Bir başka fark, Browser'ın GET yoluyla gönderdignderdiği i verilerin (ve bu aradaziyaretçinin inin parola olarak yazdıklarklarında ekrana yıldyldız z olarak çıkan metinlerdahil) tümü, t , sunucuya, URL-kodlanmışmetin olarak, Browser'ın URL adreshanesine de yazılmaslmasıdır.• Bir çok kullanıcı için in bu bir güvensizlik gbelirtisi sayılır.• Bu iki unsur Formlarımızda metot olarak GET yerine POST kullanmanın n dahayerinde olduğunu unu gösterir. g•GET ve POST yöntemlerinde yBrowser'ın n sunucuya gönderebilecegnderebileceği i verininuzunluğu, u, Sunucunun ayarlarına bağlı olmak üzere, sınırlsrlıdır. r.• Tedbirli Web programcılığıığı, özellikle birden fazla tasarımcmcı ve programcınınbirlikte çalıştığıığı ve Formlarda hangi yöntemin ytercih edildiğini ini bilmeninkolay olmadığıprojelerde, Form bilgisi işleyen i<strong>PHP</strong> programlarımızdaForm'da hangi metot kullanılmlmışolursa olsun, işleyici iprogramın n iki durumada elverişli li olmasını sağl<strong>ama</strong>ktl<strong>ama</strong>ktır.• Php Örnekler\ornek11.htmlPhp Örnekler\formlar05_isle.phpSüper Globaller (küreseller)• <strong>PHP</strong>'de öntanımlı değişkenlerin çoğu "süper küresel"dir.• Bu, kod boyunca bütün etki alanlarında kullanılabilir olduklarıanlamına gelir.• İşlevler veya yöntemler içinde bu değişkenlere erişmek için global$değişken; yapmak gerekmez.• Süper küresel değişkenler şunlardır:– $GLOBALS– $_SERVER– $_GET– $_POST– $_FILES– $_COOKIE– $_SESSION– $_REQUEST– $_ENV7980$GLOBALS• $GLOBALS — Küresel alanda bulunan bütün değişkenleri içerir.• Geçerli betiğin küresel alanında tanımlı bütün değişkenleri içerenbütünleşik bir dizidir. Değişken isimleri dizinin anahtarlarıdır.• • $foo küresel alanda: Örnek içerik $foo yerel alanda: yerel değişken81$_SERVER• $_SERVER: Sunucu programın çalışmakta olan <strong>PHP</strong> dosyasına sunduğu bazı bilgilerinbulunduğu dizi değişken.$HTTP_SERVER_VARS [kullanımdan kalktı]• Bu değişkenin içinde şu unsurlar bulunur:– <strong>PHP</strong>_SELF: Çalışan <strong>PHP</strong> programının bulunduğu dizin ve adı– PATH_TRANSLATED: Çalışan <strong>PHP</strong> programının fiziksel yolu– SERVER_ADDR: Geçerli kodun altında çalıştığı sunucunun IP adresidir.– SERVER_NAME: Geçerli betiğin altında çalıştığı sunucunun adıdır. Eğer betik birsanal konak üzerinde çalışıyorsa, o sanal konağın adını içerir.– REQUEST_METHOD: Sayfaya erişim için kullanılan istek yöntemi; GET, HEAD, POST,PUT gibi.– QUERY_STRING: Sorgu dizgesi, sayfaya erişirken kullanılabilir.– HTTP_HOST: Geçerli isteğin Host: başlığının içeriğidir.– REMOTE_ADDR: Geçerli sayfayı görüntüleyen kullanıcının sunucu adıdır. KullanıcınınREMOTE_ADDR değerinden ters DNS sorgusuyla elde edilir.– REMOTE_PORT: Kullanıcının makinesinin HTTP sunucusu ile haberleşmek içinkullandığı porttur.– SCRIPT_NAME: Geçerli betiğin yolunu içerir. Kendi kendilerini göstermesi gerekensayfalar için kullanışlıdırlar. __FILE__ sabiti geçerli (örn. içerilen) dosyanın tamyolunu ve dosya adını içerir.– REQUEST_URI: Sayfaya erişim için belirtilen URI; örneğin, '/index.html'.– SERVER_PROTOCOL: Sayfa isteğinin yapıldığı protokolün ismi ve sürümüdür;'HTTP/1.1' gibi;•82$GLOBALS dizisinin üyelerini• $_ENV: HTTP Sunucu programın çalışmakta olan <strong>PHP</strong> dosyası içinoluşturduğu çevre değişkenlerinin yazılı olduğu dizi değişken.$HTTP_ENV_VARS [kullanımdan kalktı]• Bu değişkenin içinde şu unsurlar bulunur:• HOSTNAME: Sunucunun IP adresi• SHELL: Unix sisteminde kullanılan Shell programı• HOSTTYPE: Sunucunun adı ve sürünü• OSTYPE: Sunucu'nun işletim sistemi• HOME: Çalışan programın kök dizini• PATH: Çalışan programın Sunucu'daki yolu$_GET• URL değiştirgeleri üzerinden geçerli koda aktarılan değişkenlerdenoluşan bir ilişkisel dizi.• Bir Form'dan GET metoduyla alınan bilgilerin anahtar=değer çiftleriolarak kaydedildiği dizi değişkendir.$HTTP_GET_VARS [kullanımdan kalktı]• $HTTP_GET_VARS aynı başlangıç bilgisini içerir, fakat bir süperküresel değildir. ($HTTP_GET_VARS ve $_GET farklıdeğişkenlerdir ve <strong>PHP</strong> de bu şekilde ele alır.)• • Benim adım yasar!83• • Merhaba ibrahim!8414


$_POST• HTTP POST yöntemi kullanılarak geçerli koda aktarılan bütünleşikdeğişkenler dizisi.• Bir Form'dan POST metoduyla alınan bilgilerin anahtar=değerçiftleri olarak kaydedildiği dizi değişkendir.$HTTP_POST_VARS [kullanımdan kalktı]• $HTTP_POST_VARS aynı başlangıç bilgisini içerir, fakat bir süperküresel değildir.• $HTTP_POST_VARS ve $_POST farklı değişkenlerdir ve <strong>PHP</strong> de buşekilde ele alır.Form'dan GET Metoduyla Gelen Bilgiler• Şimdi basit bir form oluşturalım : Php Örnekler/ornek8.html• Şimdi de bu formdaki bilgileri bize gösterecek bir <strong>PHP</strong> programıyazalım. Php Örnekler\formlar02_isle.php• Php Örnekler\ornek9.html Php Örnekler\formlar03_isle.php• Php Örnekler\ornek10.html Php Örnekler\formlar04_isle.php• • Merhaba ibrahim!8586URL KodlarıForm ile İşlemciyi Birleştirelim• HTTP protokolüne göre, temel ASCII listesi içinde yer almayan karakterler, ve tabiîbu arada sadece Türkçe'de veya bazı diğer alfabelerde bulunan harfler, birForm'da yer aldığı taktirde, Browser tarafından URL şemasına göre kodlanarakgönderilir.• Gerçi bir çok HTTP sunucu programı bu karakterleri tanıyabilir ve bir dosyayayazarken doğru şekilde yazabilirler; <strong>ama</strong> bu çevirme işleminin bazen programyardımıyla yapılması gerekebilir.• Bizim için önemli karakterler ve URL kodları şöyle:ü %FC İ %DD ç %E7 ] %5DÜ %DC Ğ %F0 Ç %C7 { %7Bö %F6 Ğ %D0 % %25 } %7DÖ %D6 ş %FE & %26 ? %3Fı %FD Ş %DE [ %5B = %3D• Şu ana kadar yaptığımız bütün Form örneklerinde, Form'un bulunduğu HTMLsayfası ile bu Form'un göndereceği verileri işleyen <strong>PHP</strong> programı iki ayrıbelge halinde bulunmaktadır.• Bu, buradaki örneklerde olduğu gibi, ziyaretçinin verdiği bilgileri sadeceBrowser penceresine yazdıran bir eğitim çalışması için uygun olabilir.• Fakat gerçek Web sitelerimizde ziyaretçilerimizin vereceği bilgileri çoğuz<strong>ama</strong>n sadece onların Browser pencerelerinde göstermekle kalmayız, aynız<strong>ama</strong>nda bu bilgileri ya elektronik posta yoluyla kendimize yollarız veyasunucuda bir düzyazı veya veritabanı dosyasına işleriz.• Bu ve diğer <strong>ama</strong>çlarla yapacağımız Form içeren HTML sayfaları, aslında <strong>PHP</strong>programımızın bir içinde yer alabilir;• Başka bir deyişle, Form'umuz ziyaretçinin vereceği bilgileri kendi bulunduğu<strong>PHP</strong> programına gönderebilir!• Php Örnekler\formlar04a.php• Buradaki $<strong>PHP</strong>_SELF çalışmakta olan <strong>PHP</strong> dosyasının n ismini içerir. i8788Dikkat• php.ini dosyası sunucuda yüklyklü olan php desteğinin ayardosyasıdır.• Bu dosya içerisindeki ibilgiler düzenlenerek dbazı değişkenlereerişim im kontrollü olarak yapılabilir.• register_globals değişkeni On yapılırsa değişkenlere uzunbir şekilde $_GET ($HTTP_POST_VARS) ve $_GET($HTTP_GET_VARS) kullanılarak erişmek zorunda kalmayız.Sadece formlardan gelen isimler yardımıyla erişim yapılır.Dosya İşlemleri• Web programcısı olarak ziyaretçinin bize göndereceği bilgileriyakal<strong>ama</strong>yı öğrendik.• Şimdilik sadece ziyaretçinin Browser'ına geri gönderdiğimiz bubilgileri, sunucu tarafından çeşitli işlemlerde kullanabiliriz.• Bu işlemlerin başında dosya girdi/çıktı işlemleri gelir.• Başka bir ifade ile ziyaretçiden aldığımız bu bilgileri sunucuda birdosyaya yazdırabiliriz.• Bu bölümde <strong>PHP</strong> ile sunucuda yapabileceğimiz dosya işlemlerinebakacağız.• Tabiî dosya işlemleri dendiğinde sadece ziyaretçiden aldığımızbilgileri bir dosyaya yazdırmakla yetinmeyeceğiz;• <strong>PHP</strong> programlarımıza sunucuda bir dosyada bulunan bilgileriokumasını da öğreteceğiz.• Dikkat: Uzun şekildeki kullanım daha hızlı çalışır.899015


Harici Dosya (include)Harici Dosya (include)• <strong>PHP</strong> programlarımızda bilmemiz gereken ilk dosya işlemi, bir <strong>PHP</strong>programına, kendi dışındaki dosyayı, tabir yerinde ise, okutmakve içindekileri aynen alıp, görüntülemesini sağl<strong>ama</strong>ktır.• Bunu include()komutu ile yaparız.• Bu komut, kendisine adı verilen düzyazı dosyasının içeriğini aynenbu komutun bulunduğu noktaya yazar.• Bu yolla bir <strong>PHP</strong> programına sık kullandığınız bir metni veyaprogram parçasını dahil edebilirsiniz.• Bir güvenlik önlemi olarak bu tür dosyaların uzantılarını, sunucuve Browser'ların tanıdığı MIME türlerine ait uzantılardan farklıyaparsanız, ziyaretçiler şans eseri de olsa bu dosyaları doğrucaedinme imkanı bul<strong>ama</strong>zlar.• Php Örnekler\dosya_ekle01.dosya_ekle01.php• Php Örnekler\dosya_ekle03.dosya_ekle03.php• <strong>PHP</strong> programına sadece düz metin eklemeyiz; program veyafonksiyon da ekleyebiliriz.• Php Örnekler\dosya_ekle02.dosya_ekle02.php• Haricî dosyamızda yer alan ...iki iki daha ". (2 + 2). " eder!");şeklindeki ifadenin progr<strong>ama</strong> gelirken "..iki iki daha 4 eder!"şekline gelmesinin izahı, <strong>PHP</strong>'nin dışarıdan aldığı dosyanın içinde<strong>PHP</strong> programı olduğunu gördüğü anda, bu dosyanın içeriğini metinolarak değil, program olarak ele almasıdır.• Bu yolla, <strong>PHP</strong> programlarımıza bir değerin dönmesini desağlayabiliriz.9192Harici Dosya (include)include mu, require mı?Bu satır r bakalım m progr<strong>ama</strong> dahil olacak mı? mPhp Örnekler\dosya_ekle03.dosya_ekle03.php• Haricî dosyamızın içindeki program, return komutu ile sadecekendi içinde elde ettiği sonucu, onu çağıran progr<strong>ama</strong> verdi; ve busonucu alan programımız, sadece kendi içindeki bir değişkenindeğerini Browser'a gönderdiği halde, bu değer haricî dosyadanalınmış oldu.• Haricî dosyaların include yoluyla <strong>PHP</strong> programlarımızakatılması, özellikle bir sitenin bir çok programında sık sıkkullanılan metinlerin ve hesapl<strong>ama</strong>ların bir kere yazılmasını ve teksatırla çağrılmasını sağladığı için kolaylık sağlar ve hata ihtimaliniazaltır.93• include()ifadesiyle monte edeceğimiz dosya bulunmaz ise scriptçalışmaya devam edecektir,• Ancak require()ifadesi kullanıldığında monte edilecek dosyanınmutlak surette bulunması gerekir.• Bu dosya bulunmaz ise script o satırda çalışmasını sonlandırır.• Kısaca ekleyeceğimiz dosyanın n mutlaka mevcut olmasını istiyorsakrequire(),scriptimizin bu dosya bulunmasa da çalışmaya devametmesini istiyorsak include()ifadesini kullanmak gerekir.• <strong>PHP</strong> scriptimizin içerisine bir dosya yerleştirditirdiğimiz imiz z<strong>ama</strong>n, dosyayıyerleştirditirdiğimiz imiz noktada <strong>PHP</strong>’dençıkılıp HTML’yedönüldüğü, , dosyabitiminde ise <strong>PHP</strong> scriptine geri dönülddldüğü farz edilir.• Bu nedenle eğer e er scriptimize dahil edeceğimiz dosyaların n bir <strong>PHP</strong> scriptiolarak algılanmaslanmasını istersek bu durumda hazırladrladığımız z ek dosyada <strong>PHP</strong>scriptini başlanglangıç ve bitiş ayıraraçları ile yeniden başlatmak ve bitirmemizgerekir. Aksi takdirde dosyamızın n HTML olarak devam ettiğivarsayılacaktlacaktır.94Dosyalar hakkında bilgiDosyalar hakkında bilgi• Dosya okutma ve yazdırma işlemleri dolayısıyla bir dosyanın varlığı veya yokluğu, ya da birdosyaya ait sandığımız ismin bir klasöre ait olması, programımızın sağlıklı işleyebilmesiaçısından büyük önem taşır.• <strong>PHP</strong> bu <strong>ama</strong>çla bize bir kaç kullanıma hazır fonksiyon sağlıyor.Dosya var mı? file_exits()• Bir dosyanın var olup olmadığını denetleyen bu fonksiyon, dosya varsa true/doğru, yoksafalse/yanlış sonucunu verir. Örnek:if ( file_exits ( "bir_dosya.txt" ) )print ("Dosya var!");• Dosya yoksa, program "Dosya var!" yazmadan yoluna devam edecektir.Dosya mı, dizin mi? is_file() ve is_dir()• Kimi z<strong>ama</strong>n klasörler de tıpkı dosyalar gibi adlandırılabilir. Bir dizindegördüğümüz ismin gerçekten bir dosyaya ait olup olmadığını bu fonksiyonlasınarız. Sın<strong>ama</strong> doğru, yani isim bir dosyaya ait ise fonksiyon true/doğru, değilsefalse/yanlış sonuç verir. Örnek:if ( is_file("bir_dosya.txt") )print ("Bu bir dosyadır!");if ( is_dir("/bir_isim") )print ("Bu bir dizindir!");Dosya okunabilir mi? is_readable()• Programda kullanmaya karar vermeden önce bir dosyanın erişilebilir ve<strong>PHP</strong> tarafından okunabilir olup olmadığını sınayan bu fonksiyon, dosyaokunabilir ise true/doğru, değilse false/yanlış sonuç verir. Örnek:if ( is_readable ( "bir_dosya.txt" ) )print ("Bu dosya okunabilir!");• Dosya okunabilir değilse program "Bu dosya okunabilir!" yazmadan yolunadevam edecektir. (Unix ortamında varlığını görebildiğimiz her dosyanınokuma izni bulunmayabilir.)Dosya yazılabilir mi? is_writable()• Programda kullanmaya karar vermeden önce bir dosyanın yazılabilir olupolmadığını sınayan bu fonksiyon, dosya yazılabilir ise true/doğru, değilsefalse/yanlış sonuç verir. Örnek:if ( is_writable ( "bir_dosya.txt" ) )print ("Bu dosyaya yazılabilir!");959616


Dosyalar hakkında bilgiDosyalar hakkında bilgiDosya çalıştırılabilir mi? is_executable()• <strong>PHP</strong> programında kimi z<strong>ama</strong>n sunucunun kullanmamıza izin verdiği haricîprogramları çalıştırırız; <strong>PHP</strong> programımızın düzgün işlemesi bu harici progr<strong>ama</strong>bağlı olabilir. Böyle bir programı çalıştırmaya karar vermeden önce bir dosyanınçalıştırılabilir olup olmadığını sınayan bu fonksiyon, dosya çalıştırılabilir isetrue/doğru, değilse false/yanlış sonuç verir. Örnek:if ( is_executable ( "bir_dosya" ) )print ("Bu dosya çalıştırılabilir!");• Dosya çalıştırılabilir bir program değilse <strong>PHP</strong> programı "Bu dosya çalıştırılabilir!"yazmadan yoluna devam edecektir. (Unix ortamında varlığını görebildiğimiz herprogram dosyasının çalıştırma izni bulunmayabilir.)Dosya boyutu: filesize()• Adını verdiğimiz dosyanın boyutunu byte olarak bildirir: Örnek:print ("Dosyanın boyutu:");print filesize( "bir_dosya.txt" );97Dosyaya son erişim tarihi: fileadate(), filemtime() ve filectime()• Adını verdiğimiz dosyaya son erişim tarihini bildirir. ne var ki bu bilgi Unix'in "epoch“biçimindedir: Örnek:print ("Dosyanın son erişim tarihi:");$dosya_tarihi = fileadate( "bir_dosya.txt" );print ( " $dosya_tarihi " );• Eğer bu dosyanın son erişim tarihi 28 Temmuz 2000, Cuma 24:00:00 ise, <strong>PHP</strong>, Browserpenceresine 964731600 yazacaktır. Bu komutun ürettiği bilgiyi, date() fonksiyonu ileanlaşılabilir hale getirebiliriz:print ("Dosyanın son erişim tarihi:");$dosya_tarihi = fileadate( "bir_dosya.txt" );print date("D d M Y G:i:s H", $dosya_tarihi );• Bu kez <strong>PHP</strong> Browser penceresine 28 Jul 2000 242:00:00 00 yazdıracaktır. Tarihverilerinin date() fonksiyonu ile biçimlendirilmesini daha sonra ayrıntılı ele alacağız.• filemtime(), bir dosyanın son değiştirildiği tarihi;• filectime(), ise oluşturulduğu tarihi, yine Unix Epoch biçiminde bildirir;• Bu verilerin anlaşılır biçimde görüntülenmesi için <strong>PHP</strong>'nin date() fonksiyonu kullanılır.98Dosyalar oluşturma ve silmeDosya AçmaA• <strong>PHP</strong> ile yapabileceğimiz önemli dosya işlemlerinin başında olmayan bir dosyayı oluşturmak veolan bir dosyayı silmek gelir. <strong>PHP</strong>'nin dosya oluşturma komutu touch() fonksiyonudur.unlink() fonksiyonu da dosyayı siler.• Bu fonksiyona oluşturulmasını istediğimiz dosyanın adını vermemiz gerekir. Örnek:• Bu programı kişisel Web sunucuda denerken yeni dosyanın oluşturulacağı dizin olarak "/“işaretiyle sadece kök dizini belirtirseniz, dosya C: diskinde kök dizinde oluşturulur.• Bu programı gerçek sunucuda çalıştırabilmek için yazma/okuma izni bulunan ve Websunucunun erişebileceği bir dizinin adını vermeniz gerekir.• <strong>PHP</strong>'de bir dosyanın içeriğini alarak sayfalarımızda kullanma veya bir dosyanıniçeriğini değiştirmek gibi işlemler için önce dosyanın açılmış olması gerekir.• Bunu gerçekleştiren fopen() fonksiyonudur.• Bu fonksiyonla bir dosyayı okumak ('r'), yazdırmak ('w') veya ek yapmak('a') için açabiliriz.• Bu fonksiyon dosyanın başarıyla açılması halinde bir tamsayı verecektir. <strong>PHP</strong>programlarımızda, açılan dosyanın mutlaka ona işaret eden bir değişkene (filepointer) bağlı olması gerekir; daha sonra bu dosya ile ilgili bütün işlemleri bu işaretdeğişkeni ile yaparız. Örnek:$dosya = fopen( "bir_dosya.txt" , 'r' );• <strong>PHP</strong>, bu dosyayı sadece okumak <strong>ama</strong>cıyla açacak ve fonksiyondan dönen değeri$dosya değişkenine atayacaktır. Olmayan bir dosyayı açmak istediğimiz z<strong>ama</strong>n <strong>PHP</strong>hata mesajı verir.• Bir dosyayı yazmak <strong>ama</strong>cıyla açacağımız z<strong>ama</strong>n, bu kodu şöyle yazarız:$dosya = fopen( "bir_dosya.txt" , 'w' );• Olmayan bir dosyayı yazmak <strong>ama</strong>cıyla açmak istediğimizde <strong>PHP</strong> önce bu dosyayıoluşturur. Bir dosyaya ek yapmak istediğimiz z<strong>ama</strong>n ise kodumuz şu şekilde yazılır:$dosya = fopen( "bir_dosya.txt" , 'a' );• Olmayan bir dosyayı ek yapmak <strong>ama</strong>cıyla açmak istediğimizde <strong>PHP</strong> hata mesajı verir.99100Dosya AçmaA• Bir <strong>PHP</strong> fonksiyonunun kendisinden beklenen işi yap<strong>ama</strong>ması halinde oracıktadurdurulmasını die() komutu sağlar.• "Öl!" anlamına gelen bu fonksiyona ekranda görüntülenmesini istediğimiz birmetni parametre olarak verebiliriz.• Bu bölümdeki örnekler bu komutla birlikte şöyle yazılabilir:$dosya = fopen( "bir_dosya.txt" , 'a' )or die ("Dosya açılamıyor!") ;• Bu komutu kişisel Web sunucusunda denerken, dosyanın açılacağı dizinin yolunubelirtmemiz gerekir. Örneğin:Dosya AçmaAma-Kap<strong>ama</strong>• <strong>PHP</strong>, bu dosyayı açtığında Browser penceresinde dosyanın açıldığını belirtenmesajı görüntülenecektir.• Bu işlemi Internet'teki bir Web sunucuda uygulayabilmek için yazma/okuma iznibulunan ve Web sunucunun erişebileceği bir dizinin adını vermeniz gerekir.Örneğin:• Açtığımız bir dosya ile yaptığımız bütün işlemler bittikten sonra, dosyanınkapatılması gerekir.• Dosya kapatma işlemini fclose() fonksiyonu yapar. Bu fonksiyona parametreolarak dosya adını değil, dosyanın işaretçisi olan değişkenin adını veririz. Örnek:fclose ( $dosya );10110217


Dosya okuma• Dosya okuma: fgets(), fread() ve fgetc()•Açtığımız bir dosyanın içindeki yazıları çoğu z<strong>ama</strong>n programımıza satır satırokuturuz. <strong>PHP</strong>'de bir dosyanın içeriğini satır satır okutmamızı fgets()fonksiyonu sağlar.• Bu fonksiyona daha önce açılmış olan dosyanın işaret değişkenin adını veokunmasını istediğimiz asgari byte ölçüsünü parametre olarak veririz.• fgets() fonksiyonu verdiğimiz uzunluk ölçüsüne ulaşmadan önce dosyada biryeni satır işareti görürse, veya dosyanın sonuna ulaşırsa, okumaya son verir.• Bu fonksiyonu çoğu z<strong>ama</strong>n bir döngünün içinde kullanırız. Ancak döngünün hatavermemesi için, <strong>PHP</strong>'nin dosyanın sonuna ulaştığında döngüyü durdurmamızgerekir.• feof() fonksiyonu bir dosyanın dosya-sonu (end-of-file) durumuna ulaşıpulaşmadığını sınar. <strong>PHP</strong>, her dosyanın sonunda yer alan eof (Ctrl-z, ^z)işaretine eriştiği anda feof() fonksiyonu doğru/true değerini verir.• fgets() fonksiyonunun okuyacağı satırı bir fonksiyona değer olarak verebilirve daha sonra bu değeri programlarımızda kullanabiliriz.Dosya okuma103104Dosya okuma• Kimi z<strong>ama</strong>n dosyalarımızın içeriğini satır-satır okutmak yerine, kenditayin edeceğimiz uzunlukta parçalar halinde okutmak isteriz. Bunu,fread() fonksiyonu ile sağlarız. Örnek:Dosya okumaarray file ( string filename )• file() fonksiyonu yardımıyla yla dosyanın n t<strong>ama</strong>mısatır r satır r bir dizi değişkenin içerisine iaktarılır.r.$lines= file('http://www.exampleexample.com/');foreach ($linesas $var){echo $var;}105106Dosya okuma fseek() ile ölçü belirleme• <strong>PHP</strong>'nin dosya işleminde kullanabileceğiniz bir diğer fonksiyonu fseek() adını taşır.• Daha önce açılmış olan dosyanın işaret değişkenin adını ve ve programın bu metiniçinde zıpl<strong>ama</strong>sını istediğiniz noktanın dosyanın başından itibaren byte değeriniparametre olarak alan bu fonksiyon ile, bir dosyanın içinde istediğimiz yere gitmeimkanı vardır. Örnek:107Dosya okuma• Dosyalarımızın içeriğini satırlar veya belirli ölçüde parçalar halinde değil de, tektekkarakter olarak okutmak için fgetc() fonksiyonundan yararlanırız.• Bu fonksiyon, daima 1 byte ölçüsünde (bir karakter) metin okuyabileceği için,parametre olarak sadece daha önce açılmış olan dosyanın işaret değişkenin adınıalır. Örnek:10818


Dosyaya yazma ve ek yapmaDosyaya yazma ve ek yapma: fwrite() ve fputs()• Bir dosyaya yazma veya ek yapma, <strong>PHP</strong> açısından aynı işlemdir; sadece dosyalarınaçılışında fark vardır. Hatırlayacaksınız, bir dosyayı yazmak <strong>ama</strong>cıyla açmak için:$dosya=fopen("bir_dosya.txt", 'w')or die ("Dosya açılamıyor!");ek <strong>ama</strong>cıyla açmak için ise$dosya = fopen( "bir_dosya.txt" , 'a' )or die ("Dosya açılamıyor!") ;kodunu yazmamız gerekir.• Daha sonra yapılacak yazma ve ekleme işlemlerinin farkı, 'w' parametresi ile açılandosyaya yazma işlemi en başından başlar ve devam eder; 'a' parametresi ile açılandosyaya yazma işlemi ise en sondan başlar ve devam eder.• <strong>PHP</strong>'nin bir dosyaya metin yazdırma fonksiyonları olan fwrite() ve fputs() aynıbiçimde yazılır ve aynı işlevi yerine getirirler; aralarında kesinlikle fark yoktur. Örnek:109Kullanımdaki dosyayı kilitleyin!• Web sunucusundaki dosyalarımızla sadece bir kişi işlem yapıyorolsa idi, bir sorun olmazdı; ne var ki, bir Web sitesine aynı andabirden fazla kişi erişebilir ve dosyalarla işlem yapan programlarıçalıştırıyor olabilir.• Bu, <strong>PHP</strong>'nin dosya işlemlerine engel olabilir. Bu sebeple, işlem içinaçacağımız bir dosyayı, önce kilitlemek yerinde bir önlem sayılır.• Bunu, flock() fonksiyonu ile yaparız; bu fonksiyona kilitlemekistediğimiz dosyanın işaret değişkeninin adını ve kilit türünübelirten endeks sayısını parametre olarak yazarız. Örnek:• Bu fonksiyon ile kullanabileceğimiz endeks parametrelerişunlardır:• 1 Paylaşım Diğer processlerin dosyayı paylaşmalarına imkan verir• 2 Tam Diğer proseslerin dosya ile işlem yapmasına engel olur• 3 Serbest Dosyanın 1 veya 2 olan kilidini kaldırır• Bir dosya, herhangi bir <strong>PHP</strong> programı tarafından kilitlendiği anda,aynı dosyayı daha sonra kilitlemeye kalkan diğer programlarkendilerinden önce konulmuş kilide saygı gösterirler.110Kullanımdaki dosyayı kilitleyin!chmodDosya İzinleri755 dosya_ismi• Buradaki 754 deki 7 kullanıcı izinleri, 5 grupizinler, 4 de diğerlerine verilecek izinler içinkullanılmıştır.• 0: izin yok• 4: okuma izni• 5: okuma çalıştırma izni• 6: okuma, yazma izni• 7: okuma, yazma ve çalıştırma izni•111112Dizinlerle İşlemler• <strong>PHP</strong> ile sunucuda, Web dizini olarak kullandığımız alanda yeni dizinler oluşturabiliriz, silebiliriz vebunlar hakkında bilgi edinebiliriz.• Bu işlemleri Web sunucuda yapabilmek için Web dizininde okuma ve yazma izni bulunması gerekir.Dizin içeriğini listeleme: opendir() ve readdir()• Belirttiğiniz bir dizindeki tüm dosya ve alt-dizin adlarını bir liste, hatta ilişkilendirilmiş hypertext(köprü, link) listesi olarak sunabilmek için önce dizini içeriğini okuyabilmek için opendir() fonksiyonuile açmak, sonra da içindeki bilgileri readdir() fonksiyonu ile edinmek gerekir. readdir()fonksiyonu dizinin içindeki alt-dizin ve dosyaların adlarını sırayla, tek-tek okur.• Bu fonksiyondan gelen bilgileri bir değişkene atayarak ve bir döngü içinde yazdırarak, dizin listesiçıkartabiliriz. Örnekphp\dizin_oku01.phpDizinlerle İşlemlerDizin oluşturma: mkdir()• <strong>PHP</strong> programlarımız gerektiğinde sunucunun yazma yetkisi verdiği Web'eaçık kök ve altdizinlerde yeni dizinler oluşturabilir. Bunu, mkdir()fonksiyonu ile yaparız. Bu fonksiyona oluşturulacak dizinin adı ve 8 tabanlı(octal) sayı cinsinden ve önüne bir sıfır konarak dizininokuma/yazma/çalıştırma izinlerini belirten parametre verilir. Örnek:mkdir ("deneme", 0777);• Burada yer alan 0777, bu dizinin herkes için okuma ve yazma izni olduğunugösterir.• Bu parametre sadece Unix işletim sisteminde çalışan sunucular içingeçerlidir.Dizin silme: rmdir()• <strong>PHP</strong> programlarımızda gerektiğinde sunucunun yazma yetkisi verdiği Web'eaçık kök ve altdizinlerde mevcut dizinleri silebiliriz.• Bunu, rmdir() fonksiyonu ile yaparız. Bu fonksiyona oluşturulacak dizininadı parametre verilir. Örnek:rmdir ("deneme");11311419


Dosya GöndermeG• Internet'ten genellikle hep dosya indiririz!• Bir sunucuya, Web ziyaretçisi olarak gönderebildiğimiz tek şey ise,Formlara yazdığımız yazılardır!• Oysa HTML'in INPUT etiketinin çok az kullanılan TYPE="file"parametresi ziyaretçiye Web sunucusuna dosya gönderme (upload) imkanısağlar.Basit Bir e-ticaret eUygul<strong>ama</strong>sı• Tamirci Mehmet’in almışolduğu u siparişleri bilgisayarından yönetmek yistemektedir.• Bunun için i in bir web sitesi kurmak istemektedir.• Bu siteden ilk etapta lastik, yağ ve buji satışıyapacaktır.• Bu siteden yapılan siparişlerini de bir dosyada sakl<strong>ama</strong>yı düşünmektedir.• HTTP protokolü buna imkan vermekle birlikte Browser'lar bu imkanıkullanmaya ileri sürümlerinde kavuştular.• <strong>PHP</strong>4 den sonraki sürümler, ziyaretçilerimizin sitemize dosya göndermelerihalinde, bu dosyaların yönetimine ayrıca kolaylık sağlayan değişkenleresahiptir.• move_uploadeduploaded_file()upload edilen dosyayı yeni bir yere taşır.• Php Örnekler\uploader.html115116116Sipariş sonuçlarlarıAnket Formu• Sipariş sonuçlarları aşağıdakişekilde karşışımızaçıkabilir.• Yapmışolduğunuz unuz sayfa hakkında,sayfanızı ziyaret edenlerin nelerdüşündüğünü öğrenmekistiyorsunuz• Bunun için i in bir anket formu ve buformu size mail atan bir <strong>PHP</strong>uygul<strong>ama</strong>sı yapabilirsiniz.• Bu uygul<strong>ama</strong>nı dosyaya kayıtyapan versiyonunu datasarlayabilirsiniz.117118Metin Düzenleme ve Düzenli İfadeler• Web programlarımızda bir ziyaretçinin bize ulaştırdığı Formbilgilerini ve bir veritabanı dosyasından aldığımız ham verileriyeniden düzenlememiz gerekir.• <strong>PHP</strong> bunu yapabilmek için bize 50'den fazla fonksiyon sağlar.• Bunlardan sık kullanmamız gerekenleri ele alacağız.• Daha sonra, özellikle Unix işletim sistemine, Perl veyaJavascript diline aşina olanların hatırlayacağı Düzenli İfadedelerdenen metin ve sıralanış (pattern) eşleştirme araçlarınınüzerinde duracağız.• Bu iki araçla, elimize aldığımız herhangi bir metne istediğimizbiçimi vermek veya metnin içinden istediğimiz bölümü hemenhemen veya t<strong>ama</strong>men seçip biçimlendirmek ve kullanmakmümkün olur.Temel Alfanümerik Fonksiyonlarsubstr()• Bir alfanümerik değişkenin değerinin veya bir metnin istediğimiz altparçasını geri döndürür.• İlk ikisi zorunlu, sonuncusu seçmeli üç parametre ile kullanılır. Yazılışı:substr($($degisken,, başla, [boyut] );• Burada, $degiskenyerine içinden bir bölümü seçmek istediğiniz metnitutan değişkenin adını; başlayerine seçme işleminin başlayacağı karakterinbaştan itibaren kaçıncıdan sonra olduğunu ve isterseniz boyut yerine deseçilmesini istediğimiz karakter sayısını yazarız.• Kaç karakter seçileceğini gösteren boyut parametresini yazmazsanız, <strong>PHP</strong>değişkenin veya metnin sonuna kadar seçer.$secilen= substr ("abcdefabcdef", 1);$degisken= "Olumsuz düşünce dve mekanizmalarüzerine olumlu şeyler bina edilemez!";$secilen= substr ($degiskendegisken, , 8, 20);• Başlangıç olarak verdiğiniz sayı negatif ise (önünde - işareti varsa) seçimişlemine değişkenin sonundan itibaren başlanır.$secilen= substr($($degisken, -9);11912020


Temel Alfanümerik Fonksiyonlarchr()• Parametre olarak ASCII değerini belirttiğimiz karakteri sağlar. Örnek:echo chr(34);• Bu komutla Browser penceresinde çift-tırnak işareti görüntülenir.ord()• Parametre olarak yazdığınız karakterin ASCII değerini sağlar. Örnek:echo ord("A");• Bu komutla Browser penceresinde 65 rakamı görüntülenir. bu fonksiyonunbaşlıca kullanım alanı, bir değişkenin değerini arzu ettiğimiz bir karakterinACSII koduyla karşılaştırmak olabilir. Örneğin:if ( ord($karakter) == 60 {// karakter "


strtok()string strtok(string girdi, string ayırıcı);• explode()fonksiyonu gibi girdi stringini ayırıcı string ifadesikullanılarak larak parçalara alara ayrılır.r.• Bu fonksiyon her çağrıldığında bir parçalanma alanma yapılmaktadlmaktadır.Dolayısıyla yla döngdngü ile parçalanma alanma sonuna kadar devam edilmelidir.$token = strtok($feedback, “ ”);echo $token. “”;while ($token!=“”) {$token = strtok(“ ”);echo $token. “”;};Stringleri karşışılaştırmakint strcmp(string str1, string str2);• str1 ile str2 karşılaştırılır, bunlar eşit ise sonuç 0 olur. str1sözlüksel sıral<strong>ama</strong>da str2 den sonra gelirse sonuç sıfırdan büyüksonuç verir, aksi halde sıfırdan küçük sonuç verir.• Bu fonksiyon büyük-küçük harf duyarlıdır.• strcasecmp() ise strcmp() ile aynı işi yapar fakat büyük-küçükharf duyarlı değildir.127128String parçalaralarının n değerlerini erlerini değiştirmekstring strstr(string cümle, string aranan);• String içerisinde başka bir stringi ar<strong>ama</strong>k için i instrstr()fonksiyonu kullanılır.$feedback="Bu deneme yazı parçalanmaktadalanmaktadır.";echo strstr($($feedback,, "deneme")."";// deneme yazı parçalanmaktadalanmaktadır.• strchr()yukarıdaki fonksiyon ile aynı şekildeçalışırfakat string yerine sadece karakter arar. strrchr()ise bu işlemi isağ taraftan yapar.echo strrchr($feedback, , "d")."";// dır. d• stristr()ise String içerisinde başka bir stringiarar, fakat büyük-küçübüçük k harf duyarlıdır.r.Alt stringin pozisyonuint strpos(string cümle, string aranan, int [offset] );• Bir string içerisindeki alt stringin nerede ortaya çıktığıpozisyonugeri verir.$test = “Helloworld”;echo strpos($test,“o”);// 4echo strpos($test,“o”,, 5); // 7• strrpos()fonksiyonu ise son ortaya çıktığı pozisyonu verir.•129130Bul değiştirtir…string str_replace(string bul, string değiştir, string cümle);• Cümlestringi içerisindeki bul stringlerini değiştir ile değiştirerek geridöndürür.r.$feedback= "Bu deneme yazı parçalanmaktadalanmaktadır.";$test1=strstr_replace("("deneme", "%!@*"%!@*", $feedback$feedback);echo $test1;string substr_replace(string cümle, string değiştir, int başla, int [uzunluk] );• cümle içerisindekiibaşlala’danitibaren uzunluk kadarlık kısmı değiştiriledeğiştirir.•Tarih ve Saat Verisi• <strong>PHP</strong>, o andaki z<strong>ama</strong>n bilgisini, saat, dakika, saniye ve salise olarak; tarihbilgisini yıl, ay, gün (sayı veya isim olarak), programımızın herhangi biryerinde bize bildirebilir.• Bu bilgiyi Web sunucusunda istediğimiz anda, muhtemelen sunucununbulunduğu bilgisayarın sistem saatinden alacak olan <strong>PHP</strong>, sunucuprogramında farklı bölgesel ayarlar için gerekli düzenleme yapılmışsa, buimkandan yararlanarak bize sunucunun değil, arzu ettiğimiz bölgenin saatve tarihini bildirebilir.• Özellikle Türkiye'de olmayan bir sunucuda bu imkanın bulunupbulunmadığını, ancak sınayarak veya sistem yöneticisine soraraköğrenebiliriz. Böyle bir sın<strong>ama</strong> için şu kodları programınızın başına koyun:• Browser penceresinde "Türkçe bugün günlerden Sunday" yazısınıokursanız, sunucuda Türkçe için bölgesel ayar desteği yok demektir!13113222


Tarih ve Saat VerisiTarih ve Saat Verisi• %a – Kısa gün g n adı• %A – Tam gün g n adı• %b – Kısa ay adı• %B – Tam ay adı• %c – tercih edilen tarih ve z<strong>ama</strong>n gösterimi g• %C – Kısa yüzyyzyıl l (00 - 99)• %d – ayın n hangi günü g (01 - 31)• %D – %m/%d/%y ile aynı sonuç verir.• %e – Ayın n hangi günü g (1 - 31)• %g – %G gibi sonuç verir, fakat yüzyyzyıl l içermezi• %G – 4 rakamlı yıl l (see(%V).• %h – %b gibi sonuç verir• %H – saat, (00 - 23)• %I – saat, (01 - 12)• %j – yılın n hangi günü g (001 - 366)• %m – ay (01 - 12)• %M – dakika• %n – yeni satır r karakteri• %p – verile z<strong>ama</strong>n değerine erine karşışılık am veya pm değerlerini erlerini kullanır.• %r – a.m. ve p.m. Şeklinde z<strong>ama</strong>n yazılımı.•%R – 24 saatli notasyonda z<strong>ama</strong>n•%S – saniye•%t – tab karakteri•%T – şu u anki z<strong>ama</strong>n, %H:%M:%S•%u – haftanın n kaçıncncı günü (1 - 7), Monday=1.Dikkat: Sun Solaris de Sunday=1•%U – kaçıncncı hafta , Pazar haftanın n ilk günügolarak alınmaktadnmaktadır.•%V – ISO 8601 ya göre gşu u anki yılın y n hafta sayısı, , burada ilk hafta o ankiyıldan en az dört dgün g n içerir ive Monday haftanın n ilk günüdür. g•%W – kaçıncncı hafta , Pazartesi haftanın n ilk günügolarak alınmaktadnmaktadır.•%w – Haftanın n kaçıncncı günü, Sunday=0•%x – z<strong>ama</strong>nsız z tarih gösterimi g•%X – tarihsiz z<strong>ama</strong>n gösterimi g•%y – yüz z yılsylsız z yıl y l (00 - 99)•%Y – yüzyıl l içerecek işekilde yıl y•%Z veya %z – z<strong>ama</strong>n bilgisi, ismi veya kısaltmasksaltması•%% – % karakteri133134$t=time();Örnek


Tarih ve Saat DüzenlemeDüzenli İfadeler• Örnek:print (date("l dS of F Y h:i:s A"));• Browser penceresine İngilizce bölgesel ayarlar yapılmış bir bilgisayara kurulu Websunucusunda: "Sunday30th of July 2000 07:51:08 AM" yazdırır.print (date("l, d F Y g:i:s"));• Browser penceresine Türkçe bölgesel ayarlar yapılmış bir bilgisayara kurulu Websunucusunda: "Pazar, 30 Temmuz 2000 07:51:08" yazdırır.• date()ve mktime()fonksiyonlarını birlikte kullanarak geçmiş veya gelecek tarihleribulma imkanı de vardır.• int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )• Örnek:$yarin = mktime (0,0,0, date("m"),date("d")+1,date("Y"));$gecen_ay = mktime (0,0,0, date("m")("m")-1,date("d"),date("Y"));$gelecek_lyllyl = mktime (0,0,0,datedate("m"),date("d"),date("Y")+1);• Unix işletim sistemini geliştirenlerin bilişim teknolojisine kazandırdığı bir diğer pahabiçilemez araç olan Düzenli İfadeler (Regular Expressions), belki de işaretlerinin karmaşıklığısebebiyle programcıların fazla dokunmak istemedikleri bir alandır.• Bu kavramla daha önce tanışmış olmayanlara, CGI veya Javascript kodlarında gördükleri,^.+@.+\\..+$..+$işaretlerinin, Düzenli İfade işlemlerine ait olduğunu hatırlatalım.• Bu işaretler ve onların arasına koyduğumuz karakter örnekleri ile, <strong>PHP</strong> aradığımız bir metninkarakterlerinin hangi diziliş, sıralanış konumunda olduğuna bakarak, bize o metni bulmasınısağlar;• Bu aş<strong>ama</strong>dan sonra ya bu metni kullanırız, sileriz veya değiştiririz.• Dolayısıyla, Düzenli İfade demek, bir diziliş, sıralanış biçimi demektir.• Düzenli İfade oluşturarak, <strong><strong>PHP</strong>'ye</strong> "İşte buradaki gibi sıralanmış karakterleri bul!" deriz.• Düzenli İfade, <strong><strong>PHP</strong>'ye</strong> verdiğimiz sıralanışa uygun metnin nerede ve kaçıncı kez bulunmasınıistediğimizi de belirtir.• Ayrıca, bu ifade ile, <strong>PHP</strong> bulduğu metni (veya metinleri) ne yapmasını istediğimizi desöylebiliriz.139140Eşleştirme deyimleri ve işaretlerÖzel Karakterler^hakk• "hakk" ile başlayan bütün kelimeleri bulur. ^ işareti, onu izleyen karakterin sadecealfanümerik değişkenin başında olması gerektiğine işaret eder.• Bu deyimle, "Hakkı Demir bugün buradaydı!“ veya "Hakkıdır hakka tapan, milletiministiklâl!" eşleşebilir;• Fakat "Anaların hakkı ödenmez!“ eşleşmez; çünkü <strong>PHP</strong> açısından ^ işaretinin anlamı,"Başlangıcında 'hakk' karakterlerinin sıralanışıyla aynı sıralanıştaki alfanümerikdeğeri bul!" demektir.edilemez$• Bu deyim ise <strong><strong>PHP</strong>'ye</strong> "edilemez" ile biten bütün kelimeleri bulur. Örneğin, "Kötümserinsanın yükselişinden bahsedilemez" cümlesi bu deyimle bulunabilir; fakat sonundanokta olduğunda, yani ".. edilemez." diye biten hiç bir cümle bu deyimle eşleşemez.^hakkı$• <strong>PHP</strong>, başında ^ işareti, sonunda $ işareti bulunan karakter sıralanışını, aynen arar;yani bu deyim, birinci örnekteki üç cümleyi de bul<strong>ama</strong>z.“hakkı buraya geldi hakkı”• Bu deyim ise her üç cümleyi de buldurur; çünkü üçünde de bu dört karakter busıralanışla mevcuttur.• <strong>PHP</strong>'nin Düzenli İfadeleri, bütün rakam ve harfleri eşleştirebilir. Fakat sorun,özel karakterlerde çıkar.• Sözgelimi, sekme işareti, satır sonlarında yeni-satır/satırbaşı işareti, gibi özelkarakterleri, ancak önlerine Escape işareti olan ters bölü işaretini koyarakbuluruz.• Düzenli İfadelerde Özel Karakterler• [\b] Geri (Backspace) karakterini bulur.• \bBelirtilen karakterle sınırlanan kelimeyi bulur: k\b, "hakmücadelesi"ifadesindeki birinci k 'yı bulur; çünkü bu harf, birkelime sınırlayıcıdır.• \BBelirtilen karakterle sınırlanmayan kelime yoksa, başlayanıbulur:k\Bi, "üç kişi" ifadesindeki ki 'yi bulur.• \cXX yerine yazacağımız kontrol karakterini bulur. Örneğin, \cA,Ctrl+A'yı, \cZ ise Ctrl+Z'yi bulur.• \d0'dan 9'ya kadar bir rakamı bulur: IE\d, her ikisi de herhangibirrakamla biten "IE5" ve "IE4" değerlerini ikisinide bulur,• \DHerhangi bir ondalık işaretini bulur.• \fForm-feed (kağıt çıkart) karakterini bulur.141142Özel KarakterlerKarakter Grupları• Düzenli İfadelerde Özel Karakterler• \n Newline (yeni satır) karakterini bulur.• \r Return (satırbaşı) karakterini bulur.• \s Boşluk (space) bulur.• \S Yatay ve düşey sekme, kağıt-çıkart, yeni satır, satırbaşıveboşluk dışındaki herhangi bir karakteri bulur.• \t Yatay sekme (Tab) karakterini bulur.• \v Düşey sekme karakterini bulur.• \w Herhangi bir harf, rakam veya alt-çizgiyi bulur.• \W Harf, rakam ve alt-çizgi dışındaki karakteri bulur.• \xHex Verilen 16 tabanlı (Hexadecimal) sayıya uygun Escapekarakterini bulur.• Örneğin, \x25, % işaretini bulur.• Bu arada noktal<strong>ama</strong> işaretlerini arattırırken, önlerine ters bölüişareti koymak gerekir, \. , \{ , \$ gibi. Ters bölü işaretini deyine önüne ters bölü işareti koyarak (\\) arttırabilirsiniz.• <strong>PHP</strong>'nin Düzenli İfadeleri'nde kolaylık sağlayan ve mesela ziyaretçininbir Form'da bir INPUT etiketine verdiği yanıtların içinde olm<strong>ama</strong>sı veyaolm<strong>ama</strong>sı gereken karakterleri bulmamıza imkan veren karakter gruplarıoluşturma yöntemini de kullanabiliriz.• Sözgelimi bütün sesli harfleri aratmak için şöyle bir karakter grubuoluşturabiliriz:[OoUuÖöAaOoEeıIiİ]• Karakter gruplarını köşeli parantez içinde yazarız. Bu deyimle, <strong>PHP</strong>,içinde herhangi bir sesli harf bulunan bütün değerleri eşleştirecektir.• Bu yöntemden yararlanarak, şu grupları kullanabiliriz:• [a-z] Herhangi bir küçük harfi bulur.• [A-Z] Herhangi bir büyük harfi bulur.• [a-zA-Z] Herhangi bir büyük veya büyük harfi bulur.• [0-9] Herhangi bir rakamı bulur.• [0-9\.\-] Herhangi bir rakamı, noktayı veya kesme çizgisini bulur.• [\f\r\t\n] Herhangi bir Form-feed (kağıt çıkart), Newline (yenisatır), Return (satırbaşı) karakterini veya boşluğu (space) bulur.14314424


Karakter GruplarıKarakter Grupları• Sözgelimi, bir alfanümerik değer kümesinde b3, u2, n9 gibi birincisi küçük harf,ikincisi rakam olan iki karakterlik dizileri bulmak istiyorsak, ar<strong>ama</strong> grubunu şöylekurarız:^[a-z][0-9]$Bu deyim <strong><strong>PHP</strong>'ye</strong>, a'da z'ye küçük harfle başlayan, (^ işareti aranan unsurundeğerin başında olması gerektiğini söylüyor) ve sonunda 0'dan 9'a bir rakam bulunankelimeleri bulmasını söyleyecektir.• <strong>PHP</strong>, bu kelimenin sadece iki harfli olmasına dikkat edecektir; çünkü grubumuzun birbaşı ve bir de sonu belirlendiğine göre, üç karakterli değerlerin bulunması imkanıyoktur.• ^ işareti köşeli parantez içinde grup deyimi oluştururken kullanılırsa, bu olumsuzlukanlamı taşır.• Sözgelimi, iki rakamlı ancak birinci karakteri rakam olmayan fakat ikinci karakterirakam olan değerlerin bulunması için şu deyim gerekir:^[^0-9][0-9]$• Burada en baştaki ^ işareti "başında" demektir; ancak hemen arkasından gelengrupta "rakam olmayan" demiş oluyoruz; ikinci grup ve sonundaki $ işareti ile"rakamla biten" anlamına geliyor.• Deyimde sadece baş ve sonu gösteren iki eşleştirme unsuru bulunduğuna göre budeyim, "başında rakam olmayan, sonunda rakam olan iki karakterli değerleri" bulmayayarayacaktır. Bu deyim söz gelimi 13'ü bulmayacak, fakat u2'yi bulacaktır.• Bu yöntemle şu grupları yapabiliriz:• [^a-z] Küçük harf olmayan herhangi bir harfi bulur.• [^A-Z] Büyük harf olmayan herhangi bir harfi bulur.• [^\\\/\^] \ , / veya ^ dışında herhangi bir karakteri bulur.• [^\"\'] Çift ve tek tırnak dışında herhangi bir karakteri bulur.• Grup oluşturmada kullandığımız özel karakterler de vardır.• Örneğin nokta işareti (.), \n den farklı herhangi bir karakteranlamına gelir. Dolayısıyla, yeni satır başlangıcı olarak boşlukkullanıl<strong>ama</strong>yacağından^.0$deyimi ile boşluk harici bir karakter ile başlayan ve sıfır ile bitenherhangi iki karakterli değeri bulacaktır.145146Hazır Özel Düzenli İfade• <strong>PHP</strong>'nin kullanılmaya hazır özel Düzenli İfade eşleştirmegrupları da vardır:• [[:alpha:]] Herhangi bir harf• [[:digit:]] Herhangi bir rakam• [[:alnum:]] Herhangi bir harf veya rakam• [[:space:]] Herhangi bir boş karakter• [[:upper:]] Herhangi bir büyük harf• [[:lower:]] Herhangi bir küçük harf• [[:punc:]] Herhangi bir noktal<strong>ama</strong> işareti• [[:xdigit:]] Herhangi bir Hexadecimal karakter. [0-9a-fA-F]• [[:blank:]] Tablar ve boşluk• [[:cntrl:]] Kontrol karakterler• [[:graph:]] Boşluk hariç tüm yazılabilir karakterlerKarakter eşleştirme• Karakter eşleştirmede tekrar sayısı da bir özellik olarak kullanılabilir. Tekrar sayısıbelirtmek için süslü parantez ({}) kullanırız. Örnekler:• ^a{4}$ İçinde sadece dört adet küçük a harfi bulunan kelimeleri seç: aaaa.• ^a{2,4}$ İçinde sadece iki, üç veya dört adet küçük a harfi bulunan kelimeleriseç: aa, aaa, aaaa gibi• a{2, } İki veya daha fazla küçük a harfi bulunan kelimeleri seç: haar, haaar,haaaar,… gibi. Bu deyim "har" kelimesini seçmez.• \t{2} Ardı ardına gelen iki sekme işaretini bul• . \n karakterinden faklı herhangi bir karakter anlamına gelmektedir. ".at “ile "cat", "sat", "#at" veya "mat" gibi• .{2} Herhangi çift karakteri bul: aa, &&, == gibi• ^\-{0,1}[0-9]{1,}$ Negatif veya pozitif herhangi bir tam sayıyı bul• ^[0-9]{1,}$ Pozitif herhangi bir tam sayıyı bul• Bu tür deyim oluşturma işlemleri giderek karmaşıklaşabilir. Örneğin:^\-{0,1}[0-9]{0, }\.{0,1}[0-9]{0, }$• Bu karmaşık deyim aslında sadece "Negatif veya pozitif bir ondalık (double) değeribul,“ anlamına geliyor. Kısaca irdelersek, aranan değerin sıfır veya bir keretekrarlanan bir kesme çizgisiyle başlayabileceğini ("Sıfır veya bir kere" demek, olsada olur, olmasa da anlamına geliyor!) bunu sıfır veya daha fazla kere tekrarlanan birrakamın izleyebileceğini, onu da sıfır veya bir kere tekrarlanan bir nokta işareti ilesonunda sıfır veya daha fazla kere tekrarlanan herhangi bir rakamın izleyebileceğinisöylemiş oluyoruz.147148Karakter eşleştirme• <strong>PHP</strong> bu tür karmaşık ifadelerin hatasız yazılmasını sağlayan kısa yollara sahiptir.Bunları sıralayalım:• ?{0,1} anlamına gelir. Kendisinden önce yer alan unsurun en az sıfır en çok birkere tekrar edilmesi gerektiğini (olmayabileceğini <strong>ama</strong> olursa en fazla bir kereolabileceğini) belirtir.bilgi?sayar : bilgisayar veya bilgsayar• *• +{0, } anlamına gelir. Kendisinden önce yer alan unsurun sıfır veya daha fazla keretekrar edilmesi gerektiğini (tümüyle opsiyonel olduğunu) belirtir.bilgi*sayar : bilgsayar, bilgisayar, bilgiisayar,bilgiiisayar, bilgiiiisayar, …{1, } anlamına gelir. Kendisinden önce yer alan unsurun en az bir veya daha çokkere tekrar edilmesi gerektiğini (bulunmasının zorunlu olduğunu) belirtir.bilgi+sayar : bilgisayar, bilgiisayar, bilgiiisayar,…• Birden fazla karakter grubu için () parantezleri kullanılabilir.bil(gi)+sayar : bilgisayar, bilgigisayar, bilgigigisayar,…bil(gi)*sayar : bilsayar, bilgisayar, bilgigisayar,…Karakter eşleştirme• Bu kısa-yolları kullanarak, yukarıdaki karmaşık ifadeleribasitleştirelim:• [a-zA-Z0-9_]+ En az bir harf veya rakam veya altçizgiiçeren herhangi bir kelime• [0-9]+ Herhangi bir pozitif tamsayı• \-?[0-9]+ Herhangi bir tamsayı• \-?[0-9]*\.[0-9]+ Herhangi bir kesinli (double) sayı• Bir Düzenli İfade'nin yazılışında birden fazla ar<strong>ama</strong>-sıralanışdeyimine yer verebiliriz. Bunu yapmamızı sağlayan | işaretidir.Örneğin,\.com | \.co\.ukifadesi ile, ya ".com" ya da ".co.uk" değerlerinin bulunmasınısağlayabiliriz. Burada | işareti "veya" kelimesi gibidüşünebilirsiniz.14915025


Karakter eşleştirme• Düzenli ifadeler yoluyla INPUT etiketinden gelen değerleri incelerken hata yapmakkolaydır. Bunun için kendi ifadelerinizi mutlaka çeşitli olasılıklara karşı sın<strong>ama</strong>lısınız.• Bu bölümün başında örnek olarak verdiğimiz Düzenli İfade'yi hatırlıyor musunuz?^.+@.+\..+$• Örneğin bu ifade, ziyaretçinin elektronik posta adresini yazması gereken bir INPUTetiketinin sağladığı değerin gerçekten elektronik adres biçimi taşıyıp taşımadığını sınar.• Baştaki ^ ve nokta işaretleri ile artı işareti değerin önünde boşluk olm<strong>ama</strong>sını sağlıyor;@ işareti ise değerin içinde @ bulunması gerektiğine işaret ediyor.• Tekrar eden nokta ve artı işaretleri "ne kadar olursa olsun ve ne olursa olsun" anlamınageliyor.• Bunu izleyen nokta karakterini gösteren (\.) işaret buralarda bir de gerçekten noktaolması gerektiğini ve bunu izleyen nokta ve artı tekrar "ne olursa olsun, ne kadar olursaolsun" anlamını taşıyor.• Başka bir deyişle, aradığımız değerin "herhangi bir şey" @ "herhangi bir şey daha" . "birşeyler daha" şeklinde olduğunu belirtmiş oluyoruz.• Ne var ki deyim içinde iki nokta veya iki @ işareti olan veya @ işareti ile nokta arasındabir şey bulunmayan veya @ veya noktadan öncesi ya da sonrası boş olan bütün değerlerisaf dışı etmeye yetmeyecektir.• Sözgelimi bir ziyaretçimiz "@@@@.@@.@" yazarsa, bu deyim bu değeri geçerli birelektronik adres sayacaktır.• <strong>PHP</strong> programlarımızda ziyaretçilerimizin verdiği değerleri çeşitli bakımlardan sın<strong>ama</strong>k veseçmek mümkündür; ancak hiç bir z<strong>ama</strong>n yazılanların doğruluğunu garanti edemeyiz.• Özellikle bir metinde bulunm<strong>ama</strong>sı gereken işaretleri <strong><strong>PHP</strong>'ye</strong> aratabiliriz.• Bunu Düzenli İfade Fonksiyonları sağlar.151Düzenli İfade Fonksiyonları• Yukarıda öğrendiğimiz Düzenli İfade yazma tekniklerini, <strong>PHP</strong>'nin bizesağladığı beş fonksiyonda parametre olarak kullanırız.• <strong>PHP</strong>'nin ayrıca Perl-tarzı düzenli ifade fonksiyonları da vardır.• Bu fonksiyonlardan, ya bize bir boolean (doğru/yanlış) değer döner;ya da fonksiyon istediğimiz işi yaparak vardığı sonuçları verdiğimizdeğişkene yazar.• Biz, daha sonra bu değere bakarak veya değişkenin değerlerinikullanarak, <strong>PHP</strong> programımızın akışını kontrol edebiliriz.• Burada ele alacağımız fonksiyonlara ilişkin örneklerde, daha öncekibölümlerde oluşturduğumuz konuk defteri programı ile Webziyaretçilerimizin sunucuya göndereceği bilgileri doğrul<strong>ama</strong>ya vemuhtemel zararlı kodlardan ayıkl<strong>ama</strong>ya çalışacağız.152Düzenli İfade Fonksiyonlarıereg() ve eregi()• ereg(), arattığımız karakter sıralanışı bulunduğu taktirde true/doğru, bul<strong>ama</strong>dığıtaktirde false/yanlış karşılığı bir değer verir. Fonksiyonu şöyle yazarız:$intDe=ereg(“düzenli_ifade”, $kaynak, $yeni_değişken);$kaynak, eşleştirilecek sıral<strong>ama</strong>nın içinde aranacağı değeri tutan değişkendir.• Fonksiyonun bir diğer becerisi, eğer eşleştirilecek sıral<strong>ama</strong>yı gruplar halinde verirsek,kaynakta yapacağı eşleştirme olursa, buna uygun değerleri bir dizi değişkeneyazabilmesidir; istersek bir parametre olarak bu yeni değişkenin almasını istediğimizadı veririz; böylece eşleştirme sonucu bulunan değerler kaydedilmiş olur.• eregi() fonksiyonu ereg() fonksiyonu gibi çalışır; sadece eşleştireceğideğerlerde büyük/küçük-harf farkı gözetmez.• Girilen $date değişkeninin (YYYY-MM-DD) formatına uygun girilip girilmediğiniinikontrol etmek istersek: // 33.21.2007 Php Örnekler\duzenli01.duzenli01.php153e-mail kontrolif (!eregi(“^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$”, $email)){echo “That is not a valid email address. Pleasereturn to the”.” previous page and try again.”;exit;}^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$154Düzenli İfade Fonksiyonlarıereg_replace() ve eregi_replace()• Gördüğümüz gibi, ereg() arattığımız karakter sıralanışı bulunduğu taktirde doğru,bul<strong>ama</strong>dığı taktirde yanlış karşılığı verdikten sonra duruyor!• Oysa kimi z<strong>ama</strong>n arattığımız ve bulunan değerin başka bir değerle değiştirilmesigerekebilir.• Bunun için ereg_replace() ve eregi_replace() fonksiyonlarını kullanırız:ereg_replace("eşleştirilecek", yeni_metin , $kaynak);• Fonksiyonun aradığımız eşleştirmeyi bulursa, bu değerin yerine verdiğimiz yenimetni koyacaktır; yeni metni bir değişkenin değeri olarak da verebiliriz.$adi = ereg_replace("


Düzenli İfade Fonksiyonlarısql_regcase()• İçinde büyük/küçük-harf ayrımı olan bir değeri büyük/küçük-harfayrımı olmayan Düzenli İfadeler haline çevirir.• Bu fonksiyon bizden Düzenli İfade almaz, tersine Düzenli İfadeoluşturur. Örnek:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!