108
GİRİŞ İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın içinde sıkça kullandığımız cihazlar arasında yer alan televizyonlar da “SMART“ özelliği adı altında birer işletim sistemine sahip olabilmektedir. Ancak; her elektronik cihazın birer bilgisayara dönüşmesi; onlar için uygulama yazımını da zorlaştırmaktadır. Bu durumun temel nedeni ise her işletim sisteminin desteklediği dillerin değişebilmesi ve uygulamanın söz edilen işletim sistemine ulaştırılabilmesindeki güçlüklerdir. Örneğin; yayın olarak kullanılan tablet bilgisayarlar veya akıllı telefonların USB girişlerinin olmaması onlara uygulamayı ulaştırmada karşılaşılan güçlüklerden birisidir. Ayrıca bu durumda ikinci bir cihaza ihtiyaç duyulacak olması da gözden kaçırılmamalıdır. Elbette teknolojinin gelişmesi ile ortak uygulama geliştirme platformları da üretilmektedir. Ancak birçok yönden çalıştırılacak uygulamanın bilgisayara yüklenmesi dezavanajtarını da beraberinde getirecektir. Örneğin; uygulamanın yüklü olduğu bilgisayara bir zarar gelmesi halinde uygulama da zarar görecektir. Ayrıca; uygulama yüklenmesi gibi ihtiyaçlar da her ne kadar basit gibi görünse de “çevrimiçi uygulama” ile karşılaştırıldığında gereksinim olduğundan eksi hanesinde yerini alacaktır. Çevrimiçi uygulamalar ise bir internet tarayıcısı üzerinden çalışarak uzaktaki sunucuda işlemler yapılabilemesine olanak tanımaktadır. Bu tür uygulamalar genellikle bir internet adresine sahiptir ve kaydedilen bilgiler sunucuda saklanır. Bu tür uygulamaların yazım alanına ise “İnternet Programcılığı” adı verilmektedir. İnternet programcılığının yapıldığı en yaygın diller ise PHP, JSP ve ASPX’dir. Ayrıca yardımcı olarak Javascript de sıkça kullanılmaktadır. KULLANIM ALANLARI İnternet programcılığının kullanım alanları genellikle tek bir merkezden yürütülen işlerdir. Örneğin; sınav başvurularının tek bir merkezden alınması için gerekli olan uygulama internet programcılığı ile geliştirilir. DİĞER DİLLERDEN FARKLARI Günümüzde bilgisayar teknolojisinin yaygınlığı beraberinde fiziksel olarak tutulan kayıtların sanal ortama aktarılmasını getirmiştir. Bu aktarımın gerçekleşmesi ise bilgisayar programları

bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

GİRİŞİşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur.

Günümüzde ise hayatın içinde sıkça kullandığımız cihazlar arasında yer alan televizyonlar da “SMART“ özelliği adı altında birer işletim sistemine sahip olabilmektedir. Ancak; her elektronik cihazın birer bilgisayara dönüşmesi; onlar için uygulama yazımını da zorlaştırmaktadır. Bu durumun temel nedeni ise her işletim sisteminin desteklediği dillerin değişebilmesi ve uygulamanın söz edilen işletim sistemine ulaştırılabilmesindeki güçlüklerdir.

Örneğin; yayın olarak kullanılan tablet bilgisayarlar veya akıllı telefonların USB girişlerinin olmaması onlara uygulamayı ulaştırmada karşılaşılan güçlüklerden birisidir. Ayrıca bu durumda ikinci bir cihaza ihtiyaç duyulacak olması da gözden kaçırılmamalıdır.

Elbette teknolojinin gelişmesi ile ortak uygulama geliştirme platformları da üretilmektedir. Ancak birçok yönden çalıştırılacak uygulamanın bilgisayara yüklenmesi dezavanajtarını da beraberinde getirecektir. Örneğin; uygulamanın yüklü olduğu bilgisayara bir zarar gelmesi halinde uygulama da zarar görecektir. Ayrıca; uygulama yüklenmesi gibi ihtiyaçlar da her ne kadar basit gibi görünse de “çevrimiçi uygulama” ile karşılaştırıldığında gereksinim olduğundan eksi hanesinde yerini alacaktır.

Çevrimiçi uygulamalar ise bir internet tarayıcısı üzerinden çalışarak uzaktaki sunucuda işlemler yapılabilemesine olanak tanımaktadır. Bu tür uygulamalar genellikle bir internet adresine sahiptir ve kaydedilen bilgiler sunucuda saklanır. Bu tür uygulamaların yazım alanına ise “İnternet Programcılığı” adı verilmektedir. İnternet programcılığının yapıldığı en yaygın diller ise PHP, JSP ve ASPX’dir. Ayrıca yardımcı olarak Javascript de sıkça kullanılmaktadır.

KULLANIM ALANLARIİnternet programcılığının kullanım alanları genellikle tek bir merkezden yürütülen işlerdir.

Örneğin; sınav başvurularının tek bir merkezden alınması için gerekli olan uygulama internet programcılığı ile geliştirilir.

DİĞER DİLLERDEN FARKLARIGünümüzde bilgisayar teknolojisinin yaygınlığı beraberinde fiziksel olarak tutulan kayıtların

sanal ortama aktarılmasını getirmiştir. Bu aktarımın gerçekleşmesi ise bilgisayar programları ile mümkündür. Bilgisayar programlarını sunucu kaynakları açısından ikiye ayırabiliriz.

1. Yerel uygulamalar2. İnternet uygulamaları

Yerel uygulamalar, uygulamanın geliştirilmesinden sonra kullanıcı bilgisayarına yüklenmesi ile çalışmaktadır. Bu tür uygulamaların işlem yapan kodları ve bilgileri saklayan veritabanları kullanıcı bilgisayarında yer almaktadır. İnternet uygulamalarına oranla kesintisiz ve hızlı bir altyapı sunarlar. Bu avantajların sebebi, kullanıcının bilgiyi kaydetmesi için aracı bir bağlantıya ihtiyaç duymamasından kaynaklanmaktadır. Ancak; ünitenin giriş kısmında belirtildiği gibi bu durum bir dezavantaja dönüşebilir. Çünkü kullanıcının bilgisayarına zarar gelmesi halinde bütün bilgiler ve uygulama çalışamaz duruma gelecektir.

Yerel uygulamalarda ortaya çıkan bir dezavantaj da; programın güncellenmesi aşamasında ortaya çıkmaktadır. Güncelleme paketlerinin yüklenmesi tamamen kullanıcının insiyatifinde olduğundan gerçekleşmeme ihtimali bulunmaktadır. Bu durumun sonucu olarak da geliştirici uygulamanın bütün kullanıcılarda doğru çalışmasını garanti edemeyebilir.

İnternet uygulamaları, programın kaynak kodlarının ve veritabanının uzak bir sunucuda bulunduğu uygulamalardır. Bu tür uygulamalarda kaynak tekil olduğu için güncellenmesi ve hataların

Page 2: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

kapatılması daha hızlı olmaktadır. Ayrıca; kullanıcı bilgisayarlarından bağımsız olduğu için virüslerden etkilenme ihtimalleri çok daha zayıftır.

İnternet uygulamalarının en önemli dezavantajı ise uygulamada bir sorun olması halinde hiçbir kullanıcının uygulamaya erişemeyecek olmasıdır. Ancak; bu durum uygulamada oluşacak sorunların daha hızlı çözüme kavuşturulmasını da beraberinde getirmektedir.

Bir programcının hangi metodu kullanarak uygulama geliştireceğini seçmesi gerekir. Birçok uygulama türü için internet programcılığı kullanılsa da yapılacak işlemlerin gereksinimlerine gore yerel uygulama geliştirme de tercih edilmesi gerekebilir.

Aşağıdaki gereksinimlerde yerel uygulama geliştirmeyi seçmek daha doğru bir yaklaşım olacaktır.

1. Yüksek işlemci kullanımı gerektiren işlemler (örneğin grafik işlemleri)2. Kullanıcı sayısının uzak bir sunucuda uygulama geliştirme maliyeti için fazla olduğu durumlar3. İnternet bağlantısının olmadığı veya zayıf olduğu durumlar4. Uygulamanın istediği her an kullanıcı bilgisayarına erişmesini gerektiren durumlar

Bilginin uzak bir sunucuda saklanmasının güvenli olmadığı durumlarla da karşılaşılabilir. Ancak; bu tür durumlarda yerel ağ veya intranet üzerinde bir sunucu kurularak bilginin ağ dışına çıkışının önüne geçilebilir. Örneğin; 6 bilgisayarı olan bir kurumda, ağ üzerine bir bilgisayar daha dâhil edilerek internet sunucusu şeklinde kullanılabilir. Bu şekilde hem sunucu kirası, alan adı kirası gibi ek masraflardan da uzak kalınmış olacaktır.

UYGULAMA DİLİNİN SEÇİLMESİİnternet programcılığı gerektiren durumlarda programlamanın hangi dille yapılacağının

belirlenmesi önemlidir. Bu seçim yapılırken dikkat edilmesi gereken hususların başında ise dile olan hâkimiyet vardır. Çünkü hâkim olunan bir dil ile 1 haftada geliştirilebilecek uygulama, daha az bilinen bir dil ile belki on kat fazla sürede geliştirilebilecektir.

DestekKullanılacak dilin seçiminde, kullanıcı desteğinin de yeterli seviyede olması önemlidir. Bu

noktada resmi kanallarla elde edilen dökümantasyonlardan daha çok; resmi olmayan destek kapasiteleri önemlidir. Çünkü kullanıcıların karşılaştıkları sorunları internette aramaları halinde elde edecekleri veriler ile çözüme ulaşmaya çalışacakları aşikârdır.

Google arama moturunu kullanarak, Türkçe sayfalar içerisinde bir arama yapacak olursak destek seviyeleri hakkında bir fikir yürütebiliriz.

Sonuç Sayısı Aranan Cümle411.000 php ile veritabanı bağlantısı

76.300 aspx ile veritabanı bağlantısı14.200 jsp ile veritabanı bağlantısı

Tablo 1.1: Destek için yapılan bir Google araması sonuçları

Tablo 1.1’den görülebileceği gibi bir işlem hakkında yapılan arama sonuçlarında en fazla döküman PHP dili için bulunmuştur. Elbette bu sonuçlardan en iyi desteğin PHP tarafından verildiği gibi bir anlam çıkarılamaz. Ancak; bir problemle karşılaşıldığında çözümün internette bulunma ihtimali hakkında fikir yürütmek mümkün olmaktadır. Phyton ve CGI gibi diğer dillerin Türkçe destek kaynakları çok daha azdır.

Page 3: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Uygulama GeliştirmeKullanılacak dilin seçilmesinde bir diğer önemli faktör ise, geliştirme aşamasında kullanılacak

araçların elde edilmesi sırasında karşımıza çıkacaktır. Bu araçları ikiye ayıracak olursak; aşağıdaki seçenekleri elde edebiliriz.

1. Servisler2. Editörler

ServislerSeçilen uygulama dilinin yerel bilgisayarda derlenmesi ve ve çalıştırılabilmesi için gerekli olan

servislerin yüklenmiş olması gerekmektedir. Her bir dilin kendine özgü servis uygulaması bulunmaktadır. Servis uygulamaları bakımından dilleri incelediğimizde aşağıdaki tablo karşımıza çıkacaktır.

Uzantı Gerekli Servis İşletim Sistemi DesteğiPHP Apache httpd veya IIS Windows / Linux / Mac OSASPX IIS (Internet Information Services) WindowsJSP Apache Tomcat veya Glassfish Windows / Linux / Mac OS

Tablo 1.2: Uygulama dilleri ve gereksinimleri

Tablo 1.2’de yer alan IIS (Internet Information Services), Microsoft firması tarafından geliştirilen ve Microsoft Windows kullanıcılarına ücretsiz olarak sunulan bir servistir. Ancak; bu servis sadece Windows işletim sistemlerinde çalışabilmektedir. Bazı yöntemler kullanarak Linux işletim sistemleri üzerinde de ASPX sayfaları çalıştırılabilse de; tabloda sadece doğrudan verilen desteklere yer verilmiştir.

Apache httpd, Apache Tomcat ve GlassFish servisleri, yaygın bütün işletim sistemleri üzerinde çalışabilmektedir. İşletim sistemi olarak Windows’un yeterli gelebileceği düşünülebilir. Ancak; Microsoft firmasının sunucu işletim sistemleri için talep ettiği yüksek ücretler dikkate alındığında; alan kiralama (hosting) firmaları genellikle Linux işletim sistemlerini seçmektedir. Bu durum ise ASPX yayınlamak için gerekli olan sunucu kiralama maliyetlerini daha kısıtlı ve yüksek neden olmaktadır.

EditörlerÇevrimiçi uygulamalar geliştirirken en önemli araçlardan birisi de editörlerdir. Editörler,

uygulama kodlarının yazıldığı programlar olarak tanımlanabilir. Günümüzde bütün diller için birden fazla editör mevcuttur.

PHP, ASPX ve JSP uygulamaları yazmak için gerekli editörleri sahip oldukları yetenekler yönünden değil; uygulamayı yayınlama için ihtiyaç duydukları adımlar açısından inceleyebiliriz. Bu tür bir inceleme ile uygulamanın yayınlanma hızı hakkında fikir sahibi olunabilir. Uygulamaların yayınlanma hızları, geliştiricinin yazdığı kodların sonucunu ekranda görebilmesi için gerekli olan süre olarak düşünülebilir.

Aşağıdaki şemada PHP, ASPX ve JSP dillerinde uygulamanın yayınlanması için editörlerin yaptığı işlemlerin yüzeysel incelemeleri görülebilir.

Page 4: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Şekil 1.1: Uygulamanın sonuçlandırma aşamaları

PHP ile geliştirilen uygulamalarda editörler, kullanıcının yazdığı kodları fiziksel dosya üzerine kaydettiği anda yayınlamış olurlar. Ancak; diğer dillerde kodlar, derleme işlemi adı altında bütün bağları çözülerek paketlenir ve yayınlanır. Bu durum ise yayınlama işleminin daha uzun sürmesine neden olmaktadır.

PHP UYGULAMALARIBu noktaya kadar PHP dilinin seçilmesinin temel nedenleri hakkında fikir sahibi olunabilmesi

için gerekli bilgiler verildi. Bu konuda ise PHP dilini kullanarak uygulama yazabilmek için örneklendirmeler yapılacaktır.

Geliştirme OrtamıPHP uygulamalarını geliştirmek için gerekli olan Apache httpd servisinin kurulması kolay olsa

da; Apache servisinin üzerine PHP desteğinin eklenmesi göreceli olarak daha zordur. Ancak; bu gereksinimler yaygın olduğundan otomatik kurulumlar yapan uygulama paketleri internet üzerinde mevcuttur. Bu paketlerden bazılarını listeleyecek olursak aşağıdaki gibi verilebilir.

WAMP XAMPP LAMP

Geliştirme paketleri arasında en yaygın kullanılanı WAMP’dır. Bu paket internetten ücretsiz olarak indirilebilir. 32 Bit Microsoft Windows işletim sistemerinde çalışabilecek WAMP yazılımı için gerekli olan paketler aşağıdaki listeden tıklanarak indirilebilir.

1. Microsoft Visual C++ 2010 SP12. WampServer 2.4

Yukarıdaki listedeki uygulamalara tıklayarak indirdiğiniz paketleri kurmak için; paketlere çift tıkladıktan sonra, her ekranda “Next (İleri)” düğmelerine tıklayabilirsiniz.

PHP

Sayfanın Kaydedilmesi

Sonuçlandırma

ASPX

Sayfanın Kaydedilmesi

Kodların Derlenmesi

Sonuçlandırma

JSP

Sayfanın Kaydedilmesi

Kodların Derlenmesi

Sonuçlandırma

Page 5: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

PHP DosyalarıPHP kodlarını barındıran dosyalar, basit metin dosyalarından farklı değillerdir. Sadece uzantı

olsarak “.php”, “.php3”, “.php4” veya “.php5” gibi ifadeler kullanırlar. Ancak; genellikle “.php” uzantısı kullanılır.

PHP dosyalarını yazmak veya düzenlemek için bütün Microsoft Windows işletim sistemleri içerisinde standart olarak bulunan “Not Defteri” uygulaması kullanılabilir. Ancak; bu uygulama kodlarda renklendirme yapmayacağı için biz ders boyunca, “Notepad++” uygulamasından yararlanacağız. Notepad++ uygulamasını, http://notepad-plus-plus.org adresini ziyaret ederek veya buraya tıklayarak edinebilirsiniz. Kurulum aşamasında her ekranda “Next (İleri)” düğmesine tıklamanız yeterli olacaktır.

Notepad++ uygulaması ilk çalıştırıldığı zaman ekranda oluşacak görüntü aşağıdaki gibi olacaktır.

Resim 1.1: Notepad++ uygulamasının ekran görüntüsü

Dil KodlamasıTürkçe dilinde mevcut bulunan “ö,ç,ü,ş,ı,ğ” gibi özel karakterlerin kaydettiğimiz sayfalarda

doğru görüntülenebilmesi için dosyaların dil kodlamasının UTF8 olarak seçilmiş olması gerekmektedir. Dil kodlamaları sayfa içerisinde görüntülenmese de sadece işletim sistemleri ve

uygulamaların görebileceği dosyanın başlık kısmında yer almaktadır. Geliştirilen her PHP sayfası öncelikle mutlaka karakter kodlaması seçilerek yazılmaya başlanmalıdır. Aksi takdirde; dil kodlaması sonradan değiştirilen dosyaların içinde mevcut bulunan karakterler bozulabilir. Bu bozulmanın geri dönüşü ise mümkün olmayacaktır.

Notepad++ uygulaması ile bir dosyanın karakter kodlamasını UTF8 yapabilmek için, uygulamanın üst panelinde yer alan “Kodlama” menüsünden “UTF-8 Kodlaması (BOM’suz)” seçeneğine tıklanmalıdır. Bu durumu gösteren ekran görüntüsü aşağıdaki gibi verilebilir.

Page 6: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 1.2: Dil kodlamasının seçilmesi

Dosyaların KonumuPHP dosyalarını bilgisayardaki herhangi bir dizine kaydederek çalıştırılması ancak bazı

düzenlemeler yapıldıktan sonra mümkündür. WampServer kurarak PHP uygulamalarını çalıştıracak bir geliştiricinin dosyalarını “C:\wamp\www” klasörüne kaydetmesi gerekir.

WampServer uygulamasının belirlediği “C:\wamp\www” dizininde mevcut olarak “index.php” ve “testmysql.php” dosyaları yer almaktadır. Bu dosyaları silerek kendi dosyalarınıza ulaşmanızı kolaylaştırabilirsiniz.

Ayrıca; Notepad++ uygulaması ile PHP dosyalarızı kaydederken; Ctrl+S tuş kombinasyonunu kullanabilirsiniz. Bu esnada karşınıza çıkan pencerede yer alan “Dosya adı” kutucuğuna dosya adından sonra mutlaka “.php” uzantısı eklemeyi unutmayınız. Örneğin; dosya adı olarak “ata-aof” kullanacaksanız. Kayıt ekranında “ata-aof.php” yazmanız gerekmektedir. Aksi takdirde dosyanız metin dosyası olacağı için PHP kodlarını çalıştırmak yerine gösterecektir. Kayıt ekranın gösteren ekran görüntüsü aşağıdaki kısmı içerecektir.

Resim 1.3: Kayıt ekranın dosya adı kısmı

Eğer dilerseniz, dosya adına “.php” uzantısı eklemek yerine, “Kayıt türü” olarak “PHP Hypertext Processor file (*.php,*.php3,*.php4)” seçebilirsiniz. Bu seçimin yapıldığı durumlarda Notepad++ uygulaması dosya uzantısı olarak “.php” ilavesini kendisi yapacaktır.

Dosyaların ÇalıştırılmasıPHP dosyalarına yazılan kodların çalıştırılması için internet tarayıcısı kullanmak gerekir.

Geliştirici bilgisayarına yüklü olan herhangi bir internet tarayıcısını kullanarak PHP kodlarını çalıştırabilir.

WampServer kurduktan sonra ekranın sağ alt köşesine gelen simgenin rengi yeşil olması halinde bütün servislerin doğru çalıştığı söylenebilir. Bu durumda internet tarayıcısının adres kısmına “localhost” yazılarak yerel sunucuda var olan dosyalar görüntülenebilir. Bu ekranda görüntülenen dosyalar aslında “C:\wamp\www\” dizinindeki dosyalardır.

Page 7: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Bir önceki konuda kaydettiğimiz “ata-aof.php” dosyasını ve dizinde bulunan diğer dosyaları tarayıcıda görüntülediğimizde elde edeceğimiz ekran görüntüsü aşağıdaki gibi olacaktır (bir önceki konuda belirttiğimiz gibi “index.php” ve “testmysql.php” dosyaları silinmiş olmalıdır).

Resim 1.4: Yerel sunucudaki dosyaların listelenmesi

Tarayıcıda listelenen mavi renkli bağlantılar dizindeki dosyaları temsil etmektedir. Bu dosyaya tıklanması halinde içerdiği PHP kodları çalıştırılacak ve ekran görüntüsü oluşturulacaktır.

EtiketlerWeb Tasarımın Temelleri dersinden hatırlanacağı üzere internet sayfaları hazırlanırken

kullanılan elementlerin etiketleri bulunmaktaydı. Etiketler yardımıyla HTML sayfası içerisinde bulunan objelerin resim, metin veya çerçeve olduğunu tanımlamak mümkündü. Örneğin; bir paragraf metni, <p> ve </p> etiketleri arasında yer almaktaydı.

PHP kodlarını içeren etiketler HTML dilindekine yakın yapıdadır. Bu etiketler <?php ve ?> olarak başlar ve sonlanır. Bütün PHP kodları bu etiketler arasında olmak zorundadır. Aksi takdirde internet tarayıcısında kodların çalışması sonucu oluşan değerler değil; bizzat kodların kendisi görüntülenecektir.

Resim 1.5: PHP etiketleri

Resim 1.5 örneğinde boş bir PHP sayfasında olması gereken kodlar yer almaktadır. Sayfa içerisinde renklendirmenin aktif olması için .php uzantısı ile kaydedilmiş olması şarttır.

Ekran ÇıktısıPHP kodlarında ekran çıktısı almak için “echo” ve “print” komutları kullanılabilir. Bu kodlar

arasında yapılan testlerde “echo” komutunun daha hızlı çalıştığı görülmüştür. Ancak; bu seviyedeki hız farkları ancak çok yoğun işlemlerde ortaya çıkabilir.

Daha önce kaydettiğimiz “ata-aof.php” sayfasında bir ekran çıktısı almak için aşağıdaki kodlar yazılabilir.

Page 8: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 1.6: Ekran çıktısı örneği

Yukarıdaki örnekte yer alan kodların tarayıcıda oluşturacağı görüntüyü izlemek için, tarayıcının adres satırına http://localhost/ata-aof.php yazılacak olursa; aşağıdaki izleme yapılabilir.

Resim 1.7: Örnek dosyanın tarayıcıdaki ekran görüntüsü

HATA TAKİBİGeliştirme aşamasına kullanıcıların karşılaştığı hatalar PHP tarafından tarayıcı ekranına

yansımaktadır. Aşağıdaki görüntüde PHP tarafından verilmiş bir hata yer almaktadır.

Resim 1.8: PHP hata görüntüsü

Resim 1.8’de görülen hatada; son kelime olarak “line 3” yer almaktadır. Bu kısımda hata olan dosyanın üçüncü satırına bakılması gerekmektedir. Hata olan dosya ise hemen bir önceki ifade olan “D:\wamp\www\ipu1\ata-aof.php”’dir. Dosyanın görüntüsü ise aşağıdaki gibidir.

Resim 1.9: Hata olan dosyada yer alan kodlar

Resim 1.9’a dikkat edilecek olursa; 2. satırın sonunda eklenmesi gereken noktalı virgül (;) işareti görülememektedir. Bu durum ise üçüncü satırın hatalı okunmasına neden olmakta ve uygulamanın ilerleyişinin önüne geçmektedir.

Page 9: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Hataların GizlenmesiPHP, kodlama sırasındaki bütün hatlarda uygulamanın ilerleyişini durdurmaz. Bu nedenle

hatları gizlemek için birden fazla metod kullanılabilir. Bu metodlar, genel ve fonksiyon bazlı olarak iki şekilde ele alınabilir.

Genel hataların gizlenmesiSayfa içerisinde oluşan hataların kullanıcıya gösterilmesinin önüne geçilmesi için kullanılabilir.

Ancak; bu kodun uygulamanın yayınlanması aşamasında sayfanın ilk satırına eklenmesinde fayda vardır. Aksi takdirde hatalar gizleneceği için geliştirici de çözüme ulaşmada zorlanabilir.

Aşağıda yer alan görselin 2. Satırında yer alan “error_reporting(0);” foksiyonu hataların gizlenmesini sağlamaktadır.

Resim 1.10: Hata engelleme fonksiyonunun kullanılması

Fonksiyon hatalarının gizlenmesiHatalar sadece fonksiyon bazında da gizlenebilir. Bu kullanım şeklinde hatası gizlenecek olan

fonksiyonun adının önüne “@” işareti eklenerek gizleme işlemi yapılabilir. Bu kullanım; genel hata gizlemeye göre daha yaygındır. Aşağıdaki görselde “mysql_query” fonksiyonunun üreteceği hatalar gizlenmiştir.

Resim 1.11: Fonksiyon hatasının gizlenmesi

DEĞİŞKEN TANIMLAMABu bölümde sayısal veya metin tipi değişken tanımlama, değişken tanımlarken uyulması

geren kurallar açıklanmaktadır.Değişken tanımlarken her zaman $ karakteri ile başlamalı daha sonra değişken ismini

yazmalıyız. Değişken isimlendirirken değişken içerisindeki veriyi göz önünde bulundurmalıyız. Örneğin değişken içerinde adres barındırıyorsak değişkenimizin isminin adres olması değişkenin içeriğinin ne olduğunu anlamamız kapsamında bize fayda sağlayacaktır.

Resim 2.1: Değişken tanımlama

Yukarıdaki örnekte değişken tanımlanmıştır.

Değişken Tanımlarken Uyulması gereken kurallar

Page 10: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Değişken tanımlarken sayı ile başlanmaz. Ancak daha sonra kullanılabilir.

Resim 2.2: Değişken tanımlarken uyulması gerek kurallar-1

Değişken tanımlanırken _ (alt tire) haricindeki özel karakterler ( ?, -, *, ! gibi ) ve boşluk

karakteri kullanılmaz.

Resim 2.3: Değişken tanımlarken uyulması gerek kurallar-2Değişken tanımlarken Türkçe karakterlerin kullanılması çıkabilecek problemlerden dolayı

önerilmez. Küçük “i” veya büyük “I” harfinin kullanılmasında herhangi bir sakınca yoktur.

Resim 2.4: Değişken tanımlarken uyulması gerek kurallar-3

Değişken isimleri küçük büyük harf duyarlılığı vardır.

Resim 2.5: Değişken tanımlarken uyulması gerek kurallar-4

Page 11: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 2.6: Değişken tanımlarken uyulması gerek kurallar-5

Yukarıdaki birinci örnekte $ad isimli değişkeni önce “Ahmet” değeri atanmış daha sonra “Mehmet” değeri atandığı için değişkenin daha önceki değeri hafızadan silinmiştir. Ekrana sadece “Mehmet” yazılmıştır.

Yukarıdaki ikinci örnekte ise $ad ve $Ad isminde iki değişken tanımlanmıştır. Bu iki değişken ismi arasındaki tek fark; birinin büyük harf ile başlamasıdır. İki değişkenin isimleri birbirlerini yakın gibi gözüksen de PHP bu iki değişkeni birbirinden bağımsız iki farklı değişken olarak algılamaktadır. Bundan dolayı $ad değişkeninin değeri hiçbir değişime uğramadan ekrana yazdırılmıştır.

Değişken TipleriPHP’de değişken tanımlarken değişkenin tipini belirtmek zorunluluğu bulunmamaktadır.

Değişkene atanan değer değişkenin tipini belirler.

Sayısal Tipi Değişkenler1. Tamsayı (integer): Negatif ve pozitif tamsayılardan oluşur.

Resim 2.7: Sayısal tipi değişken tanımlama-1

2. Ondalık sayı (double): Negatif, pozitif ve ondalık sayılardan oluşur. Sayının ondalık kısmını ayırmak için “.” nokta kullanılır.

Resim 2.8: Sayısal tipi değişken tanımlama-2

Metin Tipi Değişkenler Bu tip değişken tanımlarken metni tek tırnak (‘) veya çift tırnak (“) içerisinde yazılması gerekir.

Metin içerisinde özel karakterler ( ?, -, *, ! gibi ) kullanılabilir. Ancak metinde tırnak işareti var ise öncesinde ters taksim (\) işareti kullanılmalıdır.

Page 12: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 2.9: Metin tipi değişken tanımlama

Mantıksal Veri Tipi DeğişkenlerBu tur değişkenlerin sadece iki değeri olabilir. Bunlar; true (doğru yani 1) veya false (yanlış

yani 0) tur.

Resim 2.10: Mantıksal veri tipi değişken tanımlama

SabitlerSabitlerin amacı da aynı değişkenler gibi hafızada veri tutmaktır. Sabitler içerisinde tamsayı

(integer), ondalık sayı (double), metin (string) veya matıksal veri tipini barındırabilirler. Değişkenlerden farklı olarak adlandırılırken $ işareti kullanılmaz ve sabitlere atanan değerler daha sonradan değiştirilemez. Sabitler genel (global) değişken oldukları için tanımlandıktan sonra herhangi bir yerden erişilebilir. Sabitlerin tanımlanması değişkenlerden biraz daha farklıdır.

Tanımlama şekli: define(“sabit_adi”, “sabit değeri”)Kullanım şekli: sabit_adi

Sabit tanımlarken sabit adını tırnak (“) işaretleri arasında yazılmalı ve değişken tanımlarken uyulması gerek kurallara uyulmalıdır. Tanımlanan sabiti çağırırken başına $ veya tırnak (“) işareti arasına yazılmadan sadece sabit adını yazmamız yeterlidir.

Resim 2.11: Sabit tanımlama

Yukarıdaki örnekte dikkat edilmesi gereken şey sabit değişkenimizi çağırırken ilk karakter olarak $ kullanılmamıştır.

Page 13: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Veri Tipini Bulma ve DönüştürmeProgram yazarken programın içerisindeki değişkenlerin tiplerinin neler oldukları çoğunlukla

bilinir ancak; gelen veri dış kaynaklıysa veya program kod satırı çok fazla ise bu gibi durumlarda değişkenin içerisinde bulunan değerin tipini öğrenmek isteyebiliriz. PHP’de veri tipini öğrenmek için gettype() fonksiyonu kullanılır.

Kullanım şekli: gettype(değişken adı)

Resim 2.12: Değişken tipi bulma

Gettype fonksiyonundan dönebilecek değerler;

Tablo 2.1: gettype() fonksiyonundan dönebilecek değerlerdeğer açıklamastring Metin tipi değişkeninteger Tamsayı tipi değişkendouble Ondalık sayı tipi değişkenarray Dizi tipi değişkenobject Nesne tipi değişkenclass Sınıf tipi değişkenboolean True / False türü değişken

Değişken tipini öğrenmek bir başka fonksiyon ise var_dump() fonksiyonudur. Fakat bu fonksiyon gettype() fonksiyonunda olduğu için bir dönüş yapmadan değişkenin tipini ve değerini ekrana yazdırır.

Resim 2.13: Değişken tipi bulma

Bazen tanımlanan değişkenlerin tipinin başka bir tipe dönüşmesi gerekebilir. PHP’de bu durumda settype() fonksiyonu kullanılır. Bu dönüşüm sırasında değişken değeri dönüştüğü değişken tipine göre değişime uğrayabilir. Unutulmaması gereken şey ise; veri tiplerinin farklı özellikteki verileri barındırdıkları için dönüşüm sırasında veri kaybı yaşanabilir.

Kullanım şekli: settype(değişken adı, değişken tipi)Değişken tipi olarak gettype() fonksiyonundan gelebilecek değerler kullanılır. Değişken tipi tırnak (“) işareti arasında yazılması gerekmektedir.

Page 14: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 2.14: double (ondalık) tipi değişkeni integer (tamsayı) tipi değişken dönüştürme.

Yukarıdaki örnekte double tipi değişkeni integer tipi değişkene döndürdüğümüzde sayının ondalık kısmının atıldığını görüyoruz. Bunun nedeni integer içerisine sadece tam sayıları barındırabilen bir değişken tipi olmasıdır.

Resim 2.15: farklı tip değişkenleri boolean tipi değişkene dönüştürme.

Metin (string) tipi bir değişkeni tamsayı (integer) tipi bir değişkene dönüştürülmek istendiğinde eğer metin (string) değişkeni rakam ile başlıyorsa rakamların bittiği karaktere kadar olan kısım tamsayı (integer) tipi değişkene dönüştürülür ve geriye kalan kısım atılır. Eğer metin (string) tipi değişken değeri rakam ile başlamıyor ise sonrasında rakam olsa dahi sonuç “0” sıfır olacaktır.

Resim 2.16: farklı tip değişkenleri boolean tipi değişkene dönüştürme.

Yukarıdaki örnekte bir tane metin bir tane de sayısal tip değişkeni boolean tipi değişkene dönüştürdüğümüzde ikisinin de sonucu “1” yani “true” oldu. Bunun nedeni; harhangi bir tipteki değişkeni boolean tipi değişkene dönüştürdüğümüzde eğer değişken boş veya “0” sıfır değilse her

Page 15: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

zaman “1” yani “true” sonucunu döndürür. Eğer değişken içeriği boş veya “0” sıfır false yanıtı döndürür.

OPERATÖRLEROperatörler bir veya daha fazla değeri alıp işleyerek bize döndüren özel karakterlerdir.

Aritmetik OperatörlerBu tür operatörler basit matematiksel işlemler yapmak için kullanılır. Bu operatörler kullanılır

%E%Fken dikkat edilmesi gereken şey; matematik işlemlerdeki işlem önceliği burada da geçerlidir. Yani ilk önce parantez var ise parantez içerisi daha sonra çarpma, bölme ve mod alma en son toplama ve çıkarma işlemi yapılır.

Tablo 2.2: Aritmetik operatörler ve kullanımları operatör açıklama kullanımı+ Toplama işlemi $sayi1 + $sayi2- Çıkarma işlemi $sayi1 - $sayi2* Çarpma işlemi $sayi1 * $sayi2/ Bölme işlemi $sayi1 / $sayi2% Mod (bölümden kalan) alma işlemi $sayi1 % $sayi2

Aritmetik operatörler sabit değerler arasında kullanılabileceği gibi değişkenler arasında da kullanılabilir.

Resim 2.17: Aritmetik operatör kullanımı.

Yukarıdaki örnekte ilk satırda $sayi1 değişkeni tanımlanarak 27 – 7 işleminin değeri yani 20 atandı. İkinci satırda ise $sayi2 değişkeni tanımlanarak 10 değeri atandı. Üçüncü satırda ise $sonuc adlı değişken tanımlanarak ilk önce $sayi1 ile $sayi2 değerleri toplandı “30” otuz değeri elde edildikten sonra “30” değerinin 4 ile bölümünden kalan “2” iki değeri $sonuc değişkenine atandır. Son olarak $sonuc değişkeni “2” ikiye bölünerek ekrana “1” bir değeri yazıldı.

Metin (string) Birleştirme OperatörüMetin birleştirme operatörü iki metin tipindeki değişkeni yan yana toplanması için kullanılır.

Bu operatörü kullanmak için “.” Nokta karakteri kullanılır.

Page 16: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 2.18: Metin operatörünün kullanımı.

Yukarıdaki örnekte $sehir adında değişkene “ERZURUM” değer atanarak tanımlandıktan sonra ekrana yazdırılarak alt satıra geçilmiştir. Daha sonra $isim adındaki değişkene “Ahmet” tanımlandıktan sonra ekrana yazdırılarak alt satıra geçilmiştir. En son $sehir değişkeninin yanına “ “ boşluk karakteri ve $isim değişkeninin değeri eklenerek ekrana yazdırılmıştır.

Bileşik Atama OperatörleriBileşik atama bir değerin üzerinde işlem yapıp bu değeri değişkene atamak için kullanılan

operatörlerdir.

Resim 2.19: Metin operatörünün kullanımı.

Yukarıdaki örnekte $sayi1 değişkeni 5 değeri atanarak tanımlanmıştır. İkinci satırda $sayi1 değişkene $sayi1 + 10 değeri atanmıştır. Bu işlemde yapılan; $sayi1 değişkenini 10 artırıp sonucu tekrar $sayi1 değişkenine atanmasıdır. Bu işlem sonucunda $sayi1 değişkeninin son değeri yani 15 ekrana yazılmıştır. Bu işlemi daha kısa yoldan yapımı ise $sayi2 değişkeni üzerinden gösterilmiştir.

Bileşik atama operatörü “=” eşittir karakterinden önceki operatör toplama işareti ise değişkenin ilk değerine “=” eşittir karakterinden sonraki değeri ekler, çıkarma işlemi ise çıkarır, bölme işlemi ise böler çarpma işlemi ise çarpar sonucunu değişkene atar.

Tablo 2.3: Bileşik atama operatörleri. Tablodaki $sayi değişkeninin ilk değeri 10 olarak varsayılmıştır.operatör kullanımı yapılan işlem sonuç+= $sayi += 5 $sayi = $sayi + 5 15-= $sayi -= 5 $sayi = $sayi - 5 5*= $sayi *= 5 $sayi = $sayi * 5 50/= $sayi /= 5 $sayi = $sayi / 5 2

Page 17: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Artırma ve eksiltme operatörleriArtırma operatörleri değişken değeri “1” artırmak veya azaltmak için kullanılan

operatörlerdir. Operatör artırmak için “++” eksiltmek içinse “--“ karakterlerini kullanmaktadır. Eğer operatör değişkenin sonuna eklenirse artırma veya eksiltme işlemi o satırdan sonra geçerlidir önüne konursa o satırdan itibaren geçerlidir.

Resim 2.20: Artırma operatörü

Yukardaki örnekte $sayi1 değişkeni ilk “12” on iki olarak tanımlanmıştır. Daha sonra $sayi1 değişkenini “1” bir artırmak için “++” operatörü değişkenden sonra kullanılarak değişken ekrana yazdırılmıştır. Ekrana yazdırılan değer değişkenin ilk değeri ile aynı olmasının nedeni “++” operatörünü değişkenden sonra yazılmasıdır. $sayi1 değişkeni hiçbir değişiklik uğramadan alt satırda tekrar ekrana yazdırıldığında ilk değerinden “1” fazlası olan 13 değeri ekrana yazılmıştır.

İkinci örnekte $sayi2 değişkeni $sayi1 değişkeni ile aynı işlemler uygulanmış ancak “++” operatörü değişkenden önce kullanıldığı için artırma işlemi operatörün yazıldığı satırda gerçekleşmiştir.

Resim 2.21: Eksiltme operatörü

Yukarıdaki örnekte eksiltme operatörü örneği verilmiştir.Bir sayının “1” bir ile çarpımı veya bölümü kendisini verdiği için bölme veya çarpma operatörü

yoktur.

Page 18: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Karşılaştırma OperatörleriKarşılaştırma operatörleri iki veriyi eşit, denk veya farklı olması gibi durumları değerlendirerek

boolean (true/false) türünde değer döndürürler. Bu konun 4.Ünite de daha detaylı olarak anlatılacaktır.

DİZİLER VE DİZİ İŞLEMLERİBu bölümde dizilerin kullanımını, farklı tanımlama şekillerini ve dizi fonksiyonlarının kullanımı

anlatılacaktır.Diziler adlandırılırken değişkenlerde olduğu gibi $ karakteri ile başlar ve değişken

adlandırılırken uymamız gereken kurallar diziler için de geçerlidir. Dizilerin tanımlanması birkaç yöntemle yapılabilmektedir. PHP’de diğer programla dillerinde pek rastlanmayan bir dizi içerisinde metin, sayı ve mantıksal tipteki değeri aynı anda tutabilme imkanı vardır.

En basit hali ile dizi tanımlama aşağıda verilmiştir.

Resim 3.1: Dizi tanımlama

Dizi Tanımlarken Uyulması Gereken Kurallar1. Dizi tanımlanırken sayı ile başlanmaz. Ancak daha sonra kullanılabilir.2. Dizi tanımlanırken _(alt tire) haricinde özel karakterler ve boşluk kullanılmaz.3. Dizi tanımlarken Türkçe karakterlerin kullanılması çıkabilecek problemlerden dolayı

önerilmez. Küçük “i” veya büyük “I” harfinin kullanılmasında herhangi bir sakınca yoktur.4. Değişken isimleri küçük büyük harf duyarlılığı vardır. $gunler ile $gunleR değişkenleri farklı

değişkenlerdir.

Resim 3.2: Diziler tanımlarken uyulması gerek kurallar.

Dizi çağırılırken dizinin adı yazıldıktan sonra “[]“ köşeli parantez içerisine dizinin kaçıncı

elamanını çağırmak istiyorsak o rakamı yazılması gerekir. Dizilerin eleman sırası “1” birden değil “0” sıfırdan başlar. Köşeli parantez içerisine yazılan değere dizinin eleman sırası (index) denir.

Resim 3.3: Dizi elemanını çağırma

Programlama dillerinin genelinde bir diziye sadece tek tip veri tanımlanabilir. PHP’nin esnek yapısı sayesinde farklı tip verileri tek diziye tanımlanabilir.

Page 19: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 3.4: Farklı tip verileri tek dizi içerisin tanımlama

DİZİ TANIMLAMA METOTLARIPHP’de birçok dizi tanımlama şekli vardır. Diğer dizi tanımlamaları örneklerler aşağıda

verilmiştir.Aşağıdaki örneklerin hepsinde farklı yollarla $gunler adlı dizinin ilk elemanına “Pazartesi”

ikinci elemanına “Salı” değeri atanmıştır. Daha sonra ekrana $gunler dizisinin ikinci elemanını (dizilerde sıralama “0” sıfırdan başladığı için “1” yazdık) ekrana yazdırılmıştır.

Resim 3.5: Dizi tanımlama şekilleri-1

Resim 3.6: Dizi tanımlama şekilleri-2Dizi adını yazıp köşeli parantez “[]” içerisine değer atamak istediğimiz elamanın sırasını

(index) yazarak diziyi tanımlayıp değer atabiliriz.

Resim 3.7: Dizi tanımlama şekilleri-3

PHP’de dizinin index değerinin belirtilme zorunluğu yoktur. Eğer dizinin index değeri verilmemişse index değeri otomatik olarak sıradaki sayı olur. Dizi daha önceden tanımlanmamışsa index değeri “0” sıfır olur.

Page 20: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Yukarıdaki örnekte $gunler[] = “Pazartesi” yazılan satırın üstünde $gunler adında dizi tanımlanmadığı için $gunler dizisinin “0” sıfırıncı index değeri “Pazartesi” oldu. $gunler[] = “Salı” yazılan satırın üstünde $gunler dizisi tanımlanıp “0” sıfırıncı index atandığı için $gunler dizisinin “0” sıfırdan sonraki sayı olan “1” birinci index değeri “Salı” olmuştur.

Dizi adını yazıp köşeli parantez “[]” köşeli parantez içerisine hiçbir değer yazmazsak; eğer daha önceki satırlarda dizi tanımlanmamışsa dizinin “0” sıfırıncı, tanımlanmışsa sıradaki elemana değer atanır.

Resim 3.8: Dizi tanımlama şekilleri-4

PHP’de dizilerin index değerlerinin sayısal bir değer olması zorunluluğu yoktur.

Resim 3.9: Dizi tanımlama şekilleri-5

Resim 3.10: Dizi tanımlama şekilleri-6

Çok Boyutlu DizilerÜnitenin başında dizileri değişken grupları olarak tanımlamıştık. Grupları kendi içinde

gruplarsak çok boyutlu diziler elde etmiş oluruz.

Page 21: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 3.11: iki boyutlu dizi örneği

Yukarıdaki örnekte iki boyutlu dizi örneği verilmiştir. Dizinin boyutunu öğrenmek için dizide en fazla kaç tane köşeli parantez olduğuna bakılması gerekir. Yukarıdaki örnekte köşeli parantez “[]” en fazla iki olduğu için dizinin boyut sayısı “2” ikidir.

Farklı bir bakış açısı olarak dizileri tablolara benzetebiliriz.Aşağıdaki Resim 3.11’de tek boyutlu bir dizinin tabloya benzetildiğinde nasıl bir görünüm

oluşacağı örneği verilmiştir.

Resim 3.12: Tek boyutlu dizinin tabloya benzetimi

Resim 3.13: iki boyutlu dizi örneği

Page 22: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Tek boyutlu bir diziyi tabloya benzettiğimizde tabloda sadece satırlardan oluştuğunu önceki örneğimizde görmüştük. Eğer dizimiz iki boyutlu ise satırları bir boyut kolonları da ikinci bir boyut olarak algılayabiliriz.

DİZİ FONKSİYONLARI

count()Dizi içerisinde kaç eleman olduğunu öğrenmek için kullanılan fonksiyondur. Dönüş olarak

sayısal bir değer döndürür.Kullanımı: count(dizi)

Resim 3.13: count fonksiyonu

array_merge()Bu fonksiyona iki veya daha çok diziyi birleştirmek için kullanılır. Kullanımı: array_merge(dizi_1, dizi_2, dizi_3, ….., dizi_n)

Resim 3.14: array_merge fonksiyonu

Yukarıdaki örnekte $dizi_1 ve $dizi_2 dizileri değer atanarak tanımlanmış $yeni_dizi ise içeriği boş olarak tanımlanmıştır. Daha önceden öğrenmiş olduğumuz count() fonksiyonunu $yeni_dizi dizisinin eleman sayısını ekrana yazdırdığımızda ekrana “0” yazılmıştır. Daha sonra array_merge() fonksiyonu ile $dizi_1 ve $dizi_2 dizilerinin $yeni_dizi dizisinde birleştirip ekrana dizinin eleman sayısını yazdırdığımızda ekrana “5” yazılmıştır.

array_push()Bu fonksiyon dizinin sonuna eleman veya elemanlar eklemek için kullanılır.Kullanımı: array_push(dizi, eleman_1, eleman_2, eleman_n)

Page 23: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 3.15: array_push fonksiyonu

Yukardaki örnekte önce 3 elemanlı bir dizi tanımlanmış ve eleman sayısı ekrana yazdırılmıştır. Daha sonra bu dizinin sonuna iki array_push fonksiyonu ile iki eleman daha eklenmiş, eleman sayısı ekrana yazdırılmıştır.

array_shift()Bu fonksiyon dizinin ilk elamanını silmek için kullanılır. Dizinin ilk elemanı silindikten sonra

dizinin index değerleri tekrar sıfırdan sıralınır. Yani index değeri “1” olan “0” olur, “2” olan “1” olur ve bu böyle devam eder.

Kullanımı: array_shift(dizi)

Resim 3.16: array_shift fonksiyonu

Yukarıdaki örnekte üç elemanlı dizi tanımlanıp dizinin ilk elemanı ekrana yazdırıldıktan sonra dizinin ilk elemanı silinerek tekrar dizinin ilk elemanı ekrana yazdırılmıştır.

array_unshift()Bu fonksiyon array_push fonksiyonunda olduğu gibi diziye yeni eleman eklemek için kullanılır.

Fakat array_push fonksiyonu elemanı dizinin sonuna eklerken array_unshift ise dizinin başına ekler.Kulanımı: array_unshift(dizi, eleman_1, eleman_2, ……, eleman_n)

Page 24: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 3.16: array_unshift fonksiyonu

Yukardaki örnekte üç elemanlı bir dizi tanımlanmış ve dizinin birinci (“Ahmet”) elemanı ve ikinci (“Mehmet”) elemanı ekrana yazılmıştır. Daha sonra diziye iki eleman (“Ayşe”, “Fatma”) daha eklenmiştir. Ekleme işlemi array_unshift ile yapıldığından dolayı elemanlar dizinin başına eklenmiştir.

in_array()Bu fonksiyon verilen bir değerin dizinin değerleri içerisinde olup olmadığını kontrol eder.

Büyük küçük harf duyarlılığı vardır. Sadece mantıksal ifade olan true/false cevaplarından birini döndürür. Cevap true ise aranan değer dizi içerisinde vardır false ise yoktur.

Kullanımı: in_array(aranacak değer, aranacak dizi)

Resim 3.16: array_unshift fonksiyonu

Yukardaki örnekte üç elemanlı bir dizi tanımlanarak in_array fonksiyonu ile önce “Ahmet” daha sonra da “Fatma” kelimeleri dizi içerisinde aranmıştır. Sonuç ekrana yazdırıldığında “Ahmet” kelimesi dizinin içerisinde olduğu için ekrana “1” bir yazılmıştır. “Fatma” kelimesi olmadığı için ekrana hiç bir şey yazılmamış. Daha sonra dönen değer daha önceki ünite gördüğümüz var_dump fonksiyonu ile ekrana yazdırılmıştır.

array_searchBu fonksiyonda in_array fonksiyonunda olduğu gibi dizi değerleri içerisinde arama yapar fakat

dönüt olarak dizinin index değerini döndürür. Eğer dizi içerinde aranan değer bulunamazsa false döndürür. Büyük küçük harf duyarlılığı vardır.

Kullanımı: array_search(aranacak değer, aranacak dizi)

Page 25: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 3.17: array_search fonksiyonu

array_sliceBu fonksiyon dizi içerisinde belirli index değerlerinin alınması sağlar. Dikkat edilmesi gereken

husus index değerlerinin “0” sıfırdan başlamasıdır.Kullanımı: arra_slice(dizi, başlangıç değeri, bitiş değeri)

Resim 3.18: array_slice fonksiyonu

sort()Bu fonksiyon dizi içerindeki verinin alfabetik olarak a dan z ye doğru sıralanmasını sağlar. Eğer

dizi içerindeki veriler sayı ise sayıları küçükten büyüğe doğru sıralar.Kullanımı: sort(dizi)

Resim 3.19: sort fonksiyonu

Page 26: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

rsort()Bu fonksiyon dizi içerindeki verinin alfabetik olarak z den a ya sıralanmasını sağlar. Eğer dizi

içerindeki veriler sayı ise sayıları büyükten küçüğe doğru sıralar.Kullanımı: rsort(dizi)

Resim 3.20: rsort fonksiyonu

reset()Bu fonksiyon dizinin sadece ilk elamanını yani “0” sıfırıncı elamanını almamızı sağlar.Kullanımı: reset(dizi)

Resim 3.21: reset fonksiyonu

implode()Bu fonksiyon bir dizinin içerisindeki değerleri arasına bizim belirlediğimiz bir karakter koyarak

metin (string) haline dönüştürmeye yarar.Kullanımı: implode(ayrıştıracak karakter, dizi)

Resim 3.22: implode fonksiyonu

explode()Bu fonksiyon implode fonksiyonunu tam tersi işlem yapmaktadır. Metin (string) olan bir

ifadeyi belirlediğimiz bir karaktere göre parçalayıp dizi oluşturmamızı sağlar.Kullanımı: explode(ayrıştıracak karakter, metin)

Page 27: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 3.23: explode fonksiyonu

IF YAPISI IF yapısı en basit hali ile verilen şart doğru ise bir dizi işlemin yapılmasıdır.Kullanımı: if(kosul){ yapılacak işlem }

Resim 4.1: if yapısı

Yukardaki örnekte $kosul değişkenine true (doğru) değeri atandığı için if koşulundan sonraki süslü parantez “{}” içerisindeki kod satırlarını çalıştırdı.

Resim 4.2: if yapısı

Yukardaki örnekte $kosul değişkeninin değeri false (yanlış) olduğu için if koşulundan sonraki süslü parantez “{}” içerisindeki kod satırı çalıştırılmadı.

KARŞILAŞTIRMA OPERATÖRLERİ2. Ünitemizde karşılaştırma operatörlerinden bahsetmiştik. Karşılaştırma operatörleri iki veya

daha çok veriyi belirleyeceğimiz şarta göre karşılaştırıp bize true/false (doğru/yanlış) tipi veri döndüren yapılardır.

Bu operatör kullanmak için iki verinin arasına operatörü yazmak yeterlidir.Karşılaştırma operatörlerinin listesi aşağıdaki listede verilmiştir.

Page 28: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Tablo 4.1. Karşılaştırma operatörlerioperatör açıklama== Eşitse=== Denkse<> Eşit değilse!= Eşit Değilse (<> operatörü ile aynıdır)!== Denk değilse< Küçükse> Büyükse<= Küçük veya Eşitse>= Büyük veya Eşitse

Tablo 4.3. Karşılaştırma operatörlerinin kullanımı

Yukardaki örnekte $değer_1 değişkenine “5 > 4” ifadesi değer olarak atanmıştır. Bu ifadenin anlamı beş (5), dört (4) ten büyükse $deger_1 değişkeninin değeri true “doğru” olsun. Beş (5), dört (4) ten büyük olduğu için $deger_1 değişkeninin değeri true “doğru” dur. $deger_2 değişkenine atanan karşılaştırma operatörü (“5<4”) doğru olamadığı için yani beş (5) dört (4) ten küçük olmadığı için $deger_2 değişkeninin değeri false “yanlış” tur.

KARŞILAŞTIRMA OPERATÖRLERİ İLE IF YAPISI Karşılaştırma operatörleri verileri karşılaştırıp bize true/false (doğru/yanlış) cevabı

döndürdüğü için biz bu operatörleri IF yapısında kullanabiliriz. O zaman IF yapısı içerisinde karşılaştırma operatörlerinin kullanarak işlem yapabiliriz.

Aşağıdaki örnekte $sayi adlı bir değişken tanımlanmıştır. IF yapısı içerinde karşılaştırma operatörü olan büyüktür “>” kullanılarak koşul yerine $sayi > 5 yazılmıştır. $sayi > 5 karşılaştırma operatöründen cevap olarak $sayi değişkeni beş (5) ten büyük olduğu için true dönecektir. Koşul sağlandığı için süslü parantezler içerisindeki kod satırı veya satırları çalıştırılacaktır.

Resim 4.4: Karşılaştırma operatörleri bulunduran if yapısı kullanımı

Page 29: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Karşılaştırma operatörleri listede verilen operatörlerin açıklamaları verilse de denklik ile eşitlik birbirlerine benzedikleri için karıştırılabilmektedir. PHP’de denk ile eşittir arasındaki fark denk operatörünü “===” kullandığımızda cevabın true (doğru) dönebilmesi için verilerin tipinin de aynı olması gerekir.

Resim 4.5: Denk ve eşittir arasındaki fark-1

Yukardaki örnekte $sayi değişkenine sayı (integer) tipi olan üç (3) değeri atanmıştır. İlk IF yapısında ise $sayi değişkeni metin (string) tipi üç (3) ile eşittir “==” operatörü kullanılarak karşılaştırıldığı için IF koşulundaki işlemler gerçekleşmiştir. Ancak ikinci IF yapısında karşılaştırma denklik “===” operatörü ile yapıldığı için IF koşulu gerçekleşmemiş ve işlemler yapılmamıştır.

Resim 4.6: Denk ve eşittir arasındaki fark-2

Sonuç olarak iki verinin eşit “==” olabilmesi için sadece değerlerinin eşit olması yeterli iken denk “===” olabilmesi için hem değerin hem de veri tipinin aynı olması gerekir.

IF/ELSE YAPISIDaha önceki örneklerimizde koşul verdik eğer koşul geçerli ise işlem yaptırdık. Şimdi ise IF

yapısına koşul vereceğiz koşul geçerli ise bir işlem yapmasını eğer koşul geçerli değilse başka bir işlem yapmasını isteyeceğiz.

ELSE yapısı tek başına kullanılamaz. ELSE yapısı kullanılmak isteniyorsa IF yapısını kullanmak zorundayız.

Page 30: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 4.7: IF/ELSE yapısı

Yukardaki örnekte Resim 4.4 deki örnekten farklı olarak else kodunu kullanmamıza rağmen sonuç aynı oldu. Bunu nedeni koşul yani $sayi > 5 hala geçerli olduğu için else kısmında bulunan hiçbir işlem yapılmaz. O zaman koşulun geçersiz olması için $sayi değişkeninin değerini üç (3) yapalım.

Resim 4.8: IF/ELSE yapısı-2

Yukardaki örnekte $sayi değişkeninin değer üç (3) olduğu için $sayi > 5 karşılaştırma operatöründen cevap olarak false “yanlış” yanıtı dönmüştür. Bu yüzden dolayı IF yapısının süslü parantez “{}” içerisindeki işlem yapılamamış ELSE yapısının süslü parantez “{}” içerisindeki işlem gerçekleşmiştir.

IF/ELSEIF YAPISIELSE yapısında IF koşulu sağlanmıyorsa yapılacak işlemleri yazıyorduk. ELSEIF yapısında ise IF

koşulu sağlanmıyorsa başka koşul öne sürebilmek için kullanılır.

Page 31: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 4.9: ELSEIF yapısı

Yukardaki örnekte $sayi değişkeni 3 olarak tanımlanmış. Daha sonra IF yapısını içerisindeki koşul $sayi değişkeni 5 den büyük olmadığı için sağlanamamış, elseif yapısındaki koşul $sayi == 3 koşulu sağlandığı için ekrana “sayı 3” değeri yazılmıştır. ELSE yapısını üstünde bulunan koşullardan herhangi biri gerçekleştiği için ELSE yapısındaki işlemler gerçekleştirilmemiştir.

Bitişik yazılan ELSEIF ile ayrı yazılan ELSE IF ifadeleri her ne kadar yaptıkları işlem aynı gibi gözükse de birbirinden farklı ifadelerdir. ELSEIF; eğer IF şartı sağlanmazsa ve ELSEIF şartı sağlanırsan işlem yapar, ELSE IF ise; ELSE içerisinde yazılmış IF yapısıdır.

MANTIKSAL OPERATÖRLERMantıksal operatörler birden fazla karşılaştırma operatörünü bir aramada kullanmak veya

karşılaştırma işleminden gelen cevabı tersine çevirmek için kullanılır.

Tablo 4.2: Mantıksal operatörleroperatör açıklama! NOT yani “değilse”&& AND yani “ve”|| OR yani “veya”OR OR yani “veya”AND AND yani “ve”

NOT (!) OperatörüBu operatör boolean tipi değişkenin önüne eklendiği zaman değişkenin değeri true ise false,

false ise true yapar.

Resim 4.10: NOT Operatörü

Page 32: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Yukardaki örnekte $kosul_1 değeri true olarak atanmış ve var_dump fonksiyonu kullanılarak değişkenin türü ve değeri ekrana yazdırılmıştır. Aynı işlem $kosul_2 için uygulanmış ancak $kosul_2 değişkenine değer atanırken NOT “!” operatörü kullanıldığı için $kosul_2 değişkenine atanan değer false olmuştur.

IF yapısında eğer koşul sağlanırsa işlem yapıyordu. Eğer IF yapısından NOT (!) operatörünü kullanırsak koşul sağlanmazsa işlemleri gerçekleştirir.

Resim 4.11: NOT Operatörü

Yukardaki örnekte $sayi > 5 koşulu $sayi değişkeninin değeri 3 olduğu için sağlanmamaktadır. Ancak koşulun başında NOT “!” operatörü olduğundan dolayı ekrana “Sayı 5 den büyük değil” ifadesi yazılmıştır. İfadenin bütününü kapsaması için $sayi > 5 ifadesini parantez “()” içerisinden yazdık.

AND (&&) OperatörüBu operatör birden fazla koşulun aynı anda sağlanması durumunda dönüt olarak true yanıtını

döndürür. Yani her hangi bir koşul sağlanmazsa false yanıtını döndürür. AND operatörü iki şekilde ifade edilebilir. Bunlar; AND veya && dir.

Resim 4.12: AND operatörü

Yukardaki örnekte ilk IF yapısında $sayi > 2 ve $sayi_2 < 8 koşullarının ikisi birden sağlandığı için ekrana “Koşul sağlandı” ifadesi yazdırıldı. Ancak ikinci IF yapısında $sayi_1 > 2 koşulu sağlanmasına rağmen $sayi_2 < 2 ifadesi sağlanmadığı için ekrana hiç bir şey yazdırılmadı.

OR (||) OperatörüBu operatör birden fazla koşuldan herhangi birinin sağlanması durumunda dönüt olarak true

yanıtı döndürür. Bütün koşullar sağlanmazsa false yanıtı döndürür. OR operatörü iki şekilde ifade edilir. Bunlar; OR veya || dir.

Page 33: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 4.13: OR operatörü

Yukardaki örnekte il IF yapısının ilk koşulu $sayi_1 > 2 sağlanıyor, ikinci koşulu $sayi_2 < 2 koşulu sağlanmıyor. Koşullardan sadece biri sağlanmasına rağmen ekrana “Koşul sağlandı” ifadesinin yazdırılma nedeni “OR” operatörüdür. İkinci IF yapısında ise iki koşul da sağlanmadığı için ekrana hiç bir şey yazdırılmadı.

OR ve AND Operatörlerinin Beraber KullanımıOR ve AND operatörleri aslında matematiksel bir işlemdir. OR operatörü toplama, AND

operatörü ise çarpma işlemidir.Sonucu true olan koşulları bir “1”, false olan koşulları sıfır “0” olarak kabul edecek olursak, iki

şartın arasındaki operatör AND ise çarpma, OR ise toplama işlemi yaptığımızda çıkan sonuç 0 “sıfır” dan büyük ise IF yapısında bulunan kodlar çalışacak, sıfır ise IF yapısında bulunan kodlar çalışmayacaktır. Tabi aynı matematiksel işlemlerde olduğu gibi burada da öncelik parantez varsa parantez içerisi daha sonra çarpma işlemi son olarak da toplama işlemi yapılır.

Resim 4.14: OR operatörü

Yukardaki örnekte IF yapısı aynı matematiksel bir işlem gibi ele alınmıştır. $isim_1 adlı değişken değeri “Ahmet” olduğu için bu şart bir “1” olarak kabul edilmiştir. $isim_2 adlı değişkenin değeri “Mehmet” olduğu için ve koşulda “Ahmet” değeri ile karşılaştırıldığı için ikinci şart sıfır “0” olarak kabul edilmiştir. $isim_3 adlı değişkenin değeri “Hasan” olduğu için bu şart da bir “1” olarak kabul edilmiştir. Daha sonra parantez içi önceliğine dikkat ederek (1+0)x1=1 işlemini yaptık. Sonuç sıfır “0” dan büyük olduğu için IF yapısı koşulu sağlandı kabul etti ve ekrana “Koşul sağlandı” yazıldı.

Page 34: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

SWITCH/CASE YAPISI

Bu yapıda verilen değişkenin durumlarına göre işlem yapar. Eğer çok fazla IF/ELSEIF yapınız varsa SWITCH/CASE yapısı kullanmak avantajlıdır.

Kullanım şekli: switch(değişken){case “durum”: yapılacak işlemeler }

Resim 4.15: SWITCH/CASE yapısı

Yukardaki örnekte en basit kullanımı ile switch/case yapısı kullanılmıştır. Bu yapıda “switch” yapısının içerisindeki değişkenin “case” yapısındaki durumlara göre işlem yapılması sağlanır.

SWITCH yapısı içerinde sadece CASE yapısı değil DEFAULT yapısı da kullanılabilir. Bu yapı içerisindeki kodlar CASE yapılarındaki şartlar geçerli olsa da olmasa da uygulanır.

Resim 4.16: SWITCH/CASE yapısında DEFAULT kullanımı

Yukardaki örnekte $sayi değişkeninin değeri on “10” olarak atanmış. SWITCH yapısında $sayi değişkeni beş “5” olması durumunda ekrana “5 “ yazılması, on “10” olması durumunda da ekrana “10 “ yazılması istenmiştir. Son olarak da $sayi değişkeni ister beş “5” ister on “10” olsun veya farklı bir değer olsun yani değişkenin değerine bakılmaksızın ekrana “sayı” yazdırılmıştır.

DEFAULT yapısında yapılması gereken işlemler SWITCH yapısının hemen altında yapılabileceği düşünülebilir. Ancak SWITCH yapısında BREAK kodunu kullanırsak DEFAULT yapısı aynı ELSE yapısına benzeyecektir. BREAK kodu eğer IF veya SWITCH yapısının altında kullanılırsa kullanıldığı yerden itibaren IF veya SWTCH yapısını sonuna kadar olan hiç kodu çalıştırmaz.

Page 35: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 4.17: SWITCH/CASE yapısında BREAK kullanımı

Yukardaki örnekte $sayi değişkene on “10” değeri atanmış ve SWITCH yapısına sokulmuştur. SWITCH yapısında önce $sayi değişken değerinin beş “5” olup olmadığı kontrol edilmiş değer beş “5” olmadığı için sonraki satıra geçilmiştir. Daha sonra değişken değerinin on “10” olup olmadığı kontrol edilmiş değer 10 olduğu için CASE yapısından sonraki işlem olan ekrana on “10” yazdırma işlemi gerçekleştirilmiştir. Ekrana yazdırma işleminden sonra BREAK kodu kullanıldığı için sonraki CASE yapıları veya DEFAULT yapıları hiç kontrol edilmeden SWITCH yapısının en sonuna gelinmiştir.

DÖNGÜLERProgramlamanın akışını belirleyen yapılardan biri de döngülerdir. Döngülerin kullanımının

temel amacı birden fazla kez gerçekleştirilecek işlemlerin blok halinde yazılmasını sağlamaktır Bu sayede tekrarlanması gereken ifadelerin veya kod bloklarının tekrar tekrar yazılmasının önüne geçilmiş olur. Bu bölümde programlamada en sık kullanılan döngü deyimleri açıklanacaktır.

For DöngüsüProgram yazarken en çok kullanılan döngü deyimlerden biri for’dur. For döngüsü genel

anlamıyla Bir değişkeni bir kod bloğunda verilen iki değer arasında belirli aralıklarla çalıştıran yapı olarak tanımlanabilir. For döngüsünde bir olayın kaç gerçekleştirileceği tek satırda 3 parametre ile belirlenir. Bu parametrelerden ilki; değişkene başlangıç değerinin atanmadığı yerdir. İkinci parametre ise döngünün geleceği ile ilgili kararların alındığı yani döngünün hangi şartlardan devam edeceğinin belirlendiği yerdir. Üçüncü ve son parametre ise genelde döngü değişkeninin arttırılması veya azaltılması işleminin yapıldığı yerdir. For döngüsü için genel söz dizimi aşağıdaki gibidir:

Page 36: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Bu işlemler for döngüsünün temelini oluşturur. Döngünün nasıl çalıştığı ise aşağıda bir örnekle gösterilmiştir.

sayi değişkeni döngünün ilk turunda sadece bir defa oluşturulur.

Eğer mantıksal ifade doğru ise (sayi<10) kod bloğu (echo $sayi) çalıştırılır.

Değişken değeri güncellenir ve mantıksal ifade yeniden hesaplanır ($sayi++).

Mantıksal ifade hala doğruysa kod bloğu yeniden çalıştırılır.

Değişken değeri güncellenir ve mantıksal ifade yeniden hesaplanır ($sayi++).

Mantıksal ifade (koşul) yanlış (false) olana kadar bu süreç devam eder.

Yukarıdaki örnek çalıştırıldıktan sonra ekran çıktısı aşağıdaki gibi olur.

For döngüsünü başka bir örnekle inceleyelim. Web sayfasına bir yazıyı farklı büyüklüklerde yazdırmak için bu döngüyü kullanalım.

Bu örnekte for döngüsü kullanılarak “PHP’de Döngüler Konusu” ifadesinin farklı büyüklüklerde yazılması sağlanmıştır. Döngü içerisinde yazı büyüklüğü (size) belirtilmeseydi verilen ifade koşul doğru oldukça (7 kere) web sayfasına aynı büyüklükte yazdırılacaktı. Bu şekildeki ekran görüntüsü aşağıdaki gibi olacaktır.

Mantıksal ifade doğru

(true) oldukça değişken

değeri güncellenir.

Döngü koşulu

belirlenir. Koşulun doğru olması

durumunda döngü

çalışmaya

Değişkene başlangıç

değeri atanır.

For (değişken; mantıksal ifade; değişken değerinin güncellenmesi)

Page 37: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Ancak döngü kod bloğunda yazı büyüklüğünün her defa artması istenmiştir ve ekran görüntüsü aşağıdaki gibi oluşturulmuştur.

PHP’de döngü içerisinde döngü kullanılabilir. Bu yöntemle içte yer alan döngü, dışta yer alan döngüde tanımlanan ifadeye göre istenilen sayıda tekrar tekrar çalıştırılabilir. İçiçe döngüye aşağıdaki gibi bir örnek verilebilir.

Dıştaki döngüde “*” ifadesinin kaç kere yazdırılacağı döngüye sokulur. İçteki döngüde ise “*” ifadesinin her defasında bir tane fazla yazdırılması ve döngünün her adımında alt satıra (<br>) geçilmesi sağlanır.

While Döngüsü

Page 38: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

While döngüsü, mantıksal bir ifade doğru olduğu sürece belli bir kod bloğunun tekrar tekrar çalıştırılması istendiğinde kullanılır. Bu yönden for döngüsüne benzemekle birlikte kullanımı for döngüsü kadar karışık değildir.

While döngüsü için genel söz dizimi aşağıdaki gibidir.

ya da

Bu söz dizimine göre program akışı while döngüsüne geldiğinde döngü parantezindeki koşul ifadesi sorgulanır. Bu koşul ifadesi mutlaka True (Doğru) ya da False (Yanlış) değeri döndürmek zorundadır. Üretilen değer True olduğu takdirde kod bloklarındaki deyimler işlenmeye devam edilir. Eğer koşul ifadesinde üretilen değer false ise döngü bloğunun dışından program akışına devam edilir.

While döngüsünün for döngüsünden en belirgin farkı, for döngüsünde kullanılan döngü değişkeni yapısının while döngüsünde yer almamasıdır. Bu yapının yerine başlangıçta değeri bilinen bir sayı belirli bir koşula göre kontrol edilir ve koşul sağlanıyorsa döngü devam eder.

While döngüsünü bir örnek üzerinden inceleyelim. 1’den 10’a kadar olan sayıları while döngüsü kullanarak toplayalım ve ekrana yazdıralım.

Kod bloğundan da görüldüğü gibi program akışında döngüye girilmeden önce değişkenler tanımlanır ($sayi, $toplam). While döngüsüne girildiğinde ise sayi değişkeninin 10’dan küçük olup olmadığı kontrol edilir. Bu kontrol sonucunda elde edilen sonuç doğru (true) isedöngü içerisindeki deyimler işlenir. Önce sayi değişkeni 1 artırılır sonra bu değişkenin değeri toplam değişkeninin değeri ile toplanır ve toplam değişkeninin yeni değeri elde edilir. Elde edilen her sonucun (toplam değişkeni)

While (mantıksal ifade)Deyim

While (mantıksal ifade){

Deyim 1Deyim 2…

}

Page 39: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

ekrana yazdırılması sağlanır. Bu süreç mantıksal ifade doğru oldukça işlemeye devam eder. Program çalıştırıldığında ise web sayfasında aşağıdaki gibi bir görüntü elde edilir:

Örnekte şart ifadesinde kullandığımız değişken (sayi) döngünün her seferinde 1 arttırılmıştır. For döngüsünde olduğu gibi while döngüsü de bittikten sonra değişken değeri, döngü içinde son yazdırılan değerden 1 fazla olur. Ayrıca C# ve Java gibi diğer programlama dillerinde döngü içinde tanımlanan değişken döngü dışında kullanılmaya çalışıldığında hata verir. PHP’de böyle bir sorun yoktur. Çünkü nerede olursa olsun tanımlanan değişken istenilen yerde tekrar çağrılabilir.

Başka bir örnekte de while döngüsünü kullanarak bir dizi içerisinde bulunan elemanları ekrana yazdıralım. Program kodları aşağıdaki gibi olacaktır.

Program çalıştırıldığında ise aşağıdaki gibi bir görüntü elde edilir.

Do-While DöngüsüDo-While döngüsünde diğer döngülerden farklı olarak koşul ifadesi döngünün sonunda kontrol

edilir. Böylece döngü koşulun sağlanıp sağlanmadığına bakılmaksızın en az bir kez çalışır. Ardından koşul ifadesi kontrol edilir ve doğru sonuç alındığı müddetçe döngü çalışmasına devam eder.

Do-While döngüsü için genel söz dizimi aşağıdaki gibidir.

Do-While döngüsünü kullanarak 1’den 10’a kadar olan sayıları ekrana yazdıralım. Aşağıdaki örnek kod bloğundan da görüldüğü gibi program akışı döngü içerisine geldiğinde sayi değişkeninde tutulan değer ekrana yazdırılacaktır. Ardından koşul ifadesi kontrol edilir ve ifade doğru olduğu müddetçe ekrana sayi değşkeninde tutlan değerler yazdırılır.

Do{

Deyim 1Deyim 2…

} While (mantıksal ifade)

Page 40: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Foreach DöngüsüForeach döngüsü genellikle Array (dizi) ile birlikte kullanılan bir döngüdür. Diziler

programlamada önemli bir yere sahiptir. Dizilerle işlem yapılırken for, while gibi döngüler kullanılabildiği gibi foreach döngüsü de kullanılabilir. Ancak foreach döngüsünde diğer döngülerde olduğu gibi herhangi bir başlangıç ve bitiş değeri belirtmeye gerek yoktur. Bu döngü, dizinin eleman sayısı kadar döner ve kod bloğunda istenen işlemler yapılır. Foreach döngüsü için genel söz dizimi aşağıdaki gibidir:

Bu söz dizimine göre dizi_ifadesi ile belirtilen dizi üzerinde döngü oluşturulur. Her yinelemede sıradaki elemanın değeri, değer değişkenine atanır ve dizi indisi 1 artırılır. Bu şekilde döngünün bir sonraki turunda dizinin bir sonraki elemanına bakılması sağlanır.

Örnek olarak, haftanın günlerini bir dizi değişkenine atayalım ve bu günleri foreach döngüsü kullanarak ekrana yazdıralım.

Dizilerde tutulan elemanlara ulaşmak için dizi indisleri kullanılır ve indisler 0’dan başlar. Bu örneğimizde dizide 7 eleman olduğu için dizi indisi 0 ile 6 arasında değer almaktadır. Böylece bu örnek için döngü başlangıç değeri 0, bitiş değeri ise 6 olarak belirlenmiştir. Programın ekran görüntüsü ise aşağıdaki gibidir:

Aynı örneği for döngüsüyle yaptığımızda kod bloğu aşağıdaki gibi olmalıdır:

Bu iki döngü arasında çok fark yokmuş gibi görünse de döngülerde diziler kullanılacaksa foreach döngüsünün kullanımı çok daha kolay ve pratiktir.

Foreach (dizi_ifadesi as değer){Yapılacak işlemler}

Page 41: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Bazı durumlarda foreach döngüsü içerisinde dizi index numaralarının da yazdırılması istenebilir. Bu durumlarda foreach ilk kullanımına ek olarak index numarasının da bulunduğu aşağıdaki gibi 3 parametre alır.

Haftanın günlerinin bir dizide tutulduğu ve bu dizinin foreach döngüsüyle yazdırılmıştı. Şimdi günlerin hangi dizi indexinde bulunduğunu göstermek için foreach döngüsünün farklı yapısını kullanalım.

Foreach bu yapıda kullanılırsa dizi elemanlarının yanında aşağıdaki gibi index numaraları görüntülenir.

Akış Kontrol DeyimleriPHP’de program akışını farklı noktalara yönlendirmek için bazı anahtar sözcükler

kullanılmaktadır. Program akışında belli şartlar sağlandığı zaman döngüden çıkılabilir ya da bir sonraki adıma geçilebilir. Bu ve buna benzer durumlarda döngü komutları kullanılmaktadır.Continue

Continue anahtar sözcüğü, döngü yapısının içindeki kodları atlatarak bir sonraki adıma geçmek için kullanılır. Örneğin bir dizi içerisinde bulunan sayıları 5’e tam bölünen sayılar hariç ekrana yazdıralım. Bu durumda döngü içerisinde if koşul deyimi ve bunun içerisinde continue anahtar sözcüğü kullanılmalıdır. İf koşulunda gelen sayının mod 5 değeri 0’a eşitlenir ve continue ile devam edilir. Bu tanıma göre örnek kod bloğu aşağıdaki gibi olacaktır.

Foreach (dizi_ifadesi as değer => değişken_adi){Yapılacak işlemler}

Page 42: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

BreakBreak anahtar sözcüğü; while, do-while, for, foreach, switch ifadelerini sonlandırmak için

kullanılır. Döngülerde, break anahtar sözcüğüne rastlandığı anda döngüden çıkılır ve program döngü bloğundan sonraki ilk deyimle akışına devam eder. Break anahtar sözcüğünü bir örnekle gösterelim. Örnekte dizinin bütün elemanları için döngü çalışır. If şartını sağlayan ilk değere gelindiğinde break komutu çalışır ve döngü sonlandırılır.

KULLANICI TANIMLI FONKSİYONLARGiriş bölümünde ön tanımı yapılan fonksiyonlardan ilk olarak basit yapıda olanları

inceleyebiliriz. Bu tür fonksiyonlar geliştiriciler tarafından oluşturulan ve işlemlerini tek bir seferde çalışarak bitiren yapıdadır. Kullanım olarak en fazla bu tür fonksiyonlardan yararlanılır. Aldığı iki parametreyi kullanarak toplama işlemini gerçekleştiren bir fonksiyon “Kullanıcı Tanımlı Fonksiyon” olarak düşünülebilir. Kullanıcı tanımlı fonksiyonlar, kendi içlerinde farklı fonksiyonlardan da yararlanabilir. Örneğin; çarpma işlemi için üretilmiş bir fonksiyon, kendi içerisinde toplama işlemi için üretilmiş bir başka fonksiyonu çalıştırarak sonuçtan yararlanabilir. Bu tür fonksiyonları kendi

Continue anahtar sözcüğü kullanılarak 5’e tam bölünen sayılar hariç diğerleri

ekrana yazdırılmıştır.

Break anahtar sözcüğü kullanılarak 5’e tam bölünen dizi elemanında

gelindiğinde döngü sonlandırılmıştır.

Page 43: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

içerisinde dört parçaya ayırarak incelebiliriz:

1. Fonksiyonun adı

2. Parametreler

3. İşlem alanı

4. Sonuç bildirimi

Belirtilen dört parametreden sadece fonksiyon adının belirtilmesi ile bir fonksiyon elde edilebilir. Örnek olarak;

Şekil 6.1: Temel fonksiyon görünümü

şeklinde olabilir. Bu tür –geri bilgi dönüşü olmayan– fonksiyonlara “Statik” veya “Durağan” fonksiyonlar diyebiliriz ve genellikle fiziksel dosyalar üzerinde yapılan işlemlerde kullanılırlar.

Dikkatle incelenecek olunursa; fonksiyonun başlangıcında bir fonksiyon olduğunu tanımlamak için “function” ifadesi kullanılmaktadır. Bu ifade, PHP yorumlayıcısının fonksiyonu doğru anlayabilmesi için gereklidir. Ayrıca bu şekilde fonksiyonlar “class” ve “echo” gibi diğer sabitlerden ayrılacaktır. Bu tanımlamayı matematik dersini anlattığınız sınıfta fonksiyon olması için seçtiğiniz kişinin bir yaka kartı olarak düşünebilirsiniz. Bu sayede onu gördüğünüzde bir fonksiyon olduğunu anlayabileceksiniz.

İkinci önemli kısım ise fonksiyonun adıdır. Fonksiyon adını, seçtiğiniz öğrencinin yaka kartında yazan isim olarak düşünebilirsiniz. Bir fonksiyon adlandırılırken bazı kurallara uyulmak zorundadır. Fonksiyon adı üretilirken uyulması gereken kuralları ezberlemek yerine; öğrenme sürecinde sadece a-Z arasındaki harflerden yararlanmanız hızlı ilerleyebilmenizi sağlayacaktır. Ayrıca; fonksiyon adları üretirken bazı kalıplara uymanız; geliştirdiğiniz uygulamanın daha kolay anlaşılabilir olmasına yardım edecektir. Bu konu, ünitenin ilerleyen kesimlerinde anlatılacaktır.

Bir fonksiyonda zorunlu olarak olması gereken diğer kısım ise ard arda açılmış normal “( )” ve güzel “{ }” parantezlerdir. Bu parantezler fonksiyonun parametre ve işlem gövdesinin belirtilmesi için kullanılır.

ParametrelerFonksiyonlarda işlemler için gerekli olan değişkenler parametreler yardımıyla gönderilir. Bu

durumu önceki örnekle birleştirebiliriz. Bunun için, işlem yapması için yaka kartında adı yazılı olan seçilmiş öğrencinin iki sayıyı toplayarak sonucu bildirmesini ele alalım. Elimizdeki durum şu şekildedir: biz öğrenciye iki sayı veriyoruz. Cevap olarak ise bir sayı geri alıyoruz. Verilen iki sayının her birisi bir parametre olacaktır. Bu parametrelerin PHP dilinde yazımı ise aşağıdaki gibi gösterilebilir.

Page 44: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Şekil 6.2: İki parametreli fonksiyon

PHP dilinde parametreler, tıpkı değişkenler gibi tanımlanır. Parametre olarak belirtilecek değerler “dolar ($)” işareti ile başlar ve bir harf ile devam eder. Değişken veya parametre adlarında dolar simgesinden sonra harf dışında sadece “alt tire (_)” kullanılabilir. Ancak asla sayı kullanılamaz. Yine hızlı ilerleyebilmek için sadece a-Z aralığında kalan bir harf kullanmanız tavsiye edilir.

Fonksiyonlar için ihtiyaç duyulduğu kadar parametre tanımlanabilir. Sadece parametrelerin virgüllerle ayrılması yeterli olacaktır.

İşlem AlanıFonksiyona gönderilen parametrelerden yararlanarak gerekli işlemlerin yapıldığı alandır. Bu

alanda geliştirilen kodların fazla uzun olmamasına dikkat edilmelidir. Mümkünse 10 satırdan fazla olan fonksiyon işlemleri; yeni bir fonksiyona taşınmalıdır. Bu durum bir zorunluluk olmasa da gelişmiş editör uygulamalarının (IDE) tavsiyeleri ve yazılan kodların kolay anlaşılması için yararlı olacaktır.

İşlem alanları güzel parantez “{ }” ile açılıp kapatılmak zorundadır. Parantezler arasında yazılacak kodların ise genel PHP kod yazım standartlarından ayrı olarak özel bir yapıya sahip olması gerekmez.

Fonksiyonların işlem alanları daha önceki örneğimizde seçtiğiniz öğrenciye öğretilen bilgiyi ifade etmektedir. Bu noktada dikkat edilecek durum ise; seçilen öğrencinin sizin öğrettiğiniz bilginin dışında herhangi bir birikime sahip olmamasıdır. Ancak; başka öğrencileri de farklı işlemler için fonksiyona dönüştürürseniz; öğrenciler kendi aralarında da bilgi alış-verişinde bulunabilirler.

Basit bir toplama işlemini yapan fonksiyon için kod örneği aşağıdaki gibi olabilir.

Şekil 6.3: Basit bir toplama işlemi fonksiyonu

Örnekte dikkat edilecek olursa iki önemli durum söz konusudur. Bunlardan ilki, fonksiyon içinde herhangi bir sayı değerinin belirtilmemiş olmasıdır. Yani; öğrenciye öğretilen bilgi; aslında toplama işlemini nasıl yapacağı değil; toplama işlemini yapmasıdır. Bunun nedeni ise, toplama işleminin PHP tarafından zaten bir önbilgi olarak geliştiriciye sunulmasıdır.

Page 45: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

İkinci önemli nokta ise fonksiyonun geriye herhangi bir cevap göndermesi için komut içermemesidir. Fonksiyon bu haliyle bir işe yaramayacaktır. Çünkü toplama işlemini gerçekleştirmesine rağmen herhangi bir sonuç geriye göndermemektedir.

Peki; fonksiyonu işlem sonucunu geri bildirmesini kodlamak için ne gereklidir. Bu sorunun cevabı, İngilizce “geri dönmek” fiilinin karşılığı olan “return” ifadesinin kullanılmasıdır.

Fonksiyonlarda, “return” ifadesi ilk çalıştırıldığı anda daha sonra yazılan kodları iptal ederek cevabı, fonksiyonu çağıran satıra geri gönderir. Bu nedenle, “return” ifadesini bir çıkış kapısı olarak görmekte herhangi bir mahsur yoktur. İfadenin örneğimize eklenmiş hali ise aşağıdaki gibi olacaktır.

Şekil 6.4: Geriye cevap gönderen kullanıcı tanımlı fonksiyon

YorumlamaUygulamalarınızda geliştirdiğiniz fonksiyonların PHP tarafından hangi adımlarda

yorumlandığını bilmeniz sizlerin daha hızlı ve doğru bir şekilde fonksiyonlar üretebilmenize olanak verecektir. Bu nedenle bir önceki örnekte yazdığımız fonksiyonun PHP tarafından yorumlanmasını inceleyelim. Öncelikle her bir adımı sayılarla ifade ederek başlayalım.

Şekil 6.4: Geriye cevap gönderen kullanıcı tanımlı fonksiyon

Öncelikle PHP tarafından okunan 1 numaralı kelime ile PHP, artık bir fonksiyonu hafızasına alacağını anlamaktadır. Bu noktadan sonra sırasıyla fonksiyon adını, parametre tanımlamasını ve işlem gövdesini bekleyecektir.

1 numaralı “function” kelimesinden sonraki “boşluk” ile 3 nolu “normal parantez açılışı” arasında kalan kısmı (2 nolu kısım), fonksiyon adı olarak kabul edecektir. Yani 2 ve 3 numaralı kısımlar arasında örnekteki gibi bir boşluk olması zorunlu değildir.

12 3 4 5

8

1815 17

7

912 13

1416

6

1110

Page 46: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

2 numaralı foksiyon adı (topla) belirlendikten sonra 3 numaralı normal parantez (“(“) açılışını parametre tanımlamasının başlangıcı olarak kabul eden PHP, parantezin kapandığı 7 nolu (“)”) karaktere kadar olan kesimi parametre tanımlamaları olarak kabul edecektir.

4 numaralı değişkeni ($sayi1) parametre olarak tanımlayan PHP, 5 numaralı virgülü okuduktan sonra bir başka parametrenin daha var olduğunu anlayacak ve 6 numaralı değişkeni ($sayi2) parametre olarak tanımlayacaktır. Eğer 6 numaralı değişkenden sonra bir virgül daha olsaydı bir parametre daha olduğunu anlayacak ve tanımlama yoluna gidecekti.

Aslında PHP, 3 numaralı normal parantez açılmasından (“(“) sonra ilk baktığı; 7 numaralı normal parantezin (“)”) kapanmasıdır. PHP, bu iki karakter (normal parantez açılışı ve normal parantezin kapanışı) arasında kalan parametreleri virgül karakterine göre parçalayarak fonksiyona parametre olrak dâhil edecektir.

Parametreler tanımlandıktan sonra PHP’nin ilk olarak bakacağı, güzel parantez açılışı ( 8 nolu “{“ karakteri ) ve güzel parantezin kapanışı ( 18 nolu “}” karakteri) dır.

PHP, güzel parantezler arasında kalan işlem alanında komutları noktalı virgül karakterine (14 ve 17 nolu karakterler) göre parçalar. Satırların alt alta veya yan yan olmasının herhangi bir önemi yoktur.

İlk olarak tespit edilen 14 nolu noktalı virgül ile bir komut öbeği tespit eden PHP, 9 nolu $toplam değişkeni ile yorumlamaya başlar. Bu noktada herhangi bir işlem yapmaz; sadece operatör bekler.

10 numaralı operatör olan eşittir (=) karakteri, $toplam değişkenin değerini operatörün sağ tarafının belirleyeceğini anlatır. Daha sonra eşittir operatörünün sağ tarafı bırakılarak; sol tarafında bulunan 11 nolu $sayi1 değişkeni okunur. Bu durumda PHP yine bir operatör bekler ve 12 numaralı toplam (+) operatörünü okur. Artık $sayi1 değişkeninin, toplam operatörünün sağ tarafında bulunan $sayi2 ile toplanacağını anlar. Bir sonraki operatör ise 14 numaralı noktalı virgül (;) olduğu için komut öbeğini bitireceğini tespit edecek ve $sayi1 ile $sayi2’nin toplamının sonucunu $toplam değişkenine aktaracaktır.

Bir sonraki adımda ise PHP, 15 numaralı “return” komutu ile başlayan satırı ele alacaktır. Burada “return” ve hem sonra gelen noktalı virgül (17 numaralı karakter) arsında yazan değer-değişkeni geri göndermesi gerektiğini anlayacaktır.

PHP’nin fonksiyonu yorumlamasını özetleyecek olursak; ilk olarak “function” kelimesi ile başlayan yorumlama, güzel parantezin kapanmasına kadar devam edecektir. Bu arada ise ilk olarak fonksiyonun adını, parametrelerini ve işlem gövdesini arayacaktır. Bu durumun işleyiş şeması ise aşağıdaki gibi gösterilebilir.

Page 47: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Şekil 6.5: Fonksiyonun yorumlanmasında iş akışı şeması

TetiklemePHP içerisinde geliştirilen fonksiyonlar istenmediği sürece beklemede kalırlar. İhtiyaç

duyulduğunda tetiklenmeleri ise adlarını kullanarak yapılır. Tetikleme işlemlerinde ayrıca fonksiyon için tanımlanan parametrelerin değerleri de belirtilir.

Bu durum ünitede kullanılan genel örnekle bağdaştırılabilir. Tahtada matematik sorusunu çözerken fonksiyon olarak seçilen öğrencinin adını söyledikten sonra değerleri söyleyerek sonuç istenebilir. Örneğin; “topla” adındaki fonksiyonu temsil eden öğrencinin adını dile getirdikten sonra iki sayı söylenebilir. Topla, 3, 2 gibi…

Şimdi fonksiyon tetiklemeyi PHP kodlarında incelemek için aşağıdaki örneği göz önüne alabiliriz.

Şekil 6.6: Fonksiyonun tetiklenmesi

Örneğimizde 9. satırda komutu ile fonksiyon tetiklenerek çalışmasına olanak sağlanmıştır. Ancak; bu betiğin tarayıcıda çalıştırılması halinde ekranda “5” değeri (3+2) yazmayacaktır. Çünkü fonksiyon cevabı geri göndermesine karşın; herhangi bir kullanıma gidilmemiştir. Bir başka değişle; toplama işlemi gerçekleştirilmiş ama sonuç ekrana yazdırılmamıştır.

18 8 - 18

Adım İlerle Hayır

Hayırİşlem belirtilmiş

mi?

Yorumlama işleminin

tamamlanmasıİşlem gövdesi

{ … }

Adım İlerle

3 - 7

21

Evet

Evetİşlemlerin parçalanması (;)

Parametrelerin parçalanması (,)

Parametreler belirtilmiş mi?

Parametreler( … )Fonksiyon adıFonksiyon

tanımlaması

Page 48: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Fonksiyon sonuçlarının ekrana yazdırılması için “echo” komutu kullanılabilir. Bu durumda fonksiyon ve ekran çıktısı aşağıdaki gibi olacaktır.

Şekil 6.7: Fonksiyonun ekran çıktısı

Çalışma SüreciFonksiyonlar tetiklendiği anda parametre olarak tanımlanan değerleri de gönderir. Bu

değerler fonksiyon içerisine alınarak ilgili konumlara yerleştirilerek yorumlanır. Bu durumun ilk aşamaları aşağıdaki gibi gösterilebilir. Şekil 6.8 – 6.11 ile yapılan gösterimler sadece işlem akışını anlanız içindir. Fonksiyonun bu şekilde kullanımı hata ile sonuçlanacaktır.

Şekil 6.8: Fonksiyonun tetiklenmesi ile parametrelerin değerlenmesi

Şekil 6.9: Parametrelerin içeri alınması ile değişkenlerin değerlenmesi

Şekil 6.10: Değişkenlerin toplanarak başka bir değişkene aktarılması

Page 49: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Şekil 6.11: İşlem sonucunun “return” komutu ile geri gönderilmesi

PHP fonksiyonlarının çalışması iki adımda meydana gelmektedir. Birinci adımda sunucu, PHP uygulamasının tamamını okuyarak gerekli tanımlamaları yapar ancak çalıştırmaz. Bu nedenle fonksiyonun tetiklenmesinin fonksiyondan önce de olması bir sorun teşkil etmeyecektir.

İkinci adımda ise PHP uygulamasındaki noktalı virgüllerle ayrılmış her bir komut kümesi çalıştırılmaya başlanır. Burada dikkat edilmelidir ki; PHP, komut kümelerini satırlara göre değil; noktalı virgüllere göre ayırmaktadır.

PHP fonksiyonlarının çalışma süreçleri ayrıca matematikteki işlem önceliğine de dikkat etmektedir. Örneğin; eşittir (=) operatörünün sağ tarafında toplama ve çarpma işlemleri kullanılmışsa; öncelikli olarak çarpma işlemi gerçekleştirilecektir. Bu öncelikler konusunda herhangi bir sıkıntı yaşamamak için işlemleri normal parantezler içerisinde yazılma yoluna gidebilirsiniz.

FONKSİYONLARIN ADLANDIRILMASIÜretilen fonksiyonların adlandırılmasında uygulanması gereken kural sadece Latin alfabesi ve

alt tire işaretinin kullanılabilecek olmasıdır. Ayrıca; adın ilk karakteri olmamak kaydıyla; sayılar da fonksiyon adlarında kullanılabilir.

Fonksiyonlara ad verme işlemi her ne kadar önemli gözükmese de; iyi ve doğru bir adlandırma sistemi kullanmanız büyük veya küçük ölçekteki projelerde kodlara olan hâkimiyetinizi artırmanız yanı sıra, uygulama geliştirmenizi zevki bir hale büründürecektir.

Günümüze kadar birçok adlandırma sistemi önerilmiş olsa da yaygın olarak kullanılan üç sistem bulunmaktadır. Bu sistemler, “Pascal case”, “Camel case” ve “Uppercase”’dir.

Pascal CaseTanımlayıcının ilk harfi ve devam eden kelimelerin her birinin ilk harfi büyük olarak

yazılmaktadır. Üç veya daha fazla karaktere sahip olan tanımlayıcılar için “Pascal case” yapısını kullanabilirsiniz. Örneğin; iki sayının toplamını getiren fonksiyonun adını belirlerken “GetirToplam” yazabilirsiniz.

Camel Case

Page 50: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

PHP dilinde en yaygın kullanılan bu stilde; tanımlayıcının ilk harfi küçük, bağlanan kelimelerin ise ilk harfleri büyüktür. Bir önceki örneğimizin bu stildeki yazımı ise, “getirToplam” olacaktır.

Fonksiyonlarda kullanılan parametreler ve değişkenler de genellikle “Camel case” stili kullanılarak biçimlendirilir.

UppercaseTanımlayıcıda bulunan bütün harfler büyüktür. Bu stillendirme yapısını sadece iki veya üç harf

içeren tanımlayıcılarda kullanmanız önerilir. Ayrıca; “Camel case” ile stillendirilen tanımlayıcıların iki veya üç karakterden oluşan kısımlarında “Uppercase” kullanılabilir. Örneğin; veritabanı kelimesini kısaltarak “VT” şeklinde kullanacaksanız, “baglanVT” şeklinde bir fonksiyon adı üretebilirsiniz.

Eylem Adının YerleşimiFonksiyonlar genellikle birer eyleme sahip yapılardır. Örneğin; veritabanına bağlanmak, dosya

silmek, kişi adını getirmek gibi eylemleri gerçekleştirirler. Elbette fonksiyonların adlarında da bu eylemleri belirten eklerin bulunması, o fonksiyonun ilk bakışta anlaşılmasına büyük katkıda bulunacaktır.

Eylem adları fonksiyon adlarının önüne veya sonuna getirilebilir. Bu tamamen geliştiricinin alışkanlıklarına bağlıdır. Ancak; önek olarak kullanılması uygulamanın geliştirilmesinde daha hızlı sonuca varılmasına katkı sağlayabilir. Her iki durum için de örnek verecek olursak; veritabanında bulunan bir kişi kaydının soyadını getiren fonksiyon adı olarak “getirKisiSoyad” veya “kisiSoyadGetir” ikilisinden birisi kullanılabilir.

Uygulama geliştirmede kullanılabilecek stil örneklerini göstermek için aşağıdaki gibi bir tabloyu inceleyebilirsiniz.

Örnek Tanımlayıcı Eylem Nesne BiçimlendirmegetirProfilAd Fonksiyon Getir Kişi adı CamelGetirProfilAd Fonksiyon Getir Kişi adı PascalgetirProfilID Fonksiyon Getir Kişi ID değeri Camel + UppercaseprofilAdGetir Fonksiyon Getir Kişi adı CamelprofilAd Değişken Kişi adı CamelProfilAd Değişken Kişi adı PascalprofilID Değişken Kişi ID değeri Camel + UppercaseekleKisiResim Fonksiyon Kayıt Kişi resmi CamelsilKisiTelefon Fonksiyon Sil Kişi telefon no CamelguncelleKisiAd Fonksiyon Güncelle Kişi adı Camel

Tablo 6.1: Adlandırma stilleri

Fonksiyonların adlandırılmasının bir şablona göre yapılması ile uygulama geliştirmesinin daha hızlı olabilmesinin temel nedeni ise geliştirme yapılan editörlerin otomatik tamamlama özelliklerinden kaynaklanmaktadır. Yayın olarak kullanılan editörlerin büyük çoğunluğu otomatik tamamlama özelliğine sahiptir. Otomatik tamamlama özelliği genellikle kodlama esnasında kendisi devreye girerek önermelerde bulunur. Ancak; kullanıcı istediği zamanlarda da herhangi bir

Page 51: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

karakterden sonra da “Ctrl+Boşluk” tuş kombinasyonunu kullanarak da bu özelliğin önermeleri görebilir.

Geliştirme yaptığımız Notepad++ editöründe otomatik önermeleri görebilmek için aşağıdaki görseli inceleyebilirsiniz.

Şekil 6.12: Notepad++ uygulamasının otomatik tamamlama özelliği

METİN İŞLEMLERİÇevrimiçi uygulama geliştirme işlemlerinde kullanıcılardan alınan verilerin miktarı normal

uygulamalardan daha fazla olabilmektedir. Bu durumun en önemli kaynağı ise kullanıcıların sayısının fazlalığıdır. Kullanıcıların farklı sektörlerden olması ve girilebilecek verilerin standart bir biçime sahip olmamasından dolayı genellikle geliştirici veriyi işlemek zorunda kalmaktadır. Örneğin; e-posta adresi bilgisinin kullanıcıdan alan geliştirici; bu veri içerisinde “@” işaretini arayacak ve şekilsel doğruluğunu kontrol edecektir.

Metin işlemlerinde, sahip olunan verinin parçalanması, kıyaslanması veya kırpılması gibi genel konular işlenecektir. PHP dilinde kullanılabilecek metin işlemi fonksiyonlarının listesi http://tr1.php.net/manual/tr/ref.strings.php adresinden elde edilebilir.

Aşağıdaki tabloda, yaygın olarak kullanılan PHP metin işleme fonksiyonları ve açıklamaları verilmiştir.

Fonksiyon Açıklamasubstr Bir metnin istenen kısmını kırparak verir1

1mb_substr “substr” fonksiyonunun UTF8 destekli sürümüexplode Verilen karaktere göre parçalayarak metni dizi haline dönüştürürstr_replace Metin içindeki verilen karakteri bir başka karakterle değiştirirstrpos İstenen karakterin bulunduğu sıra numarasını verir2

Page 52: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

2mb_strpos “strpos” fonksiyonunun UTF8 destekli sürümüstrlen Metnin kaç karakter olduğunu (uzunluğunu) verir3

3mb_strlen “strlen” fonksiyonunun UTF8 destekli sürümüstrrchr İstenen karakterin son eşleşmesini tespit eder4

4mb_strrchr “strrchr” fonksiyonunun UTF8 destekli sürümüstrrev Metni ters çevirirstrtolower Metnin bütün karakterlerini küçültürstrtoupper Metnin bütün karakterlerini büyültür

Tablo 7.1: Yaygın olarak kullanılan PHP metin işleme fonksiyonları

PHP dilinde metin işlemleri yapmak için gerekli olan birçok fonksiyon verilmiş olmasına karşın; birçok fonksiyon Türkçe UTF8 desteğini bünyesinde barındırmamaktadır. Bu nedenle UTF8 destekli metin işlemleri fonksiyonları sonradan PHP diline dâhil edilmiştir. Bu fonksiyonların listesini http://tr2.php.net/manual/tr/book.mbstring.php adresinden elde edebilirsiniz.

KIRPMA İŞLEMLERİÇevrimiçi uygulamalar geliştirirken programcılar genellikle kullanıcılardan aldıkları veri

üzerinde düzeltmeler yapmak durumunda kalır. Bu düzeltmelerin en sık kullanılanlarından birisi ise metnin belirli bir kısmının elde edilmesidir.

Metin kırpma işlemleri kırpılacak karakterin sıra numarası ve bu karakterden sonra kaç karakter alınacağının belirtilmesi ile olmaktadır. Kırpma fonksiyonu iki sayı aldığından geliştiriciler genellikle öğrenme aşamasındayken kırpma işleminin başlangıç sıra numarası ile sonlanış sıra numarasını verirler. Yaygın olan bu hataya düşmemek için ikinci sayının sonlanış numarası değil; ilk karakterden sonraki ilerleme sayısı olduğuna dikkat etmeniz gerekmektedir.

PHP dilinde metni kırpmak için “substr” ve “mb_substr” adında iki fonksiyon bulunmaktadır. Bu fonksiyonlardan ilkini kullanacak olursanız “ç,i” gibi Türkçe karakterlerin kırpılmasında sorunlar yaşayabilirsiniz. Bu durumun nedeni UTF8 karakterlerinin bayt (byte) değerlerinin daha fazla olmasıdır. UTF8 olsun veya olmasın herhangi bir sorun yaşamamak için “mb_substr” fonksiyonunu kullanarak kırpma işlemlerinizi gerçekleştirmeniz tavsiye edilir.

Her iki fonksiyonu inceleyebileceğiniz resmi internet adresleri aşağıda verilmiştir.

substr - http://tr2.php.net/manual/tr/function.substr.php

mb_substr - http://tr2.php.net/manual/tr/function.mb-substr.php

Metin kırpma için kullanılan “substr” fonksiyonun genel görünümünü içeren bir örnek aşağıdaki gibi verilebilir.

Resim 7.1: “substr” fonksiyonu örnek kullanım - I

Page 53: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Yukarıdaki örnekten anlaşılabileceği gibi; “substr” fonksiyonu, ilk parametre olarak “$metin” değişkenini almaktadır. Bu parametre için ayrıca doğrudan, “ATA-AOF” gibi, metin değeri yazılabilirdir.

İkinci parametre olarak, kırpma işleminin başlayacağı karakterin sıra numarası verilmektedir. Örnekte yer alan sıfır (0) değeri, ilk karakterin önünden kırpmaya başlanması için verilmiştir.

Üçüncü parametre olarak, kırpılacak toplam karakter sayısı verilmektedir. Örneğimizde değer olarak üç (3) alınmasının sonucunda ilk üç karakterin geri dönmesi sağlanmıştır.

Bir sonraki kullanım örneği olarak yine “ATA-AÖF” kelimesini ele alabiliriz. Kırpma işlemi sonucunda “AÖF” kelimesini elde etmek için tire (-) işaretinden sonra üç (3) karakter almamız gerekmektedir. Bu durumda “substr” fonksiyonunun ikinci parametresi (kırpmanın başlanacağı karakterin sıra numarası) değer olarak dört (4) almalıdır. İkinci parametre ise üç karakter istediğimizden dolayı üç (3) değerine sahip olmalıdır. Bu durumda fonksiyonumuzun görünümü,

Resim 7.2: “substr” fonksiyonu örnek kullanım - II

şeklinde olacaktır. Bu durumda tarayıcıda oluşacak ekran görüntüsü ise,

Resim 7.3: Örnek ekran çıktısı

olacaktır. Ekran görüntüsünde öncelikle bir karakter bozulması yaşandığı anlaşılmaktadır. Bu durumun önüne geçebilmek için Notepad++ uygulamasında yer alan üst menüden “Kodlama -> UTF-8 Kodlaması” seçeneği seçilmelidir. Bu tür karakter sorunlarının ortaya çıkmasının temel nedeni sayfanın karakter kodlamasının yanlış seçilmiş olmasından kaynaklanmaktadır. Gerekli ayarlamayı yaktıktan sonra izlenecek menü görüntüsü,

Page 54: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 7.4: Karakter kodlamasının düzeltilmesi

olacaktır. Düzeltme işlemi sonrasında tarayıcıda oluşacak görüntü ise,

Resim 7.5: Karakter kırpma ekran görüntüsü

şeklinde olabilir. Bu noktada dikkat edilmesi gereken en önemli sonuç, “substr” fonksiyonuna üçüncü parametrede kırpılacak karakter sayısı olarak üç (3) verilmesine karşın; sadece iki karakter kırpmış olmasıdır. Örneğimizde 6. karakter olan “Ö” harfi bir karakterden fazla bayt yer kapladığı için iki karakter sayılmıştır.

Yukarıdaki örnekte alınan yanlış sonucun önüne geçmek için verilen metindeki bütün Türkçe karakterleri ikişer karakter olarak sayıp; üçüncü parametreyi yeniden tanımlayabiliriz.

Türkçe karakterleri sayma işlemi zahmetli gelirse; “mb_substr” fonksiyonunu da kullanılabilir. Bu fonksiyon “substr” fonksiyonu ile aynı parametreleri alır; sadece ek olarak hangi karakter kodlamasının kullanılacağı da fonksiyona belirtilir. Bizler UTF8 karakter kodlaması kullandığımız için parametre değerini bu şekilde vermeliyiz. Yukarıdaki örneğin “mb_substr” fonksiyonu kullanılarak yeniden kırpma işlemine alınması sonucunda oluşacak PHP kodlarının ve tarayıcı ekranının görüntüsü aşağıdaki gibi olacaktır.

Resim 7.6: Türkçe karakterleri doğru kırpmak için “mb_substr” fonksiyonu

Page 55: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

PHP dilinde karakter kırpma işlemini daha iyi anlayabilmek için aşağıdaki örnekleri inceleyebilirsiniz. Örnekte yeşil olan metinler, ekranda oluşacak çıktıları temsil etmektedir.

Resim 7.7: “substr” fonksiyon kullanım örnekleri

Örnekte yer alan 9. ve 10. satırlardaki ikinci parametrenin negatif olmasından anlaşılabileceği gibi, tersten kesme işlemi de yapılabilmektedir. Yani, ikinci parametrenin negatif olması halinde PHP, metni ters çevirip kırpma işlemini yapar, daha sonra sonucu tekrar ters çevirip kullanıcıya iletir. Bu işlev kullanıcıya, verilen metindeki son karakterleri kırpmak için büyük kolaylık sağlamaktadır.

Ayrıca; 11. ve 12. satırlarda “substr” fonksiyonuna üçüncü parametrelerin gönderilmediği görülebilir. Bu tür durumlarda PHP, verilen karakterden sonraki metinin tamamını geri gönderecektir. Aksi halde, metnin kalan kısmını isteyen geliştirici, metnin uzunluğunu “strlen” fonksiyonu ile ölçerek sayı değerini “substr” fonksiyonuna belirtmek zorunda kalırdı.

UZUNLUK HESAPLAMAPHP ile bir metnin kaç karakterden oluştuğunun hesaplanması “strlen” fonksiyonu ile

mümkündür. Bu fonksiyon parametre olarak sadece metin değerini almaktadır. Geri dönen cevap ise metin uzunluğunun sayısal değeridir. Örnek olarak aşağıdaki kod parçası ve ekran görüntüsü incelenebilir.

Resim 7.8: Metnin uzunluğunun hesaplanması

Page 56: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Bir önceki konuda olduğu gibi, metin uzunluğunun ölçülmesinde de UTF8 karakter sorunları karşımıza çıkacaktır. Örneğimizde yer alan “ATA-AOF” kelimesi “ATA-AÖF” olarak değiştirilip sonuç tekrar incelenecek olursa kodlar ve ekran görüntüsü aşağıdaki gibi olacaktır.

Resim 7.9: Türkçe karakterli bir metnin uzunluğu

Dikkat edilecek olursa; metin halen daha 7 karakter olmasına karşın; sayım sonucu sekiz (8) çıkmaktadır. Türkçe karakterlerde ortaya çıkan bu sorunun çözümü için aşağıdaki örnekte olduğu gibi “mb_strlen” fonksiyonu kullanılabilir. Ayrıca; “mb_strlen” fonksiyonu, ikinci parametre olarak kaynak kodlaması olan “UTF8” değerini alacaktır.

Resim 7.10: “mb_strlen” fonksiyonunun kullanımı

KONUM TESPİTLERİGeliştiriciler bazı durumlarda belirli bir karakterin, metin içinde kaçıncı sırada olduğunu

bulmak zorunda kalabilirler. Bu tür durumlar genellikle kırpma işlemlerinin dinamik olarak kullanıldığı zamanlarda ortaya çıkmaktadır. Örneğin; bir e-posta adresi içeren metnin “@” işaretinden önceki kısmını elde etmek isteyen geliştirici; öncelikle “@” işaretinin bulunduğu karakter sırasını bulmalı, daha sonra kırpma işlemine girmelidir.

Sıra numarasının bulunması için kullanılan fonksiyon “strpos”’dur. Bu fonksiyon adını “string (metin)” ve “position (pozisyon)” kelimelerinin ilk üç harflerinin birleşiminden almaktadır. Fonksiyonun kullanımına örnek olarak aşağıdaki kod parçası ve ekran çıktısı verilebilir.

Resim 7.11: Karakter konumunun tespiti

Page 57: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Konum tespitinde Türkçe karakterlerin öneminin yanı sıra, karakterlerin büyük-küçük harf duyarlılıkları da vardır. Öncelikle bu durumu incelemek için, örneğimizde yer alan “F” harfinin konumunu tespit etmeye çalışabiliriz. Bu durumu temsil eden kod parçası ve ekran görüntüsü aşağıdaki gibi olacaktır.

Resim 7.12: “F” karakterinin konumunun tespiti

Şimdi ise aynı örneği “f” karakterinin konumunun tespiti için yeniden uyarlayalım. Küçük harf kullanıldığı zaman “strlen” fonksiyonun sonucunu görebilmek için gerekli kod ve oluşacak ekran görüntüsü aşağıdaki gibi olacaktır.

Resim 7.13: Karakter değişimi sonrası ekran görüntüsü

Örnekte tarayıcı ekranında herhangi bir sonuç oluşmadığı görülebilir. Bu durumun nedeni, metin içerisinde küçük “f” karakterinin bulunmayışıdır. Örnekten anlaşılabileceği gibi; fonksiyon eşleşme bulamadığı durumlarda “false” değeri geri göndermektedir. Bu sonucu tarayıcı ekranında görebilmek için “echo” komutu yerine “var_dump()” fonksiyonu ile çıktı alabiliriz. Bu durumda ekran görüntüsü ve kod parçası aşağıdaki gibi olacaktır.

Resim 7.14: “var_dump()” fonksiyonu ile çıktı alma işlemi

Konum tespiti yapılırken “strpos” fonksiyonunu büyük-küçük harf duyarsız (case-insensitive) haline getirmek mümkün olmasa da “stripos” fonksiyonu ile aynı işlemi gerçekleştirmek mümkündür. PHP fonksiyonlarında araya giren “i” harfi genel olarak büyük-küçük harf duyarsız (case-insensitive) işlevini temsil etmektedir. Bu durumda ekran görüntüsü ve kod parçası ise aşağıdaki gibi olacaktır.

Page 58: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 7.15: Büyük-küçük harf duyarsız konum tespiti

Bu noktaya kadar bilinen bir karakterin konumunun tespitini yaptık. Ancak; önceki örneklerin tamamı metinde sadece bir kere yer alan bir karakterin konumunu tespit etmekteydi. Aranılan karakterin metin içerisinde birden fazla olması durumunda fonksiyonun vereceği sonuç, karakterin bulunan ilk konumu olacaktır.

Metin içerisinde birden fazla bulunan karakterlerde, aranılan karakterin bütün konumlarının tespit edilmesi mümkündür. PHP, bu işlem için “strpos” fonksiyonuna üçüncü bir parametre tanımlamamıza imkân tanımaktadır. Üçüncü parametre ile aramaya başlanacak nokta belirtilebilmektedir.

Aramaya başlanacak noktanın belirtilmesinin geliştiriciye sağladığı yarar ise, bir önceki arama sonucunu bir artırarak tekrar arama yapabilmesidir. Bu durumda geliştirici, aranan karakterin bulunduğu ikinci konuma ait sıra numarasını elde edecektir. Bu durumu anlayabilmek için aşağıdaki örnekleri inceleyebilirsiniz.

Resim 11.16: “A” karakterinin ilk arama sonucu

Resim 11.17: “A” karakterinin ilk arama sonucunun bir artırılması

Resim 11.18: “A” karakterinin üçüncü arama sonucu

Page 59: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 11.19: “A” karakterinin dördüncü arama sonucu

Dikkat edilirse her seferinde, bir önceki arama sonucunu bir artırarak tekrar arama yapılmış ve sonraki konumun sıra numarası elde edilmektedir. Ayrıca; son arama sonucunda konum tespit edilemediği için “false” değeri dönmektedir. Bu değeri görebilmek için “echo” komutu yerine “var_dump()” fonksiyonunu kullanabilirsiniz.

Konum tespit işlemlerinde Türkçe karakterlerin olması halinde sonuçlarda hatalar olabilmektedir. Bu durumu anlayabilmek için “ATA-AÖF” metni içindeki “Ö” ve “F” harflerini yeniden aratabiliriz. Normal şartlar altında beklediğimiz sonuçta, “Ö” harfinin konumunun bir fazlası “F” harfinin konumu olmalıdır. İncelemek için gerekli kod parçası ve tarayıcıda oluşan ekran görüntüleri aşağıdaki gibi olacaktır.

Resim 11.20: “Ö” harfinin konum sonucu

Resim 11.21: “F” harfinin konum sonucu

Sonuçları incelediğimizde “Ö” harfinin konumu olarak 5 sonucunu, “F” harfinin konumu olarak 7 sonucunu almaktayız. “Ö” harfi için doğru sonucu elde ettiğimizi düşünecek olursak; “F” harfinin 6 olması gereken sıra numarası doğru elde edemediğimiz görülebilir.

Türkçe karakterlerin bulunduğu metin içi konum tespit işlemlerinde “mb_strpos” ve “mb_stripos” fonksiyonları kullanılabilir. Ancak; bu fonksiyonları kullanırken aramaya başlanacak noktanın belirtilmesi zorunludur. Yukarıda yapılan işlemleri tekrar edecek olursak; aşağıdaki sonuçları elde ederiz.

Page 60: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 11.22: “Ö” harfinin konumu “mb_strpos” ile tespiti

Bir önceki denememizde “strpos” fonksiyonunu kullandığımızda “Ö” harfinin konumu olarak 5 değerini elde etmiştik. Bu değerin doğruluğu “mb_strpos” fonksiyonunu kullandığımızda da ortaya çıkmaktadır. “F” harfini de aynı yöntemle tekrar arayacak olursak,

Resim 11.23: “F” harfinin konumunun “mb_strpos” ile tespiti

elde ederiz. Aynı aramayı “strpos” ile yaptığımızda 7 değerini elde etmiştik. Türkçe karakterlerin iki defa sayılması sorunu olarak tanımayabileceğimiz bu sorun, “mb (multibyte)” fonksiyonları ile çözülebilmektedir.

Ayrıca; büyük-küçük harf duyarlı (case-sensitive) olan “mb_strpos” fonksiyonunun yerine, büyük-küçük harf duyarsız (case-insensitive) fonksiyonunu da aramalarda kullanabilirsiniz.

MATEMATİKSEL İŞLEMLERPHP ile birçok matematiksel işlem yapmak mümkündür. Basit dört işlemleri doğrudan

yapabilen PHP, trigonometrik ve logaritmik birçok işlev için bünyesinde hazır hesaplama fonksiyonları barındırmaktadır. Bu fonksiyonların tam listesine http://tr2.php.net/manual/tr/ref.math.php adresinden ulaşılabilir. Aşağıdaki tabloda ise sık kullanılan matematiksel fonksiyonlar ve açıklamaları yer almaktadır.

Fonksiyon Açıklamaabs Sayının gerçek değerini (negatif olanları pozitife çevirir) verir. sin Verilen açının sinüs değerini geri gönderircos Verilen açının kosinüs değerini geri gönderirfloor Aşağı yuvarlama yaparround Tam sayıya yuvarlarceil Yukarı yuvarlama yaparpi Pi değerini verirmax Verilen iki sayıdan maksimum olanını geri gönderirmin Verilen iki sayıdan minimum olanını geri gönderir

Page 61: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

sqrt Verilen sayının karekökünü geri gönderirTablo 7.2: Yaygın olarak kullanılan PHP sayı işleme fonksiyonları

GİRİŞPHP ile geliştirilen uygulamalarda genellikle veritabanlarında bilgi saklanmasına karşın bazı

durumlarda fiziksel dosyalar üzerine de bilgi yazmak gerekebilir. Bu durumların en yaygın olanı işlem kayıtlarının tutulduğu “log” dosyalarıdır. “Log” dosyaları, genellikle normal metin editörleri tarafından okunabilen satırlardan oluşmaktadır. Aşağıdaki resimde IIS (Internet Information Server) tarafından oluşturulmuş bir “log” dosyası kesitine yer verilmiştir.

Resim 8.1: Örnek “log” dosyası

Resim 8.1’de görünen “log” dosyası gibi, kayıtların bir fiziksel dosya üzerinde saklanması veya fiziksel bir dosyadaki bilginin okuması PHP ile mümkündür.

DOSYA İŞLEMLERİPHP dilinde dosya içeriğinin okunması, tekrar yazılması ve dosya oluşturulması birden fazla

yöntem ile gerçekleştirilebilir. Bu yöntemler aşağıdaki gibi listelenebilir.

file_get_contents / file_put_contents fopen / fwrite

Dosya İçeriğinin YazılmasıSunucu sabit diski üzerinde bulunan bir dizinde dosya oluşturmak için öncelikle dizininin

yazılabilir olması gerekmektedir. Varsayılan olarak dizinlerde sadece okuma yetkisi bulunmaktadır. Bu durumun nedeni ise istenmeyen dosya oluşturmalara karşı işletim sistemlerinin aldığı güvenlik önlemidir.

Yazılabilirlik kontrolüPHP dilinde bir dizininin yazılabilir olduğunu kontrol etmek için kullanılabilecek fonksiyon

mevcuttur. Kontrol fonksiyonu olan “is_writeble”’ın kullanımı için aşağıdaki örneği inceleyebilirsiniz.

Page 62: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Örnek olarak sunucunun kök dizininde (C:\wamp\www), “arsiv” adında bir klasör içinde “aof.txt” dosyası oluşturalım. Bu durumda sunucu kök dizininin Windows Gezginindeki görüntüsü aşağıdaki gibi olacaktır.

Resim 8.1: Kök dizinde yer alan dosya ve klasörler

Resim 8.1’de görünen “arsiv" klasörünün içi boş olabilir. Klasörün yazılabilir olduğunun kontrolünü ise “ata-aof.php” betiği ile denetleyeceğiz. Bu durumda “ata-aof.php” dosyasının içeriği ve tarayıcıda oluşacak ekran görüntüsü aşağıdaki gibi olabilir.

Resim 8.2: “arsiv” klasörünün yazılabilir olduğunun kontrolü

Resim 8.3: Tarayıcıda oluşacak ekran görüntüsü

Resim 8.3’de fonksiyon cevap olarak bize “true” değerini göndermektedir. Bu durumda “arsiv” klasörünün yazılabilir olduğunu anlayabiliriz. Eğer yazılabilir olmasaydı aşağıdaki PHP kodunu kullanarak klasörü yazılabilir hale getirebilirdik.

Page 63: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 8.4: Klasörü yazılabilir olarak değiştirme

1. Metot: file_put_contentsSabit disk üzerinde bir dosya oluşturmak veya varolan bir dosyaya eklemeler yapmak için

kullanılabilecek en basit PHP fonksiyonu file_put_contents’ dir. Bu fonksiyon, 2. metotta görülecek olan işlemlerin birleştirilmiş şeklidir.

PHP dilinde file_put_contents fonksiyonu yazılacak dosyanın varlığını (mevcut olup olmadığını) kendisi araştırır. Eğer dosya mevcut ise varolan dosyaya yeni veriyi ekler; dosya mevcut değilse, oluşturarak veriyi içine yazar. Fonksiyonun parametre olarak aldığı değerler aşağıdaki gibi verilebilir.

1. Dosya ismi2. Veri (yazılacak metin)3. Seçenekler

Üçüncü parametre olarak tanımlanan seçenekler, dosya yazma işlemi üzerinde bazı ayrıcalıklar edinmek için kullanılmaktadır. Örneğin; bir verinin yazılması sırasında dosyanın bir başka işlem tarafından da yazılmasını engellemek gibi durumlarda üçüncü parametre kullanılabilir.

file_put_contents fonksiyonu kullanarak bir dosya içerisine veri yazmak için aşağıdaki örnek kullanılabilir.

Resim 8.5: 1. Metot ile dosyaya bilgi yazılmasıFonksiyon cevap olarak, dosya yazma işlemi başarılı olursa, yazılan verinin bayt değerini;

başarısız olursa “false” değerini geri gönderecektir. Örneğimizde; yazma işlemi başarılı olduğu için; “arsiv” klasöründe, “aof.txt” adında bir dosya oluşturulmuş ve içerisine “ATA-AOF” metni yazılmıştır. Her karakter bir bayt olduğu için tarayıcıda cevap olarak “7” değeri görüntülenebilir. Dizin, dosya ve tarayıcı görüntüleri aşağıdaki gibi olabilir.

Page 64: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 8.6: Tarayıcıda oluşacak ekran görüntüsü

Resim 8.7: “arsiv” dizininin içeriği

Resim 8.8: Oluşturulan dosyanın içeriği

2. Metot: fwritePHP dilinde bir dosya içerisine veri yazmak için kullanılabilecek en kapsamlı fonksiyon

“fwrite”’dir. Bu fonksiyon, bir dosya üzerinde işlem yapmak için doğrudan kullanılamaz. Dosya içeriğine veri yazabilmek için aşağıdaki sıralama ile fonksiyonların çalıştırılması gerekmektedir.

1. fopen 2. fwrite3. fclose

Yukarıda sıralanan fonksiyonlar ile öncelikle yazılacak dosya açılmalı, daha sonra içeriği yazılmalı ve dosya tekrar kapatılmalıdır. Bir önceki konuda yer alan örneğin aynısını 2. metot ile uygulayacak olursak; PHP kodları, tarayıcı ekran görüntüsü ve oluşturulan dosyanın içeriği aşağıdaki gibi olacaktır.

Page 65: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 8.9: 2. Metot ile dosyaya yazdırma

Resim 8.10: Tarayıcı ekran görüntüsü

Resim 8.11: Oluşturulan dosyanın içeriği

Resim 8.11’de görüldüğü gibi, dosya içeriğini sıfırlanmamış; varolan bilginin devamı olarak yeni bilgi dosyaya eklenmiştir. Bu durumun nedeni, Resim 8.9’da yer alan 4. satırda, “fopen” fonksiyonuna dosya adından sonra, 2. parametre olarak “a+” değerini vermemiş olmamızdır. Bu parametrenin alabileceği değerler ve anlamları aşağıdaki tabloda verilmiştir.

Kip

Açıklama

r Dosya, sadece okuma için açılır, açılma sonrası konum dosyanın başlangıcıdırr+ Dosya, hem okuma hem de yazma için açılır, konum dosyanın başlangıcıdır

wDosya sadece yazmak için açılır; dosya konumlayıcı dosyanın başlangıcına yerleştirilir ve dosya uzunluğu sıfır yapılır. Dosya mevcut değilse oluşturulmaya çalışılır.

w+Dosya hem okumak hem de yazmak için açılır; dosya konumlayıcı dosyanın başlangıcına yerleştirilir ve dosya uzunluğu sıfır yapılır. Dosya mevcut değilse oluşturulmaya çalışılır.

Page 66: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

aDosya sadece yazmak için açılır; dosya konumlayıcı dosyanın sonuna yerleştirilir. Dosya mevcut değilse oluşturulmaya çalışılır.

a+Dosya hem okumak hem de yazmak için açılır; dosya konumlayıcı dosyanın sonuna yerleştirilir. Dosya mevcut değilse oluşturulmaya çalışılır.

x

Dosya oluşturulur ve sadece yazmak için açılır; dosya konumlayıcı dosyanın başlangıcına yerleştirilir. Dosya zaten mevcutsa fopen() FALSE döndürürek başarısız olur ve E_WARNING seviyesinde bir hata üretir. Dosya mevcut değilse oluşturulmaya çalışılır. Bu işlem, open(2) sistem çağrısı için O_EXCL|O_CREAT seçeneklerini belirtmeye eşdeğerdir.

x+

Dosya oluşturulur ve hem okumak hem de yazmak için açılır; dosya konumlayıcı dosyanın başlangıcına yerleştirilir. Dosya zaten mevcutsa fopen() FALSE döndürürek başarısız olur ve E_WARNING seviyesinde bir hata üretir. Dosya mevcut değilse oluşturulmaya çalışılır. Bu işlem, open(2) sistem çağrısı için O_EXCL|O_CREAT seçeneklerini belirtmeye eşdeğerdir.

Tablo 8.1: “fopen” fonksiyonunun ikinci parametre değerleri

Fonksiyon hakkında daha fazla bilgi almak için, Tablo 8.1 verilerinin kaynağı olan http://www.php.net/manual/tr/function.fopen.php adresine bakabilirsiniz.

Dosya İçeriğinin OkunmasıPHP ile bir dosyanın içeriğinin yazılmasının yanı sıra, içeriğin okunması da gerekebilir. Bu tür

durumlarda PHP dili bizlere yine 2 metot sunmaktadır. Bu metotlar aşağıdaki gibi sıralanabilir.

1. file_get_contents2. fread

Bu metotlardan ilki olan “file_get_contents”, dosya içeriğinin tamamını bir metin değeri gibi geri gönderir. İkinci yöntem ise, dosya içeriğini satır satır okuyarak geri gönderir. Bu nedenle nadir bir kullanıma sahip olan “fread” yöntemi sadece çok büyük boyutlara sahip dosyalar okunurken kullanılmalıdır.

Önceki konuda yazdığımız “aof.txt” dosyasının içeriğini alarak; tarayıcı ekranına basan bir PHP betiği ve ekran görüntüsü aşağıdaki gibi olabilir.

Resim 8.12: Dosya içeriğinin okunması için PHP kodları

Resim 8.13: Okunan içeriğin tarayıcıda oluşturduğu ekran görüntüsü

Page 67: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 8.12’de dosyanın içeriği okunduktan sonra elde edilen değer tamamen bir metin (string) şeklindedir. PHP dilinde yer alan metin işleme fonksiyonları ile elde edilen değişken üzerinde düzenleme işlemleri kolaylıkla yapılabilmektedir. “file_get_fontents” fonksiyonu ile ayrıca bir internet adresi içeriği alınabilir. Bu durumda elde edilen veri, HTML etiketlerinden meydana gelen sitenin kaynak kodları olacaktır. Bu durumu anlamak için aşağıdaki PHP kodları ve ekran görüntüsü incelenebilir.

Resim 8.14: Bir internet sitesinin okutulması

Resim 8.15: Tarayıcı ekranında okunan içeriğin yazdırılması

Varlık KontrolleriBazı durumlarda dosya veya klasörün sunucuda var olduğunun kontrolü gerekebilir. Dosya ve

klasörün fiziksel olarak sunucu sabit diskinde varlığını tespit için aşağıdaki fonksiyonlar kullanılabilir.

file_exists – dosyanın varlık tespiti is_dir – dizinin varlık tespiti

Dosya varlık kontrolüDosyanın fiziksel olarak mevcut olup-olmadığını kontrol etmek gerekebilir. Özellikle dosya

işlemlerinde hata mesajlarının kaynağı genellikle dosyanın var olmamasından kaynaklanmaktadır. Bu tür olumsuz durumların önüne geçmek için PHP dilinde “file_exists” fonksiyonu kullanılmaktadır.

Parametre olarak sadece dosyanın adını alan “file_exists” fonksiyonunun kullanımı sonrasında, “true” veya “false” gibi doğruluk (boolean) değeri geri dönecektir. Örnek olarak aşağıdaki kod parçası ve tarayıcıdaki ekran görüntüsü incelenebilir.

Resim 8.16: Dosya varlığının PHP ile kontrolü için örnek betik

Page 68: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 8.17: Varlık kontrolünün tarayıcıda oluşturacağı ekran görüntüsü

Dizin varlık kontrolüBir klasörün sunucuda var olduğunu kontrol etmek gerekebilir. Bu durumlarda “is_dir”

fonksiyonu kullanılmaktadır. Fonksiyon, parametre olarak sadece dizinin yolunu beklemektedir.“is_dir” fonksiyonu çalıştırıldığında cevap olarak, “file_exists” fonksiyonu gibi, “true” veya

“false” gibi doğruluk (boolean) değeri geri göndermektedir. Bu nedenle çıktıları tarayıcı ekranında görebilmek için “var_dump” fonksiyonu kullanmak gerekmektedir. Örnek PHP kodları ve tarayıcı görüntüsü aşağıdaki gibi verilebilir.

Resim 8.18: Dizinin varlık kontrolü için PHP kodları

Resim 8.19: Varlık kontrolü sonucunun tarayıcı ekranında görüntülenmesi

Dosya varlık kontrolü için kullanılan “is_dir” fonksiyonun bir benzeri olan “is_file” fonksiyonu da PHP dilinde mevcuttur. Bir dosyanın varlığı ayrıca bu fonksiyon ile de kontrol edilebilmektedir. Ancak; “is_file” fonksiyonu sadece sıradan dosyalar için “true” cevabını vermektedir. Örneğin; bir simge dosya (link) için “is_file” komutu, varlık mevcut olsa bile, “false” değerini geri gönderecektir.

FORM VE ELEMENTLERİ

Programlamada kullanıcıdan bilgi almada çalışacak program ihtiyacı çok azdır. Genellikle kullanıcılardan bilgi girişi istenir ve girilen o bilgiler işlenerek işlem yapılır. Bu bilgi girişi internet tabanlı programlamada genellikle form ve elementleri ile oluşur. Form ve elementleri html elementleridir.

Kullanım şekli: <form action=”adres” method=”metot”>elementler<form>

Resim 9.1: Form

Form elementinin parametrelerinden olan method genel olarak iki değer alabilir. Bunlar;

Page 69: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

GET: Eğer formun method kısmına bu değer yazılırsa formdaki gönderilen bilgiler tarayıcının adres çubuğunda gözükür ve en fazla 255 karakter veri gönderilebilir. Gönderilen bilgiler gözüktüğü için POST methoduna göre biraz daha güvensiz ancak daha hızlıdır.

POST: Eğer formun method kısmına bu değer yazılırsa formdaki gönderilen bilgiler tarayıcının adres çubuğunda gözükmez ve sunucu ayarına göre sınırsız boyutta veri gönderilebilir. GET methoduna göre biraz daha güvenli ancak daha yavaştır.

Kullanıcının veri gönderebilmesi için kullanılan html elementlerine form elementleri denir. Bu elementler kullanıcıların daha kolay veri gönderebilmesi için birçok tür vardır.

Bunlardan bazıları;

Tablo 9.1: Form elementleritür açıklamatext Kısa metin girişi içinpassword Şifre girişi için

submitForm verilerinin gönderilmesi için kullanılan buton

textarea Uzun metin girişi için

Form elementlerinini kullanımı şekli textarea haricinde aynıdır. Bu elementlerin varsayılan değerinin kullanımı zorunlu değildir.

Kullanım şekli: <input type=”tür” name=”nesne adı” value=”değer”/>Textarea kullanım şekli: <textarea name=”adı”> değer </textarea>

Resim 9.2: Form elementleri

FORM ELEMENTLERİNDEKİ VERİLERİN İŞLENMESİDaha önceki örneklerimizde bazı form elementlerinin kullanım şekli gösterilmiştir. Şimdi de

bu form elementlerine girilen değerlerin PHP’tarafından nasıl işleneceğini görelim.Formdaki elementin değerini almak PHP’de “$_GET” ve “$_POST” global değişkenleri

kullanılır ve bu global değişkenler dizi yapısındadır.Kullanım şekli: $_GET[input’un name özelliğinde yazılan ad]

$_POST[input’un name özelliğinde yazılan ad]

Bir formun içerine “text” alanı ekleyerek “GET” metodu ile girilen bu değeri ekrana yazdıralım. Bu örnek için önce “form.php” dosyası oluşturalım.

Resim 9.3: Form elementleri

Page 70: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Yukardaki örnekte “yazi” adından bir text alanı oluşturduk ve “Gönder” botununa tıklanınca doldurulan bilgileri “islem.php” dosyasına gönderilecek. Bu örnekte dikkat edilmesi gereken kısım formun “method” özelliğine “get” yazmamız. Bu özelliği “get” olarak ayarladığımız için gönderdiğimiz veriler adres çubuğunda görünecek.

Resim 9.4: Form elementleri

Yukardaki örnekte formda “name” özelliği “yazi” olanın içeriğini ekrana yazdırdık. Formda doldurduğumuz “yazi” inputunun değerinin adres çubuğunda gözükmektedir. Oluşturulan formun metodu “get” olduğu zaman PHP’de gönderilen veriyi alırken “$_GET” global değişkeni kullanılır.

Yukarıdaki örneği bu defa da “post” metodu ile yapalım.

Resim 9.4: Form elementleri

Formumuzu oluşturduk. Bu sefer “method” kısmına “get” yerine “post” yazdık.

Resim 9.5: Form elementleri

Aynı işlmeleri “post” metodu ile yaptığımızda gönderilen verinin adres çubuğunda gözükmez. Oluşturulan formun metodu “post” olduğu zaman PHP’de gönderilen veriyi alırken “$_POST” global değişkeni kullanılır.

OTURUM İŞLEMLERİBir değişkene değer atadığımızda bu değer o sayfa için geçelidir. Bu değişkeni başka sayfada

kullanamayız. Bir sayfada tanımlanan değişkeni başka bir sayfalarda kullanmak için “$_SESSION” global değişkeni kullanılır. Bu değişken dizi yapısındadır. Bu global değişkeni tanımlamandan veya çağırmadan önce session_start() fonksiyonunun kullanımı zorunludur.

Page 71: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 9.6: Oturum işlemleri

Yukardaki örnekte “$uye_adi” adlı değişkene “Ahmet” değeri vererek tanımladık ve bu dosyayı “tanimla.php” adı ile kaydettik. Bu dosyada tanımladığımız değişkeni “getir.php” adındaki dosyadan çağırmayı deneyeceğiz.

Resim 9.7: Oturum işlemleri

Yukardaki örnektede görülebileceği gibi sıradan değişkenler bir sayfada tanımlandığında başka sayfadan çağırılamaz. Fakat “$_SESSION” global değişkeni bu işlemi yapabilmektedir.

Resim 9.8: Oturum işlemleri

Yukadaki örnekte once sesion_start() fonksiyonu ile bu sayfada “$_SESSION” global değişkeni ile işlem yapacağımızı belirtik ve “$_SESSION” değişkenini tıpkı dizilerde olduğu gibi index vererek tanımladık. Bu sayfayı “tanımla.php” olarak kaydettik. Şimdide bu sayfada tanımladığımız değişkeni “getir.php” adından sayfa oluşturarak bu sayfada ekrana yazdıralım.

Resim 9.9: Oturum işlemleri

Yukardaki örnekte de görülebileceği gibi “tanımla.php” de oluşturduğumuz bir değeri daha sonra “getir.php” sayfasında ekrana yazdırdık.

PHP bu işlemi gerçekleştirmek için önce tarayıcımıza bir eşşiz bir değer aynı T.C Kimlik nuralarında olduğu gibi gönderiyor ve sunucumuzda bu değer adında bir dosya oluşturuyor. Biz “$_SESSION” değişkenine değer atadığımızda bilgileri bu dosyaya kaydediyor. Kişinin tarayıcısında bu essiz değer varsa PHP o dosyadaki değeri bize veriyor biz de istediğimiz işlemleri gerçekleştirebiliyoruz.

“$_SESSION” değişkeninin en fazla kullanım amacı sayfalarımızı sadece bizim belirlediğimiz kullanıcıların ziyaret edebilmesini sağlamaktır. Bu işlemi yapmadan önce isset() fonksiyonunu kullanımını anlatılacaktır. Bu fonkisyon eğer değişken tanımlandı ise doğru “true” tanımlanmadı ise yanlış “false” yanıtını döndürür.

Page 72: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Kullanım şekli: isset(değişken)

Resim 9.10: Oturum işlemleri

Yukardaki örnekte “$_SESSION[“isim”]” değişkeni daha önce tanımlanmadığı için isset() fonksiyonu yanlış “false” yanıtını döndürdü. Şimdi de “$_SESSION[“isim”]” adındaki değişken tanımlayıp bu işlemi tekrar yapalım.

Resim 9.11: Oturum işlemleri

Yukardaki örnekte “$_SESSION[“isim”]” adlı değişken tanımlandığı için isset fonksiyonu doğru “true” yanıtını döndürdü.

Yukarda gösterilen işlemleri kullanarak bir sayfamızdaki verileri sadece “$_SESSION[“isim”]” değişkeni tanımlanmışsa ekrana “Giriş başarılı” tanımlanmamışsa “Giriş başarısız” yazdıralım.

Resim 9.12: Oturum işlemleri

Yukardaki örnekte “Giriş başarılı” yazmasının nedeni daha önceden “$_SESSION[“isim”]” adlı değişkeni tanımlamamızdır. Hiç bir kod değiştirmeden sayfayı ya farklı bir tarayıcıda veya tarayıcı geçmişini silerek yenileyelim.

Page 73: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 9.12: Oturum işlemleri

Tarayıcımızın geçmişini sildikten sonra sayfayı yenilediğimizde ekranda “Giriş başarısız” yazdığı görülmektedir.

Şimdiye kadar yaptığımız işlemleri birleştirerek önce bir form oluşturalım. Bu formda kullanıcı adını ve şifresini girsin. Eğer adı alanına “Ahmet” şifre alanına da “123” yazarsa “islem.php” sayfasında “Hoşgeldin Ahmet”, farklı bilgiler yazarsa da “Yetkiniz yoktur” mesajı ekrana gelsin.

İlk olarak formu oluşturalım ve “login.php” adıyla kaydedelim.

Resim 9.13: Oturum işlemleri

Yukardaki örnekte bir tane “text” tipinde kullanıcı adını yazmak için bir tane de “password” tipinde şifre yazmak iki tane veri alanı oluşturduk. Oluşturduğumuz formun ekran görüntüsü aşağıda verilmiştir.

Resim 9.14: Oturum işlemleri

Şimdi de sadece bizim belirlediğimiz kişilerin görebileceği sayfayı oluşturalım.

Page 74: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 9.15: Oturum işlemleri

Yukardaki örnekte “login.php” sayfasından gelen “$_POST[“isim”]” değişkeni “Ahmet” ve “$_POST[“sifre”]” değişkeni “123” ise girilen bilgileri “$_SESSION” değişkenine atandı ve ekrana “Hoş geldin Ahmet”, değilse ekrana “Yetkiniz yoktur” yazıldı.

Formumuzda “Kullanıcı Adı” kısmına “Mehmet” “Sifre” kısmına da “123” yazarak “Gönder” butonuna tıklayalım.

Resim 9.16: Oturum işlemleri

Kullanıcı adına “Ahmet” yerine “Mehmet” yazdığımız için ekran görüntüsü aşağıdaki gibi olur.

Resim 9.17: Oturum işlemleri

Formumuzda “Kullanıcı Adı” kısmına “Ahmet” “Sifre” kısmına da “123” yazarak “Gönder” butonuna tıkladığımızda ekran görüntüsü aşağıdaki gibi olacaktır.

Page 75: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 9.18: Oturum işlemleri

Yukardaki örnekte kullanıcı adı ve şifre bilgileri istediğimiz şekilde girildiği için ekrana “Hoşgeldin Ahmet” yazıldı.

Kullanıcı grupları oluşturarak farklı kullanıcıları farklı sayfalara yetkilendirme yapabiliriz.Bu örneğimizde “ahmet.php”, “mehmet.php”, “diger.php” dosyaları oluşturalım. Ahmet

kullanıcısı “ahmet.php”, Mehmet kullanıcısını ise “mehmet.php” dosyasının içeriğini görebilsin. Formu dolduran herhangi bir kişi (Ahmet ve Mehmet dahil) “diger.php” dosyasının içeriğini görebilsin.

Aşağıdaki işlemleri gerçekleştirmeden önce tarayıcınızın geçmişini silmeyi unutmayınız.Kişilerin adlarını girebilmesi için “login.php” dosyasını oluşturarak içerisine aşağıdaki kodları

yazalım.

Resim 9.19: Oturum işlemleri

Kullanıcın girdiği bilgiyi “$_SESSION” değişkenimize atayalım ve oluşturacağımız sayfalara kolay erişim sağlamak için link verelim.

Resim 9.19: Oturum işlemleri

Yukardaki örnekte formdan gelen veriyi $_SESSION değişkenine atadık ve ekrana “Hoşgeldin ” formdan gelecek isim yazdırdık. Kullanıcı adına “Ahmet” yazıp “Gönder” butonuna tıklayınca aşağıdaki ekran görüntüsü oluşacaktır.

Page 76: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 9.20: Oturum işlemleri

Yukardaki örnekte “Ahmet”, “Mehmet” veya “Diğer” yazılarının üzerine tıklanınca sayfalar hata verecektir. Çünkü henüz o sayfaları oluşturmadık. Şimdi “ahmet.php” sayfasını oluşturalım.

Resim 9.21: Oturum işlemleri

Yukardaki örnekte eğer önceki formda kullanıcı adı olarak “Ahmet” yazılmışsa ekrana “Yetkiniz var” farklı bir şey yazılmışsa “Bu sayfayı sadece Ahmet görebilir” yazısı gelecek. Ben daha önceden kullanıcı adı kısmına “Ahmet” yazdığım içi ekran görüntüsü aşağıdaki gibi olacaktır.

Resim 9.22: Oturum işlemleri

Şimdi de “mehmet.php” adlı sayfanın kodlarını yazalım.

Page 77: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 9.23: Oturum işlemleri

Yukardaki örnekte eğer önceki formda kullanıcı adı olarak “Mehmet” yazılmışsa ekrana “Yetkiniz var” farklı bir şey yazılmışsa “Bu sayfayı sadece Mehmet görebilir” yazısı gelecek. Ben daha önceden kullanıcı adı kısmına “Ahmet” yazdığım içi ekran görüntüsü aşağıdaki gibi olacaktır.

Resim 9.23: Oturum işlemleri

Şimdi de “diger.php” adlı sayfanın kodlarını yazalım.

Resim 9.24: Oturum işlemleri

Yukardaki örnekte eğer önceki formda kullanıcı adı olarak “Ahmet” yazılmışsa ekrana “Merhaba AHmet”, “Mehmet” yazılmışsa “Merhaba Mehmet” veya farklı bir isim yazılmışsa “Merhaba” formda yazılan isim yazacak. Ancak form doldurulmadan direk bu sayfaya erişmek isteyen kişinin ekranında “Formu” doldurunuz yazacak. Ben daha önceden kullanıcı adı kısmına “Ahmet” yazdığım içi ekran görüntüsü aşağıdaki gibi olacaktır.

Page 78: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 9.25: Oturum işlemleri

Son olarak “$_SESSION” değişkeninde bulunan bütün değerleri silmek için session_destroy() fonksiyonu kullanılır.

Kullanım şekli: session_destroy()

Resim 9.26: Oturum işlemleri

GLOBAL DEĞİŞKENLER PHP dilini kullanarak geliştirilen uygulamaların bazı aşamalarında sunucunun sahip olduğu

özellikleri, kullanıcı bilgisayarına ait bilgileri veya kullanıcı adı ve şifresi kullanılarak girilen sistemlerde oturum bilgilerine ihtiyaç duyulabilir.

İnternet uygulamalarında kullanıcıların sayısının fazla olmasından kaynaklanan önemli durumlardan birisi de işlemlerin kayıtlarının (log) tutulmasıdır. Bütün internet programcıları yazdıkları programlar için kayıt tutmak zorundadır. Bu zorunluluk programcıları, kanunlar karşısında kendini savunabilir düzeye getirmektedir.

İnternet programları için tutulan işlem kayıtlarının detayları, yapılan işlemin adı, kullanıcıdan alınan bilgi, zaman ve ip adresi gibi değişkenleri barındırmalıdır. Bu değişkenler içerisinde bulunan “ip adresi” bilgisi, süper küresel değişken olan $_SERVER içerisinde; alınan bilgi ise $_REQUEST süper küresel değişkeninde yer almaktadır.

SÜPER KÜRESELLER Global değişkenler veya süper küreseller, uygulamanın her anında mevcut bulunurlar. Bu

değişkenlere erişmek için özel bir fonksiyon yazmaya ihtiyaç yoktur. İki boyutlu diziler halinde bekleyen bu değişkenler, belirli özel anahtarlar kullanmaktadır.

PHP’de bulunan süper küreseller öntanımlıdır. Ancak; bu değişkenlere geliştirici müdahale ederek içeriğini değiştirebilir. Bir başka söylemle; bir fonksiyon içerisinde $_POST gibi bir süper değişken kullanacaksanız, bu değişkeni fonksiyona parametre olarak göndermenize gerek yoktur. Fonksiyon içerisinde doğrudan kullanabilirsiniz.

4.1.0 sürümü ile PHP’ye dahil olan süper küresellerin tablosu aşağıdaki gibi verilebilir.

Süper Küresel Açıklama$GLOBALS Kullanıcının tanımladığı bütün süper küresel değişkenleri içerir$_SERVER Sunucu bilgilerini içerir$_GET Kullanıcı tarayıcısının adres çubuğundan gönderilen veriler$_POST Kullanıcıdan sunucuya POST metodu ile gönderilen veriler$_FILES Sunucuya aktarılan dosyalar$_COOKIE Kullanıcıda bırakılan çerez bilgileri

Page 79: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

$_SESSION Oturum bilgileri$_REQUEST $_GET, $_POST ve $_COOKIE verilerinin tamamını içerir$_ENV Ortam değişkenleri

Tablo 10.1: PHP’nin sağladığı super değişkenler

İnternet programcıları, geliştirdikleri PHP kodlarında barınan değişkenleri önlerine “global” ifadesi ekleyerek süper küresel bir hale dönüştürebilirler. Ancak; çok dikkat edilmelidir ki; “$_” ifadesi ile başlayan süper küreseller, kötü niyetli kullanıcıların odağındadır. Sunucuya yapılan saldırılar yoğun bir şekilde bu değişkenler kullanılarak yapılmaktadır. Bu nedenle, süper küresel değişkenlere doğrudan erişim asla önerilmemektedir.

Geliştirilen bir uygulamada süper küresel değişkenlere erişmek için de fonksiyon yazılabilir. Bu fonksiyon ile süper küresel değişkenden alınan verinin içeriği kontrol edilerek istenmeyen durumlara karşı önlem alınmış olacaktır. Örneğin; süper küresel değişken bilgisini inceleyen fonksiyon, değişken içerisinde hoş olmayan bir girdi tespit ederse (örn. “SELECT UNION” gibi) geriye bilgi göndermeyerek uygulamanın ilerleyişini durduracaktır.

Sunucu DeğişkeniPHP tarafından rezerve edilen bir değişken olan $_SERVER dizisi başlıklar, istemci bilgileri ve

betiklerin konumları gibi bilgileri taşımaktadır. Bu değişkenin içeriğini Apache veya IIS gibi sunucu servisleri oluşturmaktadır. Bu nedenle bütün $_SERVER değerleri her sunucuda oluşturulmayabilir.

Sunucunuzun sağladığı $_SERVER değişkeni bilgilerini görebilmek için aşağıdaki kod parçasını yazabilirsiniz.

Resim 10.1: Süper küresel değişken içeriği için PHP kod örneği

Page 80: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 10.2: $_SERVER değişkeninin içeriğiResim 10.2’de içeriğinin bir kısmı verilen $_SERVER değişkeninin bir dizi (array) tipine sahip

olduğunu ilk satırdan görebiliriz. PHP kodlarında diğer dizilere erişim sağlanan yöntemi kullanarak $_SERVER değişkeninin sakladığı bilgilere erişmek mümkündür.

$_SERVER değişkeninin barındığı bazı bilgiler özellikle sıkça kullanılmaktadır. Bu bilgileri ve örnek sonuç değeleri aşağıdaki gibi açıklayabiliriz.

Kullanıcı IP adresiUygulamayı kullanan kişinin IP adresini almak için REMOTE_ADDR değeri kullanılmaktadır. Bu

IP adresi kişinin bilgisayarının yerel IP adresi değil; internet sağlayıcısının kişinin kullandığı modem veya bir başka bağlantı aygıtına atadığı IP adresidir. IP adresini alabilmek için kullanılacak kod ve ekran görüntüsü aşağıdaki gibi verilebilir.

Resim 10.3: Kullanıcının IP adresinin alınması için PHP kodları

Page 81: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 10.4: IP adresinin ekran çıktısı

Resim 10.4’de görüntülediğimiz IP adresinin yerel bir adres olan 127.0.0.1 olarak görüntülenmesinin nedeni; WampServer ile kendi bilgisayarımıza sunuculuk yaptırmamızdan kaynaklanmaktadır. Normal şartlar altında bu değer 90.32.122.41 gibi bir değere sahip olacaktır. Sahip olduğunuz IP adresini öğrenmek için http://www.whatismyip.com/ adresini ziyaret edebilirsiniz.

Kişinin yaptığı işlemler kayıt altına alınacağı zaman mutlaka her işlemin yanında bu şekilde bir IP adresi bulunmalıdır. Çünkü kişi aynı tarayıcı veya cihazla bağlantı değiştirerek işlem yapabilir.

Kullanıcı tarayıcısıUygulamayı ziyaret eden kişinin IP adresinin yanı sıra; kullandığı işletim sistemi ve tarayıcıya

ait bilgiler de elde edilebilir. Bu bilgiler, beklendiği gibi Internet Explorer, Windows 7 gibi değerleri doğrudan içermez.

Tarayıcı bilgilerine erişmek için HTTP_USER_AGENT değişkeninin sahip olduğu bilgiden yararlanılır. Bu bilgiyi kullanmak için gerekli PHP kodu ve örnek ekran çıktısı aşağıdaki gibi olabilir.

Resim 10.5: Tarayıcı bilgisinin alınması için PHP kod örneği

Resim 10.6: Örnek bir tarayıcı bilgisi

Kişinin tarayıcı bilgisinin kullanıldığı önemli noktalardan birisi güvenliktir. Bu bilgiden yararlanarak üretilen eşsiz bir kod (örn. MD5) kullanılarak oturum çerezi oluşturulur. Bu şekilde uygulamanızda var olabilecek bir XSS açığına yönelik saldırılar devre dışı kalacaktır.

Tarayıcının sahip olduğu değerleri okunabilir bir formatta görebilmek için https://github.com/cbschuld/Browser.php adresindeki GitHub projesini inceleyebilirsiniz.

Page 82: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Yönlendiren adresHTTP_REFERER değeri ile kullanıcının, ziyaret edilen sayfaya gelmeden önce ziyaret ettiği

yönlendiren sayfa bilgisi bulunabilir. Ancak; dikkat edilmelidir ki; bu bilgi her zaman var olmayabilir.Yönlendiren adres bilgisini alabilmek için gerekli olan kod örneği aşağıdaki gibi verilebilir.

Resim 10.7: Yönlendirme bilgisi için PHP kod örneği

Yukarıdaki kod parçası sonrasında bir hata mesajı alabilirsiniz. Hata almadan sonucu görebilmek için başka bir sayfadan; yukarıdaki kodu yazdığınız sayfaya bağlantı (link) verin ve tıklayarak ulaşın. Bu şekilde yönlendirme yapılmış olacağı için HTTP_REFERER değeri boş olmayacak ve hata mesajı almayacaksınız.

Kök dizinİnternet uygulamasının yayınlandığı servisin kök dizininin fiziksel dosya yolunu belirtmektedir.

Bu şekilde “include” yaparak uygulamanıza dâhil ettiğiniz PHP kodlarına kesin yollar belirtebilirsiniz. Ayrıca; fiziksel dosya işlemlerinde de kök dizin bilgisine sıkça ihtiyaç duyulmaktadır.

Kök dizin bilgisi, uygulamanıza bağlı değildir. İç içe dizinlerden oluşmuş birden fazla dokümanlar da olsa hepsinde aynı sonuç alınacaktır.

Sunucunun kök dizin bilgisini almak için DOCUMENT_ROOT değişkenini kullanılır. Bilgiyi alabilmek için kullanılabilecek örnek kod ve tarayıcıda oluşturduğu ekran çıktısı aşağıdaki gibi verilebilir.

Resim 10.8: Sunucunun kök dizinini almak için kod örneği

Resim 10.9: Örnek kök dizin çıktısı

Page 83: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Oturum DeğişkeniGenellikle üyelik yöntemi kullanan internet uygulamalarında ziyaretçilerin giriş yapabilmeleri

için, kullanıcı adı ve şifre ile doğrulama yapılmaktadır. Oturum değişkenleri bu doğrulamayı sunucu hafızasında tutarak ziyaretçiden her defasında aynı bilgilerin istenmesinin önüne geçmektedir.

Oturum değişkenleri ayrıca yetki gerektiren PHP sayfalarının ilk satırlarında kontrol edilerek; oturumun açılıp-açılmadığı teyit edilir. Bu şekilde yetki gerektiren sayfaların oturum açılmadan görülmesinin önüne geçilir.

Oturum değişkeni $_SESSION’dur. Bu değişken oturum açılmadan kullanılmaya çalışılırsa aşağıdaki gibi bir hata çıktı sonucu alınabilir.

Resim 10.10: Tanımlanmamış oturum değişkeni hatasıOturumun başlatılması

Oturum değişkeninin kontrol edilmesi, bir değerin oturum değişkeninde saklanması gibi işlemlerin yapılabilmesi için sayfanın ilk satırlarında oturumun başlatılması gerekir. Geliştiriciler, kontrol işlemlerinde oturumun başlatılmış olmasını değil; oturum değişkeni içindeki bilginin doğruluğunu dikkate alırlar.

Bir oturumun başlatılması için aşağıdaki kod parçasında görülen fonksiyon çalıştırılır.

Resim 10.11: Oturumun başlatılması için gerekli kod

Bu fonksiyon doküman içerisinde sadece bir defa yazılmalıdır ve bu fonksiyondan önce ekrana çıktı gönderen “echo” gibi bir kod kullanılmamalı ve <?php satırından önce boşluk veya veri bulunmamalıdır. Aksi takdirde ekrana daha önce oturumun başlatıldığında dair bir uyarı mesajı gelecektir. Bu mesajının görüntüsü aşağıdaki gibi verilebilir.

Resim 10.12: Oturumun daha önce başladığını belirten hata mesajı

Normal şartlar altında geliştirici bir sayfa içerisinde iki defa oturum başlatacak olan fonksiyonu çağırmaz. Bu durum genellikle sayfaya daha sonra eklenen (include) PHP kodlarının içerisinde de oturum başlatma komutu olması halinde ortaya çıkacaktır. Bu durumun önüne geçmek için 1. Ünite’de anlatılan hata gizleme metotlarından birini kullanabiliriz.

Aşağıdaki kod örneğinde oturumun daha önce başlaması halinde ekranda belirecek hatayı gizlemesi için fonksiyonun önüne “@” işareti eklenmiştir.

Page 84: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Resim 10.13: Oluşabilecek hata ve uyarı bildirimlerinin ekrana verilmesini engellemek için “@” ifadesi eklenmesi

Oturum başlatıldıktan sonra $_SESSION dizisine istenen bir değişken eklenebilir. Bu değişken için genel olarak “kullanıcı adı” seçilmektedir. Ayrıca; oturum değişkeninin içerisine yetki derecesi, yetkili olduğu uygulamalar gibi detay bilgileri de eklenebilir. Bu şekilde bir süper küresel değişkenin içerisine aktarılan veriler, oturumun başlatıldığı her sayfada, birbirine aktarılmaya ihtiyaç duyulmaksızın kullanılabilir.

Aşağıdaki örnekte kullanıcı adı ve şifre kontrolü yapıldıktan sonra başlatılan bir oturuma örnek olabilecek PHP kodları ve tarayıcıda oluşan ekran görüntüsü yer almaktadır.

Resim 10.14: Oturum başlatma kod örneği

Resim 10.14’de yer alan kodlarda, 9. satırda, $_SESSION[“kullanici”] değişkeni oluşturulmuş bulunmaktadır. Eğer 7. satırda belirtilen koşul doğrulanırsa 9. satır çalıştırılacak ve oturum başlatılacaktır. Ancak; bu koşul sağlanmadığı için tarayıcıda oluşan ekran görüntüsü aşağıdaki gibi olmaktadır.

Resim 10.15: Oturum açılmadığında görülecek ekran görüntüsü

Page 85: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Oturumun sonlandırılmasıKullanıcıların uygulamadan güvenli çıkış yaparak ayrılmaları durumunda, sunucu tarafında da

oturum değişkeninin boşaltılması ve oturum sonlandırıcı fonksiyonun çalıştırılması gerekir. Oturumu sonlandırmak için aşağıdaki kod örneği kullanılabilir.

Resim 10.16: Oturumun kapatılması için PHP kod örneği

Oturum uygulamasıBu noktaya kadar kullanıcı bilgilerinin alınması, bir oturumun başlatılması, kontrolü ve

sonlandırılması hakkında bilgi verildi. Şimdi bu bilgilerden yararlanarak kullanıcı kontrollü bir PHP uygulaması yazabiliriz.

Geliştireceğimiz PHP uygulaması üç sayfadan oluşacaktır. Bu sayfalar ve dosya adları aşağıdaki gibi verilebilir.

Giriş formu – index.html Kullanıcı kontrolü – kontrol.php Yetki gerektiren sayfa – yetkili.php

Giriş formu olarak kullanılacak sayfa, kullanıcı adı ve şifresini alarak kullanıcı kontrol sayfasına gönderecektir. Bu sayfa da eğer bilgiler doğru ise yetkili sayfasına; aksi durumlarda ise tekrar giriş formuna yönlendirecektir. Sayfaların içerdiği kodlar aşağıdaki gibi olabilir.

Resim 10.17: Giriş sayfası (index.html) içeriği

Page 86: bil184471034.files.wordpress.com€¦  · Web viewGİRİŞ. İşletim sistemleri, her daim bilgisayarları yönetmek için kullanılan programlar olmuştur. Günümüzde ise hayatın

Giriş formunun basit olması açısından birçok gerekli kod eklenmemiştir. Burada dikkat edilmesi gereken en önemli parametre; <form> elementinin “action” özniteliğidir. Bu parametre, kullanıcı “Gönder” düğmesine tıkladığında girilen bilgilerin hangi sayfaya aktarılacağını belirtmektedir.

Form içerisinde bulunan parola girişinin, alınan veriyi gizlemesi için ayrıca; “type” parametresinin değerini “password” olarak belirlemek gerekmektedir. Bilgilerin gönderileceği “kontrol.php” sayfasının içerdiği kodlar ise aşağıdaki gibi olabilir.

Resim 10.18: Kontrol sayfasının kod içeriği

Dikkat edilecek olursa; 14. satırda doğrulama işlemleri bittiğinde, “header” fonksiyonu ile mevcut sayfa, “yetkili.php” sayfasına yönlendirilmiştir. Ayrıca; 11. satırda oturum değişkeninin içinin doldurulması önemlidir. Yetki gerektiren sayfamızın içeriği ise aşağıdaki gibi olabilir.

Resim 10.19: Yetkili sayfasına ait kodlar