290 likes | 480 Views
Fonksiyonlar ve Küresel Değişkenler. Fonksiyonlar. Amacı: Belli bir işlemi yapıp sonucu döndürmektir. Tıpkı matematikteki gibidir. Örnegin F(b,a,c)=b 2 -4*a*c.
E N D
Fonksiyonlar • Amacı: Belli bir işlemi yapıp sonucu döndürmektir. • Tıpkı matematikteki gibidir. • Örnegin F(b,a,c)=b2-4*a*c. • Belli bir algoritma geliştirilir., fonksiyon içerisinde verilen parametreler (b,a,c) yardımıyla istediğimiz yerde çağrılarak istenilen işlemi yapan yapılara fonksiyon denir.
Fonksiyonlar function fonskiyonismi(varsaparametreler) { /* burada fonksiyon çağrıldığında çalışacak olan komut satırları*/ return dönecekolandeğer; //eğer birşey dönecekse } Not: Birden fazla parametre varsa bunlar virgül ile birbirlerinden ayrılmalıdır.
Fonksiyonlar • Örnek: • Formülümüz: F(C)=Cx1.8 +32 • Eğer formülümüzü fonksiyona dönüştürürsek --> • F yi bulmak için C yi bilmeliyiz (girmeliyiz) ve sonra C yi 1.8 ile çarpıp çıkan sonuca 32 eklemeliyiz. <?php function F($c) { $sonuc=($c*1.8)+32; return $sonuc; } ?>
Fonksiyonlar <?php function F($c) { $sonuc=($c*1.8)+32; return $sonuc; } ?> • Burada fazladan bir değişken kullanılmıştır. Eğer istersek şu sekilde de yazılabilir: <?php function F($c) { return (($c*1.8)+32); } ?>
Fonksiyonları çağırmak <?php function F($c) { $sonuc=($c*1.8)+32; return $sonuc; } $x=F(42); echo "42 Celsius $x Fahrenheit eder.<br/> "; echo '55 Celsius'.F(55). 'Fahrenheit eder. '; ?>
Fonksiyonlarda return <?php function F($c) { $sonuc=($c*1.8)+32; return $sonuc; echo 'Merhaba'; } echo F(52); ?> • Yukarıdaki örnekte ekranda Merhaba mesajını hiç göremezsiniz. • Return komutu PHP için bir nevi çıkış (exit) dır. Fonksiyon içerisinde yapılacak en son işlemdir. Sonrasına hiç bakılmaz. • Örnekteki fonksiyon içerisinde echo komutu kullanmak kendi başına bir hatadır. Sebebi fonksiyonun amacına ters düşmesidir. Hiçbir zaman bir fonksiyon değeri direk yazdırmaz. Sadece sonuç döndürür.
Fonksiyonlarda değişken kavramı. • İki çesit değişken vardır. «Yerel» ve «Küresel». • Küresel (global) değişkenler: • Fonksiyon dışında tanımlanan bir değişken fonksiyon içerisinde tanımlı değildir. Yani PHP dilinde tüm değişkenler aslında yereldir. • Küresel olarak kullanmak istediğimiz değişkenleri önce fonksiyonun dışında tanımlayıp daha sonra fonksiyon içerisinde global komutu ile kullanmalıyız.
Global Değişkenler • Örnek: <?php $a=8; function ekle() { global $a; return ($a+2); } echo ekle() ?> • Sonuç: 10 --> Ekranda sadece 10 gözükecektir • Örnek: <?php $a=8; function ekle() { return ($a+2); } echo ekle() ?> • Sonuç: 2 --> Ekranda sadece 2 gözükecektir Global komutu yeni değişken yaratma fonksiyon dışında yaratılanı kullan anlamına gelir.
Global değişkenler • Örnek: <?php $a=8; function ekle() { return ($GLOBALS['a']+2); } echo ekle() ?> • Sonuç: 10 --> Ekranda sadece 10 gözükecektir • Örnek: <?php $a=8; function ekle() { global $a; return ($a+2); } echo ekle() ?> • Sonuç: 10 --> Ekranda sadece 10 gözükecektir $GLOBALS bir değişken dizinidir. Bu dizin dütün değişkenleri bünyesinde barındırır. Yukarıdaki iki örnek bi,rbirlerine denktir. [] içerisinde $ olmamasına dikkat edin.
Global Değişkenler • Örnek: <?php, $a=8; function ekle() { global $a; $a=$a+2; return $a; } echo ekle(). '-'.$a; ?> • Sonuç: 10-10 --> Ekranda sadece 10-10 gözükecektir. Yani $a nın değeri değişmiştir.
Global Değişkenler • Örnek: <?php, $a=8; function ekle() { $a=2; return $a; } echo ekle(). '-'.$a; ?> • Sonuç: 2-8 --> Ekranda sadece 2-8 gözükecektir. Yani fonksiyon dışındaki $a ve fonksiyon içindeki $a birbirlerinden farklı iki değişkendir.
Fonksiyonlarda static değişkenler • Fonksiyon içinde tanımlanan değişkenler fonksiyona her çağrı yapıldığında yeniden yaratılır ve fonksiyonun bitiminde bu değişkenler yok edilir. • Tanımladığımız bir fonksiyon içerisinde kullandığımız bir değişkenin değerini, aynı fonksiyonu ikinci kez çağırdığımızda değişkenin değerini kaldığımız yerden kullanmak istiyorsak static komutu kullanılır.
Fonksiyonlarda static değişkenler <?php function sayacoku() { static $sayac=0; $sayac++; return $sayac; } echo sayacoku(); echo sayacoku(); ?> • Burada sayacoku her defasında farklı bir artan sıralı değeri sonuç olarak gönderecek. 1,2,3 gibi. • Eğer static komutunu silersek sayacoku her defasında aynı değeri 1 i sonuç olarak gönderecek.
Küresel Değişkenler • PHP de öntanımlı olarak gelen küresel değişkenler (değişken dizinleri) bulunmaktadır. • Bunlar $GLOBALS, $_SERVER, $_GET, $_POST, $_REQUEST, $_COOKIE, $_FILES, $_SESSION dır. • Her birinin farklı bir amacı bulunmaktadır. Sırasıyla öğrenelim.
$GLOBALS • Oluşturduğumuz bütün değişkenler aslında GLOBALS küresel değişkeninde tanımlanır. <?php $x=5; echo $GLOBALS[' x ']; ?> • Sonuç: 5 --> ekrana yazdırılır.
$_SERVER • PHP ile sunucu(server) ve kullanıcı(client) arasında bir takım bilgileri elde etmemizi sağlar. • 'PHP_SELF': Çalıştırılmakta olan betiğin, belge kök dizinine göreli dosya adıdır. Örneğin, http://mesela.dom/dnm.php/foo.bar adresindeki bir betik için $_SERVER['PHP_SELF'] değeri /dnm.php/foo.bar olacaktır. • 'GATEWAY_INTERFACE': Sunucunun desteklediği CGI belirtiminin sürümünü içerir; 'CGI/1.1' gibi. • 'SERVER_ADDR' : Geçerli betiğin altında çalıştığı sunucunun IP adresidir. • 'SERVER_NAME': Geçerli betiğin altında çalıştığı sunucunun adıdır. Eğer betik bir sanal konak üzerinde çalışıyorsa, o sanal konağın adını içerir. • 'SERVER_SOFTWARE' : Sunucu kimlik dizgesi, isteklere verilen cevap başlıklarının içinde verilir. • 'SERVER_PROTOCOL' : Sayfa isteğinin yapıldığı protokolün ismi ve sürümüdür; 'HTTP/1.1' gibi; • 'REQUEST_METHOD' : Sayfaya erişim için kullanılan istek yöntemi; 'GET', 'POST' gibi. • 'REQUEST_TIME': İsteğin başlangıç zaman etiketidir. PHP 5.1.0'dan beri mevcuttur. • 'QUERY_STRING': Sorgu dizgesi, sayfaya erişirken kullanılabilir.
$_SERVER • 'DOCUMENT_ROOT': Sunucunun ayar dosyasında da tanımlandığı gibi, geçerli betiğin altında çalıştığı belge kök dizinidir. • 'HTTP_ACCEPT': Geçerli isteğin Accept: başlığının içeriğidir. • 'HTTP_ACCEPT_CHARSET': Geçerli isteğin Accept-Charset: başlığının içeriğidir. Örnek: 'iso-8859-9,*,utf-8'. • 'HTTP_ACCEPT_ENCODING': Geçerli isteğin Accept-Encoding: başlığının içeriğidir. Örnek: 'gzip'. • 'HTTP_ACCEPT_LANGUAGE': Geçerli isteğin Accept-Language: başlığının içeriğidir. Örnek: 'tr'. • 'HTTP_CONNECTION': Geçerli isteğin Connection: başlığının içeriğidir. Örnek: 'Keep-Alive'. • 'HTTP_HOST': Geçerli isteğin Host: başlığının içeriğidir. • 'HTTP_REFERER': Kullanıcı tarayıcısını geçerli sayfaya gönderen sayfanın (varsa) adresidir. Bu kullanıcı tarayıcısı tarafından belirtilir. Her kullanıcı tarayıcısı bunu belirtmez ve bazıları HTTP_REFERER değiştirmeyi bir özellik olarak sunar. Kısaca, buna güvenilemez. • 'HTTP_USER_AGENT' Geçerli isteğin User-Agent: başlığının içeriğidir. Bu sayfaya erişen kullanıcı tarayıcısını ifade eden bir dizgedir. Örneğin: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)get_browser() işlevi ile elde edebileceğiniz bu değeri sayfanın çıktısını kullanıcının tarayıcısına göre şekillendirmek için kullanabilirsiniz.
$_SERVER • 'HTTPS': Eğer betik HTTPS protokolü ile sorgulanmışsa boş olmayan bir değer atanır. • 'REMOTE_ADDR': Geçerli sayfayı görüntüleyen kullanıcının IP adresidir. • 'REMOTE_HOST': Geçerli sayfayı görüntüleyen kullanıcının sunucu adıdır. Kullanıcının REMOTE_ADDR değerinden ters dns sorgusuyla elde edilir. • 'REMOTE_PORT': Kullanıcının makinesinin HTTP sunucusu ile haberleşmek için kullandığı porttur. • 'SCRIPT_FILENAME': Geçerli betiğin mutlak yoludur. • 'SERVER_ADMIN': HTTP sunucusu ayar dosyasındaki SERVER_ADMIN (Apache için) yönergesine verilen değerdir. Eğer betik bir sanal konak üzerinde çalışıyorsa, o sanal konak için için tanımlanmış değer olur. • 'SERVER_PORT': Haberleşme için HTTP sunucusu tarafından kullanılan porttur. Öntanımlı kurulumlar için değeri '80'dir; örneğin SSL kullanımında bunu güvenli HTTP portu olarak ne tanımladıysanız ona değiştirebilirsiniz. • 'SERVER_SIGNATURE': Eğer etkinse, sunucu tarafından üretilen sayfalara eklenen, sunucu sürümünü ve sanal konak adını içeren dizgidir. • 'PATH_TRANSLATED': Sunucu gerekli sanaldan gerçeğe dönüşümleri yaptıktan sonra geçerli betiğin dosya sistemini (belge kökü değil) temel alan yoludur.
$_SERVER • 'SCRIPT_NAME':Geçerli betiğin yolunu içerir. Kendi kendilerini göstermesi gereken sayfalar için kullanışlıdırlar. • 'REQUEST_URI': Sayfaya erişim için belirtilen URI; örneğin, '/index.html'. • 'PHP_AUTH_DIGEST': Apache altında bir modül olarak Özetli HTTP kimlik doğrulaması yapılırken bu değişken istemci tarafından gönderilen 'Authorization' başlığında belirtilir (böylece siz de uygun geçerlilik denetimini yapmak için bunu kullanabilirsiniz). • 'PHP_AUTH_USER': Apache veya IIS (PHP 5 üzerinde ISAPI) altında modül olarak HTTP kimlik doğrulaması yapılırken bu değişkene kullanıcı tarafından sağlanan kullanıcı adı atanır. • 'PHP_AUTH_PW': Apache veya IIS (PHP 5 üzerinde ISAPI) altında modül olarak HTTP kimlik doğrulaması yapılırken bu değişkene kullanıcı tarafından sağlanan parola atanır. • 'AUTH_TYPE': Apache altında modül olarak HTTP kimlik doğrulaması yapılırken bu değişkene kullanılan kimlik doğrulama türü atanır. • 'PATH_INFO': İstemci tarafından sağlanan dosya yolunu içerir; dosya isminin ardında bir sorgu dizgesi olsa bile bu gösterilmez. Örneğin, betiğe şu URL ile erişiliyor olsun: http://www.example.com/php/path_info.php/some/stuff?foo=bar. Bu durumda $_SERVER['PATH_INFO'], /some/stuff değerini içerecektir. • 'ORIG_PATH_INFO': PHP tarafından işlenmeden önceki
$_SERVER • Örneğin: <?php echo $_SERVER['SERVER_NAME'];?> • Yukarıdaki örnek şuna benzer bir çıktı üretir: www.örnek.com • $_SERVER ile mesela sadece şuIP aralığından görülebilecek sayfalar yaratabiliriz.
$_GET • HTTP get değişkenleri bu küresel değişkende tutulur. Web sayfalarımızın adres satırında değer taşıma durumlarında bu küresel dizisi kullanılır. <?php $x=$_GET['y']; if ($x!= ' ') echo ' ynin değeri '.$x. ' dir '; else echo ' ynin değerini girmediniz '; ?> Bu dosyayı a.php diye kaydedip. Çalıştırdığımızda else kısmı çalışacaktır ekranda ' y in değerini girmediniz ' yazacaktır. Fakat a.php?y=5 diye çalıştırırsak, ekranda ' y in değeri 5 dir ' mesajı belirecektir.
$_POST • POST metodu ile sayfaya gönderilen verileri almamıza yaran küresel değişkendir. • Örneğin: • <?php • if (isset($_POST['submit'])) • { • echo " Merhaba {$_POST['adi']} {$_POST['soyadi']} "; • } • else • { • ?> • <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> • <table border="1"> • <tr> <td>Adı:</td><td><input type="text" name="adi"/></td></tr> • <tr> <td>Soyadı:</td><td><input type="text" name="soyadi"/></td></tr> • <tr> <td colspan="2"><input name="submit" type="submit" value="Gönder"></td></tr> • </table/> • </form> • <?php • } • ?> Her çalıştırmada POST dizini içerisinde submit değişkeni olup olmadığına bakılır. İlk çalıştırmada bu değişken yoktur. Formu doldurup tekrar gönder tuşuna basınca formdan alınan bilgiler yine aynı sayfaya gönderilecek (PHP_SELF) . Bu sefer script yeniden yüklenirken if denetlemesi doğru olacak ve forma girilen isim yazdırılacaktır.
$_COOKIE • Geçerli betiğe HTTP Çerezleri üzerinden aktarılan bütünleşik bir değişken dizisi. İstemci (client) tarafta yaratılan küçük dosyalar içerisinde tutulan ve sadece yaratıldığı web adresi tarafından okunabilen değişkenlerdir. Amacı genellikle sadece ziyaretçileri tanımaktır. <?php if (!$_COOKIE['isim']) setcookie('isim', 'Emre',time()+3600); // cookie yaratılır // cookie nin adı isim değeri Emre ve geçerlilik süresi 1 saattir. else echo $_COOKIE['isim']; // cookie deki değier okunur ?> Cookie (çerezler) daha sonra detaylı olarak incelenecektir.
$_REQUEST • Sırayla $_GET,$_POST ve $_COOKIE küresel dizinlerinin değerlerini içerisinde barındıran evrensel bir dizi değişkenidir. • Yani slayt 22,23 ve 23 deki $_GET, $_POST ve $_COOKIE yazılan yerleri $_REQUEST olarak yazabiliriz. Örneğin slayt 22 deki $_GET['x'] yerine $_REQUEST['x'] yazılabilir.
$_FILES • Form yoluyla kullanıcıdan herhangi bir dosyayı server’e aktarmak istediğimizde $_FILES küresel dizi değişkeni kullanılır. <?php if (isset($_FILES["dosya"])) { echo "<pre>"; print_r($_FILES); echo "</pre>"; } ?> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data"> Dosya:<input type="file" name="dosya"/><br/> <input type="submit" value="Gönder"/> </form> • print_r bir dizindeki bütün elemanların yazdırılmasını sağlar. Bu scriptin sonucu bir sonraki slaytta verilmiştir.
$_FILES • Array • ( • [dosya]=> Array • ( • [name]=>x.txt • [type]=>application/octet-stream • [tmp_name]=> /tmp/adlfkgh.txt • [error]=>0 • [size]=>356 • ) • ) • Burada: • name: yüklenen dosyanın adı • type: türü • tmp_name: yüklenen dosyanın geçici yeri ve adı • size: bayt cinsinden boyutu • error: yüklemede hata varsa kodu • FILES daha sonra detaylı olarak incelenecektir.
OrnekDosyaAktarimi Yukle.php • <?php • if (!isset ($_FILES["dosyam"])) • die("Dosyabulunamadi"); • if($_FILES["dosyam"]["error"]!=0) • die("Dosyaaktarimibasarisiz."); • if($_FILES["dosyam"]["type"]!="image/pjpeg") • die("Sadece jpg dosyasigonderebilirsiniz"); • $dosyaYeriveAdi='./resimler/'.basename($_FILES["dosyam"]["name"]); • $sonuc=move_uploaded_file($_FILES["dosyam"]["tmp_name"],$dosyaYeriveAdi); • if ($sonuc==true) • { • echo "Dosyabasariileaktarildi<br/>"; • echo "<img width=\"20\" height=\"20\" src=\"".$dosyaYeriveAdi."\">"; • } • else • die("Yazmasikintisivar"); • ?> Dosyaat.html • <!DOCTYPE html> • <html> • <head> • <title></title> • <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> • </head> • <body> • <form action="yukle.php" method="post" enctype="multipart/form-data"> • Dosya:<input type="file" name="dosyam"/><br/> • <input type="submit" value="Yukle"/> • </form> • </body> • </html>
$_SESSION • Amacı: Değişkenleri bir sayfadan diğerine aktarabilmek, kullanıcıları sayfa değişimi yaparken tanıyabilmek. • Sessionyaz.php dosyasında isim adında bir session değişkeni oluşturuyoruz. Bu session değişkenşinin bilgisi ancak ve ancak aynı oturum boyunca (browser’i kapamadan) linki tıklayıp veya adres satırından sessionoku.php dosyasını çalıştırdığımızda isim session değişkeninin değerini okuyabiliriz. • sessionyaz.php <?php @session_start(); // eger otomatik başlatılmamışsa hersayfadaki ilk komut olarak yazılmalıdır. $_SESSION['isim']='Emre'; ?> <a href="sessionoku.php"> tıklayın isim değişkeninin değeri diğer sayfada görünsün.</a> • sessionoku.php <?php @session_start(); // eger otomatik başlatılmamışsa hersayfadaki ilk komut olarak yazılmalıdır. echo $_SESSION['isim']; ?>