PHP_ders_notu_2 - KÜÇÜKÇEKMECE
Transkript
PHP_ders_notu_2 - KÜÇÜKÇEKMECE
Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 İSMET AKTAR ANADOLU TEKNİK LİSESİ BİLİŞİM TEKNOLOJİLERİ ALANI WEB PROGRAMCILIĞI DALI İnternet Programcılığı PHP Ders Notları - II 2009 İnternet Programcılığı - PHP Ders Notları II 1 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 PHP ile Nesnelerin Kullanımı PHP 5'te Nesnelere Giriş Profesyonelce kod oluşturmak için OOP* mantığına dayanan programlar oluşturmak için nesnelerden yararlanmamız gerekir. Bir çok web programcısı kendini profesyonel addettiği halde HTML kodları içerisine dağınık bir şekilde kod yazmaktadır. Böyle olunca da oluşturulan programlardan hız beklemememiz gerekir. PHP 4'te OOP mantığı için nesneler olmakla beraber, pek gelişmiş argümanlar olduğu söylenemezdi. PHP 5 le gelen en büyük yenilik nesnelerde görülmektedir. PHP 5'te oluşturulacak nesneler JAVA tabanına dayandırılarak, program mantığı geliştirilmiştir. Nesne yönelimli (Object-Oriented) programlama icat edildiğinde geleneksel programlamaya aşina olanlar önce tereddüt ettiler; sonra bunun ne harika bir teknik olduğunu gördüler ve nesnelerden vazgeçemez oldular. Kabaca tanımlarsak nesne, kendi değişkenleri ve icra edeceği komutlardan oluşan fonksiyonları ile bir bütündür. Nesneyi bir kere tanımladıktan sonra istediğimiz kadar örneğini oluşturabiliriz. Bir nesnenin yapacağı işten, o nesnenin metodu diye söz ederiz. Bu açıdan bakarsanız programlarımızda nesneler sadece metotları için işe yarar. Bir nesne, aslında bilgisayarın hafızasında ayrılmış bir alandan başka bir şey değildir. Nesne tabanlı yazılmış PHP kodunda süreç şu şekilde gelişir: Dosyanın okunması, nesnelerin oluşturulması, nesnelerin çeşitli özelliklerinin değiştirilmesi, nesnenin ekrana gönderilmesi, işlemin bitirilmesi, nesnenin yok edilmesi. Bu süreçte yer alan nesne oluşturma ve nesnenin çeşitli özelliklerinin değiştirilmesi adımları, tamamen bellekte gerçekleşen işlemlerdir. Nesne yönelimli yazılımlar, ihtiyaçlarımızı karşılamak üzere birbiriyle etkileşim içinde olan nitelikleri ve işlemleri olan bir nesneler kümesi olarak tasarlanır ve oluşturulur. Nitelikler, nesneyle ilgili özellik veya değişkenlerdir. İşlemler ise nesnenin kendini değiştirmek veya haricî bir etki sağlamak amacıyla gerçekleştirebileceği metot, eylem veya fonksiyonlardır. Nesneler, sınıflar hâlinde gruplanabilir. Sınıflar (class) tek tek birbirinden farklı olabilen, ama bazı ortak noktaları olan bir nesneler kümesini temsil eder. Bir sınıf tümü aynı şekilde davranan birbirinin aynı işlemlere ve aynı şeyleri temsil eden birbirinin aynı niteliklere sahip nesneler içerir. Ancak bu niteliklerin değerleri, nesneden nesneye değişebilir. Bir web projesi, hyperlink (köprü) içeren sayfalardan karmaşık uygulamalara doğru giden bir evrim izler. İletişim kutuları, pencereler veya dinamik oluşturulmuş HTML sayfaları yoluyla temsil edilebilen karmaşık uygulamalar, geliştirme metodolojisi üzerinde ayrıntılı bir şekilde düşünülmeyi gerektirir. Nesne yönelimli yaklaşım ise size projelerinizdeki karmaşıklıkla başa çıkabilme, kodların yeniden kullanılabilirliğini artırma İnternet Programcılığı - PHP Ders Notları II 2 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 ve böylece kontrol maliyetini en aza indirebilme imkânını sunar. Nesne kullanmanın avantajı nedir? Bir proje tasarlayalım kafamızda. Bu projemizde 4 adet buton, 12 adet metin kutusu olsun. Böyle bir projeyi nesne kullanmadan yapmamız durumunda buton oluşturmak için aynı kodları sadece birkaç değişiklik dışında 4 kez, metin kutusu oluşturmak için ise 12 kere yazmamız gerekirdi. Bu da hem kodu uzatır, anlaşılmasını zorlaştırır, hem de denetimi zorlaştırır. Halbuki nesne oluştursaydık bu kodları 1 defa yazıp her yeni nesne için birkaç değişiklik yapacaktık. Örneğin birinin rengi için nesneye ait renk değişkenine 4 (mesela kırmızı), diğerininkine 1 (mesela mavi) atamak yeterli olacaktı. Tabi Php için düşünürsek buton ve metin kutusu zaten HTML form bileşenleri olarak var. Ve bunlarda bir nesne. Şimdi bu nesnelerin olmadıklarını sizin her seferinde bu nesneler için kodlar yazdığınızı düşünün. Bu iş oldukça zahmetli olurdu! Bu zaten var olduğu için nesneyi başka amaçlar için kullanacağız. Örneğin veritabanı işlemleri için. Örneğin bir proje içinde birbiriyle aynı özellikleri fakat farklı değerleri taşıması gereken durumlar için. Örneğin; Bir e-mail sayfası yaptınız. Mail nesnesi oluşturabiliriz. Bu nesne için; Maili gönderenin adı, mail adresi, Alıcının adı, mail adresi için değişkenler, adresleri denetlemek, maili göndermek, maili veritabanına kaydetmek ve hatta adresi adres defterine kaydetmek için birer fonksiyon hazırlayabiliriz. Böylece her mail ile ilgili işlemler için tekrar takrar kod yazmak yerine bu nesnemizi kullanabiliriz. Başka bir örnek; Veritabanına bağlanmak ve üzerinde bazı işlemleri yapmak için kullanabileceğimiz bir nesne tasarlayabiliriz. Bu nesne içinde bağlanacağımız veritabanının adresi (localhost vb…), kullanıcı adı, şifresi, veritabanı türü (mysql, postgreSql, MsSql, Access vb..), sql (sql kodu) değişkenleri; bağlan, bağlantıyı kapat, sorgula, listele gibi fonksiyonlar olabilir. Böyle bir nesne ile işimiz bazı noktalarda çok kolay olurdu. Nesne programlama ve kullanma başta sıkıcı gelebilir. Ama bu mantığı iyi kavrayan bir kişinin bundan vazgeçmesi artık kolay değildir. Sınıf ve Nesne Tanımlama Her nesne aslında bir türün örneğidir. Nesneler, türlerin özelliklerinin değiştirilmesinden oluşur. Türler, sadece nesnelerin genel özelliklerinden bahseder. Nesneler, türden alınan birer örnektir, genel türün özelliklerini taşımakla birlikte bazı şeylerde farklılıklar gösterebilirler. Tablo türünden bir örnek nesne hazırlandığında zemin rengi, satır-sütun sayıları, başlık ve açıklama bilgileri farklı olabilir. PHP’ de en küçük sınıf tanımı, aşağıdaki gibidir: İnternet Programcılığı - PHP Ders Notları II 3 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 class tablo1 { -----} Kullanışlı olabilmeleri için sınıfların niteliklere ve işlemlere ihtiyacı vardır. Var anahtar sözcüğünü kullanarak bir sınıf tanımı içinde değişkenler tanımlanabilir. Aşağıdaki kodlarda degisken1, degisken2 adında iki niteliği olan, tablo1 isminde bir sınıf oluşturulmaktadır. class tablo1 { var $degisken1; var $degisken2; } Aşağıdaki yapıyı incelediğimizde; nesne içerisinde kullanacağımız değişkenler var deyimiyle tanımlanırlar. Bu değişkenlere nesne içerisinden değer atanabilir. Aynı şekilde program içerisinden de değer atanabilir. İşlevler function deyimi ile tanımlanırlar ve yapmaları gereken işlemler { } arasında yazılır. class nesneadi { var $degisken1; var $degisken2; function islev1() { kodlar } function islev2($param1,$param2) { kodlar } } Örnek) <?php İnternet Programcılığı - PHP Ders Notları II 4 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı İnternet Programcılığı - PHP Ders Notları II Durhan GABRALI - 2009 5 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 ?> Çıktı: Sayın Dursun ÇAKIR sitemize hoşgeldiniz. Kullanıcı Adı : dursun_cakir Giriş Zamanı : 29.03.2006 15:13 Yetki Türü : Yönetici Program içerisinde dikkatinizi çekebilecek bir deyim var. $this deyimi içinde bulunduğumuz nesneyi işaret eder. Bu deyimi nesne içerisinde yine aynı nesneye ait bir özelliğe ve işleve ulaşmak (değer atamak veya değerini almak) istediğimizde kullanırız. Bu kodu incelediğinizde bir nesnenin nasıl oluşturulduğunu hemen hemen anlamışsı nızdır. Program kodlarını açıklayacak olursak: class deyimiyle bir nesne yazmak istediğimizi belirtiyoruz. Bu nesnemize isim olarak uye adını veriyoruz ve { ile nesnemizin özelliklerini (değişkenler) ve metodlarını (işlevfonksiyon) yazmaya başlıyoruz. Nesnemizin özelliklerini var deyimiyle tanımlamaya başlıyoruz. $adi, $takmaadi, $girissaati, $giristarihi, $yetki olmak üzere beş adet özellik ve ad($isim), takmaad($nick), giriszaman($tarih, $saat), yetki($yetkituru), yetkiyaz() olmak üzere beş adet metod tanımladık. Metodların fonksiyon (işlev) olduklarına değinmiştik. Buradaki yapılarına baktığımızda daha önce anlattığımız fonksiyon konusunda gördüğümüz yapının aynı olduğunu görüyoruz. Nesneyi } ile bitiriyoruz. Böylece nesnemiz hazırlanmış oldu. Şimdi bu nesneyi nasıl kullanacağımızı görelim. Bir nesneyi kullanabilmeniz için o nesneyi öncelikle oluşturmak (tabiri caizse yaratmak) gereklidir. Yani nesneyi hafızaya almak gerekir. Bu işlemi new komutuyla yaparız. $nesne = new nesneadi; şeklinde yazarak $nesne değişkenini nesneadi ile belirttiğimiz nesne türünde hafızada oluşturur. Artık biz $nesne değişkenini kullanarak nesneadi ile belirttiğimiz nesneye ulaşabiliriz. Buradan çıkarmamız gereken sonuç; nesneler alt alanları bir veri türüdür. Dolayısıyla bir nesneyi kullanabilmeniz için o nesnenin tipinde olan bir değişkene atamanız gerekmektedir. Böylece aynı nesneden farklı değişken isimlerinde birden fazla oluşturabiliriz. Zaten İnternet Programcılığı - PHP Ders Notları II 6 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 nesnenin amaçlarından biri de budur. Bir nesnenin özelliklerine ve işlevlerine ulaşmak için nesne değişkeninden sonra – (tire) ve > (büyüktür) işaretleri getirilir. Daha sonra ulaşılmak istenen değişken veya işlevin adını (başında $ olmadan) yazarız ($nesne->degisken1;). PHP4 ile PHP5 Arasındaki Faklılıklar PHP4 ile PHP5 arasında, nesneler konusunda bazı faklılıklar vardır. Bu faklılıkları daha iyi kavrayabilmek için PHP5 standartlarında bir örnek verelim: Bu örneği incelediğimizde fonksiyonların başına Public ifadesinin getirildiğini görüyoruz. Nesne değişkeni oluştururken Var ifadesi yerine Private ifadesi kullanılmıştır. Bunlar PHP5 'in getirdiği yeniliklerdir. Niteliklerimize vefonksiyonlarımıza private, protected ve public şeklinde erişim sınırı koyabiliyoruz: İnternet Programcılığı - PHP Ders Notları II 7 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Private : Nitelik yada fonksiyona(işlemlere) erişimin sadece sınıfın içinden yapılabileceği anlamına gelir. Kalıtım vasıtasıyla dahi ulaşılamaz. Protected : Nitelik veya fonksiyonlara(işlemlere) erişimin sadece sınıfın içerisinden yapılabileceğini gösterir. Kalıtım yoluyla altsınıflardan ulaşılabilir. Public : PHP4 teki var gibi düşünebilirsiniz. Belirtmediğiniz sürece varsayılan seçenek public tir. Peki bunlar ne işe yararlar!? nitelik ve işlemlerin dolayısıyla sınıfın güvenlik içinde çalışmasını sağlarlar. PHP5 ile gelmiş olan bir fonksiyon vardır. __construct() Nedir, ne işe yarar? __constuct bir yapılandırıcıdır. Nesne oluşturulurken çağrılır ve belirten işlemi yaparlar (niteliklere başlangıç değeri vermek gibi) .Geriye dönük uyumluluk çerçevesinde PHP __construct özel işlemcisini bulamazsa 'sınıfla aynı adı' taşıyan bir fonksiyon arar. Buda PHP4 te kullanılan yapılandırıcıdır. Private olan bir niteliğe , fonksiyona(işleme) yapacağımız bir müdahale sınıf içerisinde __set() kullanmadığımız sürece hata mesajı ile dönecektir : Nesnelerle Doğum Tarihi Kontrolü yas_kontrol.php İnternet Programcılığı - PHP Ders Notları II 8 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 yas_kontrol_index.php Bu örnekte nesnelerin çağrılma yöntemi PHP4'teki gibidir. $nesne->tarih($tarih); PHP5'te nesne çağırmak için farklı bir yazım biçimi kullanılmaktadır. $nesne::tarih($tarih); Karar Kontrol Mekanizması İnternet Programcılığı - PHP Ders Notları II 9 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 PHP4'te tüm olasılıklar mantıksal denetlemelerle gerçekleştirilmektedir. PHP5'te karar kontrol mekanizmasında yeniliğe gidilmiştir. PHP geliştiricileri PHP ile Java dilini birbirine yakınlaştırmak için PHP çerisinde Java'da kullanılan karar kontrol mekanizmasına benzeyen bir mekanizma katmışlardır. try { // Karar kontrolü } catch (Hata olgusu) { // Hata olduğu taktirde yapılacak işlem } Örnek) PHP'de Otomatik Çalıştırılan Fonksiyon ( __construct ) PHP5 ile gelen bir özelliktir. Bu fonksiyon bir sınıf nesnesi çalıştırıldığına otomatik olarak çağrılır. İnternet Programcılığı - PHP Ders Notları II 10 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Nesnelerde Kullanılan Metotlar: PHP5 ile nesnelerde kullanılmak üzere değişik metotlar getirilmiştir. Bu metotlar programcılara nesne tabanlı çalışmada kolaylıklar sağlamaktadır. --------------------------------------------------------------------------------------------------------__destruct Bu metot bir nesnede en son işlemin yapılacağı fonksiyon olarak görev yapar. Mesela database bağlantısı yaptığınız bir nesnede , işlemlerinizi bitirdiğinizde veritabanıyla olan tüm bağlantınızı kesecek olan komutları bu fonksiyon içerisine yerleştirebilirsiniz. Yalnız bu fonksiyonun otomatik olarak çalışabilmesi için nesnenizi öldüren unset komutunu kullanmanız gerekir. Örnek) İnternet Programcılığı - PHP Ders Notları II 11 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 --------------------------------------------------------------------------------------------------------__call Bu metot , nesne içerisinde olmayan yanlış isimdeki bir fonksiyon çağrıldığında otomatik olarak devreye girer. Hata kontrol mekanizması olarak kullanılabilir. Örnek) --------------------------------------------------------------------------------------------------------İnternet Programcılığı - PHP Ders Notları II 12 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 __get() ve __set() Bu fonksiyonlar yardımı ile kullanılan bir nesne içerisinde tanımlı olmayan bir değişkene “metod” değer atamada hatalar engellenebilir. Bir Class'ın içerisinde neler olduğunu bilmeksizin yanlış bir metod çağrıldığında PHP4'te tüm kod kütüphanesi hata verir. PHP5 ile gelen bu fonksiyonlar yardımıyla , hatalı bir metod çağrıldığında sistemde tanımlanan fonksiyonlar devreye girerek sistem entegrasyonunda bütünlük sağlanmış olur. Örnek) Yukarıdaki örnekte nesnemizi çağırıp i adında metodu çağırdığımızda __get fonksiyonu otomatik olarak devreye girmektedir. İkinci nesne çağırmada ise fon adındaki metoda değer gönderildiğinde bu sefer __set fonksiyonu otomatik olarak devreye girmektedir. --------------------------------------------------------------------------------------------------------__toString() Echo veya Print fonksiyonları ile kullanılan bir fonksiyondur. Echo veya Print ile kullanılmadığı zaman tek başına bir anlam ifade etmez. Echo veya Print ile kullanıldığı an _toString() metodu sınıf içinden çağırılır. Örnek) İnternet Programcılığı - PHP Ders Notları II 13 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Nesneyi çağırmak için parantez içerisinde isim girip direk nesneyi yüklediğimiz değişken çağırıldığında __toString metodu devreye girip, fonksiyonda tanımlı komutlar icra edilir. Çıktı: İsmet Aktar --------------------------------------------------------------------------------------------------------__clone() Bir nesnenin bütün özelliklerinin aynen kopyalanmasını sağlar. Ayrıca nesne içerisinde tanımlı değişkenlerde yüklü olan değerlere dışardan veri gönderebilme olanağını bizlere sunmaktadır. Clone anahtar sözcüğü kullanılarak bir nesneye ait kopya yaratılabilir. Bunun için sınıf içerisinde __clone() metodu kullanılır. __clone() metodu tek başına çağrılmaz. Sınıfın nesnelerini Clone anahtar sözcüğünü kullanarak klonlamak istenildiğinde __clone() metodu kendiliğinden devreye girmektedir. Örnek1) İnternet Programcılığı - PHP Ders Notları II 14 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Çıktı: Bu yazı dosyanın içindedir. Bu yazı dosyanın içindedir. Örnek2) İnternet Programcılığı - PHP Ders Notları II 15 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Nesneyi çağırıp nesne içerisinde yer alan verileri print_r komutu ile dizi değişkeni olarak listelediğimizde aşağıdaki çıktı oluşacaktır: Matematik Fonksiyonları Sayıları yuvarlayan fonksiyonlar: floor() , ceil() , round() echo floor(12.456) Noktadan sonrasını dikkate almaz. Sonuç:12 echo ceil(12.456) Bir üste yuvarlar. Sonuç:13 echo round(12.656) Noktadan sonraki sayı 5 ve üstü ise tam sayıya çevirir, değilse bir alt sayıya çevirir. Sonuç:13 Trigonometri fonksiyonlar: cos() , sin () , tan() , acos() , asin() , atan() echo cos(30) Sonuç: 0.154251449888 Dönüştürücü fonksiyonlar: bindec() , decbin() , dechex() ,hexdec() Rastgele sayı üreten fonksiyonlar: mt_srand() , mt_rand() , srand() , rand() mt_srand((double)microtime()*1000000); echo mt_rand(); Sonuç: 403106591 srand((double)microtime()*1000000); echo rand(); Sonuç: 30022 İnternet Programcılığı - PHP Ders Notları II 16 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 sqrt() : Karekök exp() : Exporansiyel pow() : Bir sayının üstü log() : logaritma abs() : Mutlak değer log10() : 10 tabanında logaritma pi() : Pi sayısı min() : En küçük sayı max() : En büyük sayı HTTP Protokolleri ve Cookie(Çerez) 'ler Cookie(Çerez) 'ler Cookie'ler bir web sayfasına gelen kullanıcıyı, siteyi bir daha ziyaret etmesi halinde tanıyabilmesi için otomatik olarak web sayfalarından ziyaretçinin bilgisayarına atılan metin dosyalarıdır. Bu metin dosyları Win95/98/Me sistemlerinde C:\Windows\Cokies , WinNT/2000/ XP/2003 sistemlerinde C:\Document and Settings\Kullanici\Cookies klasörlerinde tutulur. Cookie Oluşturmak ve Okumak Cookie oluşturmak için setcookie komutu kullanılır. Oluşturulan cookie'lere $_COOKİE dizi değişkeni vasıtasıyla ulaşabiliriz. setcookie(''isim'' , ''değer'' [ , zaman , ''dizin''] ) Cookie'nin ömrünü belirleyen zaman parametresi time() fonksiyonu ile saniye cinsinden belirlenir. Time() bulunduğumuz zamanı saniye cinsine çevirir. Ör) Yukarıdaki komut satırı ilk olarak çalıştırıldığında ekrana herhangi bir yazı gelmez. Sayfa güncellendiğinde karşımıza ismet aktar yazısı çıkar. Ör) Aşağıdaki örnekte oluşturulan Cookie'nin ömrü 10 dak. Olarak ayarlanmıştır. Bunun için time() fonksiyonuna 600 eklenir. ( 600 sn = 10 dak. ) İnternet Programcılığı - PHP Ders Notları II 17 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Örneğin Cookie'nin ömrünü 1 yıl olarak belirlemek istiyorsak: setcookie(''okul'' , ''ismet aktar'' , time() + 3600*24*365); Oluşturulan Cookie'ye dördüncü parametre olarak dizin eklenebilir. Örneğin Cookie'nin tüm web sayfasında kullanılmasını istiyorsak: setcookie(''okul'' , ''ismet aktar'' , time() + 3600 , ''/''); Eğer oluşturacağımız Cookie'yi farklı bir dizinde kullanmak istiyorsak: setcookie(''okul'' , ''ismet aktar'' , time() + 3600 , ''/farklı_dizin''); Bir Cookie'yi simek istersek ömrünü kısa tutarak silebiliriz: setcookie(''okul'' , ''ismet aktar'' , time() + 1 ); Cookie'ler Genelde Nerelerde Kullanılır ? Cookie'ler başta anketler olmak üzere '' ankette oy kullanana bir ziyaretcinin birden fazla oy kullanmasını engellemek amacıyla'' , sayaçlarda , üyelik sistemlerinde , bir kez açılmasını istediğimiz reklam ya da popup pencerelerinde kullanılır. Ancak unutmamız gereken bir şey var, o da kullanıcı eğer isterse Cookie'leri silebilir ya da devre dışı bırakabilir. Önbelleği Silmek Oluşturduğumuz web sayfasını bir kullanıcı ziyaret ettiğinde, tarayıcının özelliğinden kaynaklanarak; web sayfaları bir daha ziyaret edildiğinde sayfanın daha hızlı açılabilmesi için web sayfasının içeriği kullanıcının hardiskinde kaydolur. Maksimum güvenlik gerektiren web sayfalarında ''sanal alış-veriş , bankacılık siteleri v.b'' içeriğin kayıt edilmesinin engellenmesi gereklidir. Bu işlem PHP'nin http protokolleri ile yapılabilir. İnternet Programcılığı - PHP Ders Notları II 18 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Yukarıdaki komut satırlarını hafızaya alınmasını istemediğiniz dosyaların başına yazarsanız web sayfanızın içeriği kaydolmayacaktır. PHP'de HTTP protokolü ile yönlendirme PHP'de header fonksiyonunu kullanarak yönlendirme işlemleri yapabiliriz. Header fonksiyonu; en basit anlamda sunucu ( Web Server - Ör. : Apache ) ile istemci ( Browser - Ör. : Explorer ) arasındaki HTTP Protokolu üzerinde kontrolü sağlayan bir komuttur. Aşağıdaki verilen kod satırları , php 'nin header fonksiyonu ile kullanıcıya dosya.zip adında bir dosya gönderme işini yapmaktadır. Sonra header fonksiyonu içinde yer alan bilgilereden Content-type: application/zip Browser'ınızın ekranına çıkacak bilginin tipini belirleyerek, browser'ın ona göre davranması gerektiğini söyler. Şimdi de kullanıcıyı başka bir sayfaya yönlendirme işlemine bakalım: PHP web server bulunanlarda, yönlendirme kodun server tarafından derlenmesinden sonra çalışır. Fakat burada önemli olan husus bu kodu yazarken; <?php tagından sonra boşluk bırakmadan yazmamız gerekecektir. Eğer bunu yapmaz da boşluk bırakarak yazarsak netice itibariyle header hatası almamız mümkündür. Ya da header hatası almayı engellemek için ; Sayfamızın başına ; ob_start(); Sonuna da ; ob_flush(); yazmak olacaktır. İnternet Programcılığı - PHP Ders Notları II 19 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 NOT: HTML kodlarıyla yönlendirme (her turlu web serverda çalışır) <meta http-equiv="Refresh" content="0;url=http://www.siteAdi.xxxx/"> ASP ile yönlendirme (IIS web server bulunanlarda, kodun server tarafından derlenmesinden sonra çalışır) <% Response.Redirect("http://www.siteAdi.xxxx/") %> CGI ile yönlendirme (CGI çalıştırabilen web server bulunanlarda, kodun server tarafından derlenmesinden sonra çalısır) #/usr/bin/perl -w use strict; use CGI qw/tandard/; print redirect('http://www.siteadresi.com/') JavaScript kodlarıyla yönlendirme (her turlu web serverda çalışır) <script language="Javascript" type="text/javascript"> <!-//<![CDATA[ window.location.href= "http://www.siteAdi.xxxx/" //]]> --> </script> JSP ile yönlendirme (JSP web server bulunanlarda, kodun server tarafından derlenmesinden sonra çalışır) <% String redirectURL = "http://www.siteAdi.xxxx/"; response.sendRedirect(redirectURL); %> Örnek) Bu örnek localhost üzerinde çalışmaktadır. İnternet Programcılığı - PHP Ders Notları II 20 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 HTTP ile Login (Authenticate) İşlemi Örnek) Bazı önemli HTTP değişkenleri ---------------------------------------------------- İnternet Programcılığı - PHP Ders Notları II 21 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 PHP'de Oturum Yönetimi (SESSION) session_start() : Oturumu başlatır. session_register('değişken_ismi') : Oturum değişkeni oluşturur. $_SESSION['değişken_ismi'] :Oturum değişkenine erişilir. session_destroy() : Açılmış bütün oturum bilgilerini sıfırlar unset() : Bu fonksiyon ile herhangi bir oturum geçersiz yapılır. unset($_SESSION['count']) ; Örnek) İnternet Programcılığı - PHP Ders Notları II 22 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Örnek) Sayaç Uygulaması Örnek) Session ile Giriş(Login) İşlemi giris.php İnternet Programcılığı - PHP Ders Notları II 23 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı İnternet Programcılığı - PHP Ders Notları II Durhan GABRALI - 2009 24 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 index.php İnternet Programcılığı - PHP Ders Notları II 25 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı İnternet Programcılığı - PHP Ders Notları II Durhan GABRALI - 2009 26 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 PHP - MySql Bağlantısı ve İşlemler Kullanılan komutlar kısaca şunlardır: mysql_connect(): Bağlantı kurmak mysql_select_db() : Veritabanı seçer mysql_query ( ) : SQL sorgusu çalıştırılır mysql_num_field(): Dönen kayıttaki alan sayısını verir mysql_fetch_row(): Her çalıştığında sırayla bir tane kaydı(bir satır) alır. mysql_close(); Bağlantıyı kapatır Örnek) Değişik Bağlantı Yöntemleri: Ör1) mysql_connect(“localhost” , “root” , “1234”) die (“Bağlantı Hata mesajı”); Ör2) İnternet Programcılığı - PHP Ders Notları II 27 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Örnek) Bir veritabanından verileri okuyup ekrana yazdırmak magaza isimli veritabanının içinde sepet isimli bir tablo olsun İnternet Programcılığı - PHP Ders Notları II 28 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Değişik Yöntemlerle Veri Listeleme PHP'de bir veritabanındaki verileri listelemenin bir çok yöntemi var. Önce bu iş için kullanılan komutlara bakalım: Komut mysql_fetch_array Açıklama mysql_fetch_row Üstteki komutla aynı görevi yapar mysql_fetch_assoc Tablodaki sütün adlarını index şeklinde belirterek verileri listeler mysql_fetch_object Veritabanı isimlerinin veya bir veritabanındaki tablo adlarını listeler mysql_result Tablodaki verileri teker teker listeler mysql_free_result işlevi, sorgu neticesinde gelen verilerin tutulduğu değişken göstericisine ayrılan belleği serbest bırakır. mysql_num_rows Tablodaki kayıt (satır) sayısını verir mysql_num_field Dönen kayıttaki alan sayısını verir mysql_field_name Tablodaki alan isimlerini verir İnternet Programcılığı - PHP Ders Notları II Tablodaki sütun adlarını sıra numarasına göre okur 29 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Örnek) Bu örnekte listeleme işlemi ilk önce mysql_fetch_object ile yapılmıştır Yukarıdaki örnekte , MySQL'e bağlandıktan sonra $sorgu değişkeninde mysql_query() komutu ile MySQL'e bir sorgu gönderilir. Daha sonra bu sorgudan dönen verileri elde etmek için mysql_fetch_object komutu ile veriler birer birer obje olarak okunup $oku değişkenine dizi değişkeni olarak aktarılır. İnternet Programcılığı - PHP Ders Notları II 30 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Aynı örnekte veriler mysql_fetch_array ile listelenecek olursa: Aynı örnekte veriler mysql_fetch_assoc ile listelenecek olursa: Aynı örnekte veriler mysql_num_rows ve mysql_result ile listelenecek olursa: İnternet Programcılığı - PHP Ders Notları II 31 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Tablodaki verilerin alan isimleriyle beraber listelenmesi: İnternet Programcılığı - PHP Ders Notları II 32 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 PHP'de Grafik Fonksiyonları PHP'de grafik fonksiyonlarını kullanmak için php.ini dosyası içerisinde bulunan php_gd2.dll satırının açılması gerekiyor: ; extension = php_gd2.dll ImageCreate() Fonksiyonu: imagecreate(int x_boyutu , int y_boyutu) Şeklinde kullanılır. İstenilen boyutlarda bir grafik alt yapısı oluşturur. Ayrıca imagecolorallocate() , imagegif(), imagepng(), imagejpg(), imagebmp() fonksiyonları ile birlikte kullanılır. Ör) Imagecolorallocate() Fonksiyonu: imagecolorallocate(int image, int red , int green , int blue) Şeklinde kullanılır. Oluşturulacak resimde kullanılmak üzere RGB modunda renk belirler. Imagearc() Fonksiyonu: imagearc( kaynak , x_kenar , y_kenar , x_genişlik , y_yukseklik , yay_başlangıç , yay_bitiş , renk ) Şeklinde kullanılır ve belirlenen açıda yay veya daire çizer Ör) İnternet Programcılığı - PHP Ders Notları II 33 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Imagefill() Fonksiyonu: imagefill(int image , int x, int y, int color) Şeklinde kullanılır. Image ile belirtilen alanı color ile belirtilen renk ile doldurmaya yarar. Doldurulacak alanın koordinatları da belirlenir. Ör) Imageline() Fonksiyonu: imageline(int image , int x1, int y1, int x2, int y2, int color) Şeklinde kullanılır ve düz çizgi çizer. Ör) İnternet Programcılığı - PHP Ders Notları II 34 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Imagefilledrectangle() Fonksiyonu: imagefilledrectanle( int image, int x1, int y1, int x2, int y2, int color) Şeklinde kullanılır. Bu fonksiyon x1, y1 ile x2,y2 koordinatları arasında içi dolu bir dikdörtgen çizer. Ör) Örnek: Siyah bir alan içerisinde çapraz çizgiler İnternet Programcılığı - PHP Ders Notları II 35 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Örnek : Kırmızı bir alan içerisinde iç – içe geçmiş kareler ImageString() Fonksiyonu: imagestring(int image, int yazıtipi, int x, int y, string metin, int color) Şeklinde kullanılır. Bu fonksiyon bir resim alanı içerisinde belirtilen metni belirtilen koordinatlara yazar. Ör) İnternet Programcılığı - PHP Ders Notları II 36 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Imagegettftext() Fonksiyonu: imagegettftext(int image, int size, int angle, int x, int y, int color, string fontfile, string text); Şeklinde kullanılır. Bu fonksiyonla istenilen bir font dosyası kullanılarak bu fontun özelliklerine göre istenilen yazı Ya da yazılar hazırlanabilir. Ör) Örnek) İnternet Programcılığı - PHP Ders Notları II 37 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 Örnek) Güvenlik kodu uygulaması resim.php İnternet Programcılığı - PHP Ders Notları II 38 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı Durhan GABRALI - 2009 form.php İnternet Programcılığı - PHP Ders Notları II 39 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı İnternet Programcılığı - PHP Ders Notları II Durhan GABRALI - 2009 40 Bilişim Teknolojileri Alanı – Web Programcılığı Dalı İnternet Programcılığı - PHP Ders Notları II Durhan GABRALI - 2009 41