PHP ile Programlama (I/III) Araş. Gör. Sanem SARIEL sariel@cs.itu.edu.tr http://www.cs.itu.edu.tr/~sariel/vtys/ 1 PHP (Hypertext Preprocessor) PHP : Hiper-metin önişlemcisi (Hypertext Preprocessor) PHP bir CGI programlama dilidir. PHP HTML içinde yorumlanan bir script dildir. PHP yorumcusu: Zend- çekirdeği Scripting yöntemiyle yazılmıştır. 2 1
Neden HTML Değil? Html ile web sunucusunda veritabanı dosyası açıp sorgulama yapılamaz. Html ile web sunucusunda sabit diskteki dosyalar okunamaz ve bu dosyalara yazılamaz. Html ile kullanıcıdan bilgi alınabilir ve sunucuya bilgi yollanabilir. Bu bilgi nasıl işlenecek? => exe,dll veya JSP gibi bir program veya Perl, ASP ve PHP gibi Script dilleriyle yazılmış bir program 3 PHP Kodu Çağırma Yöntemi Sunucuda yürütülecek olan bir PHP kodu.php uzantılı bir dosyada HTML kodu arasında tutulur. Dosya içinde PHP kodu özel ayraçlar arasında bulunmaktadır ve yorumlayıcı tarafından yorumlandıktan sonra tarayıcıya aktarılmalıdır. Örn: <html> <?PHP echo( Bu bir PHP alanıdır. )?> </html> Kullanıcıya sonuç aktarılacaksa bunlar html etiketleri ile yollanır. Kullanıcı PHP kodlarını görmez. 4 2
PHP Nasıl Çalışır? Kullanıcı tarayıcısı CGI sayfası için bir HTTP isteği yaratır Sunucudaki konfigürasyona göre sunucu, dosya uzantısına bakarak CGI isteğinin statik olmadığını ve bir HTML dokumanı içindeki PHP kodunun yürütülmek istendiğini anlar. PHP kodunu yorumlayacak olan modül apache ye veya belleğe dinamik olarak bağlanmıştır ve sayfayı yorumlamak üzere çağrılır. PHP modülü sayfa içeriğini tarar ve yorumlar. Script in stdout u apache ye yollanır. PHP modülü çıktısı başlık bilgisi ile tarayıcıya yollanır. 5 PHP x Perl PHP de CGI Perl de olduğu gibi sunucu tarafında farklı prosesleri canladırma gereksinimi yoktur. Zaten bellekte olan yorumlayıcı çalışır. PHP Apache modül olarak apache iç yapılarına erişimi vardır (authentication, authority, yeniden yönlendirme vs.) Perl ile tüm statik HTML çıktıları print ifadeleri ile ; PHP ile yorumlanmadan doğrudan çıkışa aktarılır. Perl ün CPAN kütüphanesinin fonksiyonelliği oldukça yüksektir. PHP C ye Perl den daha çok benzer. (Herşey fonksiyon) 6 3
PHP nin Yetenekleri Herhangi bir CGI programının yapabileceği herşeyi yapar. Form verisi alma Dinamik sayfa içeriği oluşturma Cookie alma ve yollama Veritabanı erişimli bir web sayfası hazırlamada büyük kolaylık sağlar. Desteklenen veritabanları: Adabas D, InterBase, Solid, dbase, msql, Sybase, Empress, MySQL, Velocis, FilePro, Oracle, Unix dbm, Informix, PostgreSQL Desteklenen protokoller: IMAP, SNMP, NNTP, POP3, or even HTTP Socket açıp diğer protokoller ile etkileşime destek verir. 7 PHP Dili (Giriş) 8 4
Html Dökümanı İçine PHP Kodu Yazma HTML dokumanı içinde basit Bir PHP kodu: <HTML> <HEAD><TITLE>What time is it?</title></head> <BODY> The time is now <?php print(date("d/m/y H:i:s",time()));?> </BODY> </HTML> time.php 9 Html Dökümanı İçine PHP Kodu Yazma <?php echo Deneme";?> <? echo "Deneme"?> <SCRIPT LANGUAGE= PHP > </SCRIPT> echo Deneme ; 10 5
PHP Kodları <?PHPinfo()?> ile kullanılan PHP dili versiyonu ve özellikleri öğrenilebilir. Açıklama satırları /* Çok satırlı açıklama*/ // Tek satırlık açıklama # Tek satırlık açıklama 11 PHP Değişkenleri PHP de desteklenen veri tipleri: Kayan Noktalı Sayılar (floating-point numbers) Tamsayılar (integers) Karakter katarları (strings) Diziler (arrays) Nesneler(objects) PHP değişken tipleri programcı tarafından belirlenmez.! Yürütme zamanında değişkenin kullanıldığı bağlama göre belirlenir. Bir değişkenin tipi özel olarak belirtilmek isteniyorsa, cast /Settype() 12 6
PHP Değişkenleri / Integer+Double Integer $a = 1234; # onluk sayı $a = -123; # negatif onluk sayı $a = 0123; # sekizlik (octal) sayı octal number (onluk karşılığı: 83) $a = 0x12; # onaltılık (hexadecimal) sayı (onluk karşılığı: 18) Floating point number $a = 1.234; $a = 1.2e3; 13 PHP Değişkenleri / String String ataması: $str= atanan karakterler $degisken, değişken değerleri; $str= atanan karakterler $degisken, değişken adları; string bitiştirme: $str= $str. eklenen string ; $str.= eklenen string string karakteri $str[i] string içeriğinde., e, E içeriyorsa reel sayı olarak tanımlanır. Aksi takdirde tamsayı olarak algılanır. Eğer string ilk bölümü tamsayı ise bu değer kullanılır. Aksi takdirde değeri 0 olarak alınır. string.php 14 7
PHP Değişkenleri / Array Tek Boyutlu Diziler Dizi işaretçisi ile atama $a[0] = ilkeleman"; $a[1] = "ikincieleman"; Diziye ekleyerek atama $b[] = ilkeleman"; // $b[0] == "ilkeleman" $b[] = "ikincieleman"; // $b[1] == "ikincieleman" Çok Boyutlu Diziler $c[] = "12"; Hem string dizisi hem de karakter dizisi olarak tanımlanır. $d="12"; array1.php 15 PHP Değişkenleri / Array İlişkili Dizi (Associative Array/Hash) $dizi=array( Ad1, Ad2, Ad3 ); $dizi= array(array(ad=> Ad1,soyad=> Soyad1,not=>25), array(ad=> Ad2,soyad=> Soyad2,not=>75 )); array2.php 16 8
PHP Değişkenleri / Nesne <html> <? class newanimal { function initialize () { echo I m the new animal initialized."; } } $cat = new newanimal; $cat->initialize();?> </html> object.php Çıktı: I m the new animal initialized. 17 PHP Değişkenleri Büyük/küçük harf ayrımı var. Değer ile atama Değişkenler üzerinde yapılan değişiklik sadece ilgili değişkeni değiştirir. Referans ile atama Yapılan değişiklik tüm değişkenleri değiştirir (C deki işaretçi mantığı). &$değişken Sadece değişkenlere referans ataması yapılabilir. variables.php 18 9
PHP Değişkenleri Değişken Tanım Alanı $a = 1; $b = 2; Function Sum () { $b = $a + $b; } Sum (); echo $b; global $a, $b; Global değişkenleri fonksiyon içinde kullanabilmek için fonksiyon içinde global tanımlaması yapılır. $GLOBALS dizisi kullanarak erişim variablescope.php 19 PHP Değişkenleri Statik değişkenler Yerel değişken olarak tanımlanmış olsalar da değerlerini korurlar. Rekürsif fonksiyonlarda kullanılabilir. Function RecIncrement() { $count = 0; Static olarak tanımlanmalı $count++; echo $count; if ($count < 10) {RecIncrement();} } RecIncrement(); recincrement.php 20 10
PHP Değişkenleri Değişkenlerin değişken ismi olması: $$a; Diziler için karışıklığı önlemek üzere: ${$a[1]}; $$a[1]; Sabitleri tanımlama: define( <sabitadı>,<sabitdeğeri>); define( pi,3.14); 21 Tip Değişimi (Casting) C formatı tip değişimi (int), (integer) integer a dönüştürme (real), (double), (float) double a dönüştürme (string) string e dönüştürme (array) array a dönüştürme (object) object e dönüştürme $a = (int) $a // a önce double olarak tanımlanmış olsun. settype() ile değişken tip, değiştirilebilir. settype(<değişken adı>,<yeni tip>) cast.php 22 11
İşlemler Yürütme işlemi.. shell komutu şeklinde yürütülür. <?php $output = `ls -al`; echo "<pre>$output</pre>";?> Temel işlemlere ilişkin bilgiler ekler bölümündedir. index.php expression.php 23 Program Denetimi If-else if (expr) Statement else if (expr) Statement else Statement While while (expr) statement Do-while do statement while (expr) 24 12
Program Denetimi For for (expr1; expr2; expr3) statement Foreach foreach(array_expression as $value) statement foreach(array_expression as $key => $value) statement break Continue Switch switch (variable){ Case <value> statement.. Default statement} foreach.php 25 Fonksiyonlar function <FunctionName> ($arg_1, $arg_2,..., $arg_n) { statements; return $retval; } Değer ile Parametre Aktarımı Referans ile Parametre Aktarımı Fonksiyonun parametre üzerinde değişiklik yapabilmesi sağlanır. Parametre default değerleri function.php 26 13
Kaynaklar http://ucat.ncsi.iisc.ernet.in/phpman/manual. html http://www.thekramers.net/phpdemo/ 27 Ek 1: PHP- MySQL kurulumu http://www.php.net/downloads.php http://www.mysql.com/downloads/index.html Ms-Windows için PWS Linux için Apache sunucu programı: http://www.apache.org/dist/ adresinden apache_1.3.12.tar.gz dosyası Mod_SSL (Güvenli Socket Katmanı), OpenSSL Gcc C derleyicisi bulunmalı (gcc 2.8.1 ve üstü) PHP tek başına yorumlayıcı olarak veya Apache Web sunucusunun bir modülü olarak çalışabilir. MySQL Veritabanı sunucusu 28 14
EK2: PHP Versiyon Sorgulama <HTML> <HEAD><TITLE>PHP Versiyon?</TITLE></HEAD> <BODY> <?PHPinfo()?> </BODY> </HTML> 29 Ek 3: Özel String Karakterleri \n yeni satır \r satır başı \t sekme (tab) \\ backslash \$ dolar işareti \ tek tırnak \" çift tırnak \[0-7]{1,3} Düzenli ifadeye uyan karakter dizisi sekizlik düzende bir karakterdir. \x[0-9a-fa-f]{1,2} Düzenli ifadeye uyan karakter dizisi onaltılık düzende bir karakterdir. 30 15