PHP - Başlangıç CBÜ-TMYO Internet Programcılığı Dersnotu PHP nin Tarihi İlk kez Rasmus Lerdorf tarafından yazılmış ve kendi web sitesine bağlı olan kişilerin takibini yapmak amacıyla kullanılmıştır. Kaynak kodları 1995 senesi içinde yayınlamıştır. Günümüzde 10.000.000 dan fazla web sunucusu üzerinde PHP çalışmaktadır (Aralık 2002, Kaynak: Netcraft). Tarihsel Gelişim PHP ile neler yapılabilir? PHP ile başka neler yapılabilir? Neden PHP? Veritabanı bağlantılı uygulamalar Dinamik olarak oluşan grafikler Flash animasyonları Ziyaretçiye, tarayıcıya veya tarihe göre özel durumlar veya içerikler Anketler Tartışma forumları Elektronik ticaret uygulamaları Web tabanlı e-posta uygulamaları XML verilerini yorumlama ve oluşturma İçerik yönetimi Site içi veya dışı arama motorları Web tabanlı programlama için tasarlanmıştır. Yazım kuralları basittir. Kaynak kodu açık ve ücretsizdir. Sunucu hafızasını az kullanır. Birçok işletim sistemi üzerinde çalışabilir: Linux Windows MacOS X Solaris BSD Unixler Netware 1
PHP-ASP Karşılaştırması PHP Artıları Birçok web sunucusu yazılımına entegre çalışabilir: Apache Microsoft IIS Microsoft PWS Netscape iplanet Xitami Yaygın veritabana desteği: Oracle MySQL PostgreSQL Interbase MS-SQL Sybase IBM DB2 Informix Birçok eklenti ve hazır kütüphaneleri bulunmaktadır. ASP Artıları Profesyonel destek alma imkanı sağlar. ASP.NET ile hız kazanmıştır. VisualBasic kullananlar için öğrenimi ve kullanımı kolaydır. ASP Eksileri Diğer iştelim sistemi ve web sunucularına desteği yoktur (Sun ONE ASP ile Linux desteği). Eklentilerinin birçoğu ücretlidir. Ücretsizdir. Kaynak kodu açıktır. Birçok işletim sistemi ve web sunucusu üzerinde çalışabilir. Web sunucusu üzerinde az hafıza kullanır. Yazım kuralları, öğrenimi kolaydır (C ve Perl dillerine benzer). Eklentileri ve yardımcı kütüphaneleri ücretsizdir. PHP Eksileri Performans ve profesyonel destek için ücretlidir. Windows işletim sistemi üzerinde güvenlik açıkları oluşturabilmektedir. PHP Mantığı Nasıl çalışır? PHP Nedir? PHP, Web tabanlı yazılımları geliştirmek için tasarlanmış bir programlama dilidir. Çalışma mantığı diğer web tabanlı programlama dilleri gibidir (sunucu taraflı). 2
Çalışma Sistemi Web Sunucu(server), htm ve html uzantılı dosyalarını sabit diskinde bulundurur ve ziyaretçiye sunar. PHP uzantılı dosyalarda ise PHP derleyicilerinin çağrılması gerekir. PHP derleyici, kendine ulaşan metin dosyasının içinde veya PHP kelimelerine rastlayana kadar tüm HTML kodunu web sunucusuna aynen gönderirir. PHP ve arasındaki PHP kodlarını ise seçip alır ve istenen/gereği neyse onu yapar. Bu ayıraçların içinde kalan kodlar, bizim yapılmasını istediğimiz işlemin komutlarıdır. Sunucu Sabit Sayfa PHP Modülü Modülü Program yüklenir Programın sonucu istenir Sunucu Çekirdeği http://orneksite.com/ornek.php adresindeki sayfa çağrılır Programın sonucunu gönderilir İstemci Çalışır Sabit Disk Neden PHP Kullanıyoruz? PHP kullanmamızın sebebi bazı işlemleri HTML ile yapamamamızdır. HTML ile bir web sunucusundaki bir veri tabanı dosyasını açıp okuyamayız, düz yazı dosyalarını da okuyamayız ve bu disklere dosya yazamayız. PHP PHP ve ayraçları içindeki kodları icra eder ve ziyaretçi bu kodların içini göremez, okuyamaz. PHP bir CGI programlama dilidir. Bu dille web sunucusu ile web ziyaretçisi arasında buluşma noktası olan CGI da bilgi alış verişi yapılır. Sunucuda bulunan başka programlar çalıştırılabilir ve web sayfalarına HTML sınırlamasının dışında hareket ve ziyaretçiler ile bilgi alışverişi sağlanır. PHP Nasıl Kullanılır? PHP Kodları HTML tagları içine gömülür. HTML formları ile kendine sunulan veriyi alıp işleyebilir. Veritabanıyla haberleşebilir. Karışık matematiksel işlemleri yapabilir. PHP Kullanımı Kuralları Değişkenleri Kontrol Yapıları Nasıl Kullanılır? HTML dosyaları içine yazılarak kullanılabilir. Tarayıcı Çıktısı: Örnek PHP betiği... <html> <head> <title>örnek</title> </head> <body> php echo Örnek PHP betiği... ; </body> </html> 3
PHP Yazım Kuralları Değişkenler Php komutları ; (noktalı virgül) işaretiyle sonlandırılır. Echo,Print ve Printf : Ekrana yazdırma komutudur. // : Tek satırlık açıklamalar için kullanılır /* ve */ : Birden çok açıklama satırlarında kullanılır. Yorumlayıcı işaretler arasındaki yazıları ve PHP komutlarını dikkate almaz. \n Yeni Satır geçiş yapar (New Line) \r Satır Başı (Return) \t Sekme (Tab) karakteri PHP de değişkenler önüne $ simgesi konularak tanımlanır. $adi; $soyadi; PHP de değişkenlerin tipleri (nümerik,karakter, tarih,...) ilk değerleri atandıktan sonra belirlenir $adi = "Yahya"; // String $tel = 4700550; // Integer Değişkenlere değer atamak için "=" işareti kullanılır $degisken1 = "değer"; $degisken2 = 5; print $degisken1; // Ekrana "değer" ifadesi yazılacaktır. print $degisken2; // Ekrana "5" ifadesi yazılacaktır. Bir değişken direkt olarak değer atanarak tanımlanabilir. $tanimla1 = "Ankara"; $tanimla2 = 276; $tanimla3 = 45.23; Bir değişkenin değerini diğer bir değişkene atamak için "=" den sonra ikinci değişken yazılır. $adi = "Ali"; $isim = $adi;. print $isim; // Ekrana "Ali" yazılacaktır. Sabitler PHP de diğer programlama dillerinden farklı olarak bir değişkenin tuttuğu değer diğer bir değişken tarafından gösterilebilir. $adi = "Muhittin"; $isim = "adi"; print $$isim; $adi = "Ali";. $isim = &$adi; $adi = "Murat"; print $isim; // Ekrana $adi değişkeninin değeri yazılır. // $adi değişkenine "Ali" değeri atanır. // "&" işareti her seferinde $isim değişkeninin değerinin değişmesini sağlar. // $adi değişkenine "Murat" değeri atanır. // Ekrana "Murat" yazılır. Sabitler program boyunca değişmeyen değerlerdir. Bir sabit tanımlandıktan sonra atanana ilk değerini korur, yeni bir değer ataması yapılamaz. Sabitler define() komutu ile tanımlanırlar. Sabitlerin önünde $ bulunmaz. Kullanılış biçimi: define (sabit_adi,deger) define (pi_sayisi, 3.14); define (dis_acilar, 360); $aci1 = 120; $aci2 = 80; $aci3 = dis_acilar - ($aci1 + $aci2); print ($aci3); // 160 değerini döndürür. defined() : Bir sabitin daha önce tanımlanıp tanımlanmadığına göre true / false sonuç döndürür. Kullanılış biçimi: defined ("sabit_adi") $a = defined ("pi_sayisi") // "pi_sayisi" adlı bir sabit olmadığı için // false değer döndürür. 4
İki String i Birleştirme (Concotenation) İki string ifadeyi birleştirmek için "." kullanılır. Örnek : $a = Celal. Bayar". "Üniversitesi "; $b = Internet". "Programlama". "Dersi "; $c = $a. " ve " $b; print (c$); // Celal Bayar Üniversitesi ve Internet Programlama Dersi" // sonucu çıkar. PHP de Kontrol Yapıları if while/do-while for switch if Kontrol Yapısı if ( koşullar ) elseif (diğer koşullar) else while Döngüsü while Döngüsü Örnek : İki sayıdan büyük olanı bulan bir program. $sayi1 = 5; $sayi2 = 15; if ($sayi1 > $sayi2) print ("İlk sayı büyük $sayi1"); else if ($sayi1 < $sayi2) print ("İkinci sayı büyük $sayi2"); else print ("Sayılar eşit $sayi1,$sayi2"); while (koşul) Şart sağlanıyorsa yapılacaklar Örnek : 1'den 10'a kadar olan sayıların toplamını bulan bir program. $sayac = 0; while ($sayac <= 10) $sayac ++; $toplam = $toplam + $sayac; print ($toplam); 5
do while Döngüsü do while Döngüsü for Döngüsü do Şart sağlanıyorsa yapılacaklar while (koşul); Örnek : 1'den başlayarak, sonuç 100 den büyük oluncaya kadar toplanması gereken rakamların sayısını bulan program. $sayac = 0; $toplam = 0; do $sayac = $sayac + 1; $toplam = $toplam + $sayac; while ($toplam < = 100); print ("Kullanılan rakam sayısı : $sayac") for ( $degisken = ilk_deger ; kosul ; adim ) Koşul doğru ise yapılacak işlere ilişkin komutlar for Döngüsü switch Kontrol Yapısı switch Kontrol Yapısı Örnek : 1'den 100'e kadar çift sayıların toplamını bulan program. for ( $say = 0; $say <= 100 ; 2 ) $cift = $cift + $say; print ($cift); switch ( değişken ) case KOŞUL-1 ; case KOŞUL-2 ; case KOŞUL-3 ;...... default: Örnek : Verilen sayıya göre gün adını bulan bir program. $gun = 1; switch ( $gun ) case $gun = = 1; print ("Pazartesi"); case $gun = = 2; print ("Salı"); case $gun = = 3; print ("Çarşamba"); default : print ("Yanlış seçim"); 6
Fonksiyonlar print () : Ekrana bir değişkenin değerini veya bir metni yazdırmayı sağlar. print ( Internet Programlama"); // Ekrana Internet Programlama" yazdırır. $gun = "Perşembe"; print ($gun); //Ekrana "Perşembe" yazdırır. gettype() : Bir değişkenin ne tür bir veri içerdiğini döndürür. $ders_adi = Internet Programlama"; print gettype($adi); // Ekrana "string" yazılacaktır. settype() : Bir değişkenin veri türünü değiştirmek için kullanılır. $sonuc = "75" ; // Karakter türdeki $sonuc değişkenine "75" değeri atanıyor. $basari = ( integer ) $sonuc // $sonuc değişkeninin değeri integer a dönüştürülüyor. isset() : Bir değişkene değer atanıp atanmadığı sonucunu döndürür if (isset($sifre)) print("şifre girildi"); unset() : Varolan bir değişkeni yok eder unset ($soyadi); // $soyadi değişkeni yok edilir. empty() : isset() fonksiyonunun tersine eğer değişkene değer atanmamışsa True sonuç döndürür. $adi = "". print (empty($adi)); // True değerini döndürür. $adi = Ali" print (empty($adi)); // False değerini döndürür. is_string(),is_integer(), is_double(): Değişkenin değerinin aradıkları tür olup olmadığına göre True/False değer döndürür. $sayi = 10; $sonuc = is_string ($sayi); // False sonuç döndürür. $metin = Manisa" $sonuc = is_string ($metin); // True sonuç döndürür. Daha önceden de belirtildiği gibi kendi fonksiyonlarımızı da PHP içerisinde kullanabiliriz. Fakat kendi fonksiyonlarımızı kullanabilmek için öncelikle tanımlamamız gerekir. Bir fonksiyon dışardan aldığı değerlere karşılık bir değer döndürme mantığıyla çalışır. Fonksiyonun dışardan aldığı değerlere argüman adı verilir. Bir fonksiyon birden fazla argüman kullanabilir. Fakat geriye tek değer döndürür. 7
String Fonksiyonları substr() : Bir metnin içerisinden istenilen bir kısmının alınmasını sağlar $metin = Celal Bayar Üniversitesi TMYO"; $okul_adi = substr($metin, 25, 4 ); print ( Okulu :".$okul_adi); trim() : Metnin başındaki ve sonundaki boşlukları siler. $sehir = " İzmir "; trim ($sehir); print ($sehir); // Sağ ve sol boşlukları kırparak İzmir" yazılacaktır. chr() : ASCII kodu verilen karakteri döndürür. print (chr(65)); // "A" değerini döndürür. ord(): Verilen karakterin ASCII kodunu döndürür. print (ord("a")) ; // 65 değerini döndürür. strlen() : Verilen metnin uzunluğunu tamsayı cinsinden döndürür. print (strlen("ankara")); //6 değerini döndürür printf(), sprintf(): Metin biçimlendirmek için kullanılır. Tarih ve Saat Fonksiyonları Dosya Fonksiyonları number_format(): Sayı basamaklarını gruplamak için kullanılır. Kullanılış biçimi: number_format($degisken, ondalik_hane, ondalik_ayirac, binler_ayirac) ); //chr(44)=virgül getdate() : PHP nin kurulu olduğu sunucudan tarih ve saat bilgisini alır ve vereceğiniz bir isimdeki dizideğişkende kaydeder. $saat_tarih = getdate() * Bu durumda, $saat_tarih dizi değişkeninde sırasıyla şu bilgiler yer alır: 1. Saniye 2. Dakika, 3. Saat, 4. Ayın gün sayısı (1-31), 5. Haftanın gün sayısı (1-7), 6. Ay (1-12), 7. Yıl, 8. Yılın kaçıncı günü, 9. Günün adı, 10. Ayın adı. print date("d/m/y"); Bu komut şu tarihi verir: 12/04/2004 include() : Bir dosyayı başka bir dosya içerisinden çağırmak için kullanılır. include(ekle.php); Fonksiyon tanımlama : function fonksiyonun_adı (argüman1, argüman2,... argümann) fonksiyon içinde yapılacak işlemler 8
İpucu Return Komutu Global ve Static Değişkenler Aynı komutları tekrar tekrar kullanmamıza gerek yoktur. Örneğin bir veri tabanına bağlanırken her sayfada şifrelerimizi girmemiz gerekmiyor. Tekrar şifre girmek yerine include komutuyla ilgili dosyayı çağırıp kullanabiliriz. Böylece veri tabanına erişim şifremizi değiştirmek zorunda kalırsak, bağlantı kurduğumuz tüm sayfaları tek tek açıp şifreyi değiştirmek yerine tek bir dosyadan değişikliğimizi yapıp işlemimizi tamamlayabiliriz. Fonksiyon içerisinden geriye değer döndürmek için return komutu kullanılır. function hesapla ($sayi1,$sayi2) if ($sayi1 > $sayi2) return $sayi1; if ($sayi2 > $sayi1) return $sayi2; Bir fonksiyon sadece içerisinde tanımlanan değişkenlerle çalışabilir. Fonksiyon geriye döndürdükten sonra içindeki tanımlanmış değişkenler ve bunların değerleri yok olurlar. global $a; $a = 20; hesapla(); print ($a); // 20000 sonucu yazılır function hesapla() $a = $a * 1000; //$a global olmasaydı buradan değerine ulaşamazdık return $a; İpucu Programın herhangi bir yerinde tanımlanmış bir değişkenin değerine başka bir fonksiyon içerisinden ulaşabilmek için, değişkenin o fonksiyon içerisinde, global olarak tanımlanması gerekir. PHP ile Veri İletişimi GET : Client(İstemci) tarafından gönderilen bilgiler browser adres satırında görüntülenir. <html> <FORM ACTION="formyolla.php" METHOD="GET"> Adınız : <input type= "text" name="ad" ></br> Soyadınız : <input type= "text" name="soyad"></br> <input type="submit" value="gönder"> </FORM> </html>.../formyolla.php?ad= Seval"&soyad= Ozbalci"&... POST : Client(İstemci) tarafından gönderilen bilgiler browser adres satırında görüntülenmeden yollanır. PHP Kullanarak mysql e bağlanmak mysql_connect( localhost, root, sifre ); mysql_select_db( baslangicdb ); 9
mysql e SQL sorgusu göndermek Bir php dosyasında veri tabanı kullanmak istendiğinde mutlaka bir veri tabanı sunucusuna bağlanılmalı ve bir veri tabanı seçilmelidir. mysql_connect komutuyla veritabanı sunucusuna IP, kullanıcı adı ve şifre verilerek bağlantı sağlanır. Daha sonra mysql_select_db komutuyla dosyadaki tüm mysql işlemlerinde kullanılacak olan veritabanı tercihi belirtilmiş olur. PHP dosyalarında tüm veri tabanı işlemlerinde önce veri tabanı sunucusuyla bağlantı kurulmalıdır. mysql_query() $isimler = mysql_query( select * from ogrenciler ); mysql_result() $ad=mysql_result($isimler,$i, ad ); mysql_numrows() $sayi=mysql_numrows($isimler) mysql_fetch_array() $gelen = mysql_fetch_array($result) Php de mysql sorgu göndermek için mysql_query() komutu kullanılır. Parantezler arasında çitf tırnak işareti kullanılarak komutlar gönderilir ve php değişkenine aktarılır. Örnekte, öğrenciler adındaki tablodan tüm kayıtların çekilmesi sql ile istenmiştir. mysql sorgulanmasında geriye dönen sonuç tablosundaki veriler mysql_result() alınır. mysql_numrows sonuç tablosundaki satır sayısını öğrenmek için kullanılır. mysql_fetch_array sonuçları dizi değişkeni olarak alır. mysql e Kayıt Eklemek $sql = "insert into ozluk (NOM, BOLUM, SINIF, ADI, SOYADI) values ('$NOM', '$BOLUM', '$SINIF', '$ADI', '$SOYADI',)"; $result= mysql_query($sql); mysql de Kayıt Silmek ve Update $sql="delete from ozluk where NOM='$NOM ; $result= mysql_query($sql); $sql = "update ozluk set BOLUM = $BOLUM', SINIF = '$SINIF', ADI = '$ADI', where NOM = $NOM"; $result= mysql_query($sql); Kaynaklar PHP ile ilgili birçok kaynak Internet üzerinde erişilebilir durumdadır. 10
Kitaplar PHP 4 İle Web Tasarımı Mithat Uysal Beta Basım Yayım Dağıtım A.Ş. 546 Sayfa PHP tanıtımı ve kurulumu, PHPEd, Metin, Grafik, Düzenli İfadeler, Dosya yönetimi, MySQL, Çerezler PHP İle Web Programcılığı Mehmet Şamlı Pusula Yayıncılık ve İletişim Ltd. 418 Sayfa PHP tanıtımı ve kurulumu, Formlar, HTTP Protokolü, Çerezler, Oturum, MySQL, PostgreSQL, COM, ODBC ve Grafik işlemleri PHP ve MySQL Özgür Çaycı Seçkin Yayıncılık 427 Sayfa PHP ile MySQL kullanımı, Oturum yönetimi Internet Kaynakları PHP ve MySQL İle Web Yazılım Geliştirme Kayra Otaner Sistem Yayıncılık 294 Sayfa PHP, MySQL ve phpmyadmin kurulumu PHP ve MySQL Uygulama Geliştirme Kılavuzu Luke Welling, Laura Thomson Alfa Basım Yayım Dağıtım 680 Sayfa + CD Dosya yönetimi, SSL, e-ticaret uygulamaları Türkiye PHP Grubu: Turk PHP: PHP Arşivi: PHP Dosyası: PHP Resmi Sitesi: Zend: ioncube: PHP Accelerator: Alternative PHP Cache: jpcache: Hidayet Dogan : http://www.php.org.tr http://www.turk-php.com http://www.phparsivi.net http://www.phpdosyasi.com http://www.php.net http://www.zend.com http://www.ioncube.com http://www.php-accelerator.co.uk http://apc.communityconnect.com http://www.jpcache.com http://www.hido.net 11