3. Fonksiyonlar ve küresel değişkenler

Download Report

Transcript 3. Fonksiyonlar ve küresel değişkenler

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)=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.
2
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.
3
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;
}
?>
4
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);
}
?>
5
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. ';
?>
6
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.
7
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.
8
Global Değişkenler
• Örnek:
<?php
$a=8;
function ekle()
{
return ($a+2);
}
echo ekle()
?>
• Sonuç: 2 -->
Ekranda sadece 2
gözükecektir
• Örnek:
<?php
$a=8;
function ekle()
{
global $a;
return ($a+2);
}
echo ekle()
?>
• Sonuç: 10 --> Ekranda
sadece 10 gözükecektir
Global komutu yeni değişken yaratma fonksiyon dışında yaratılanı kullan anlamına gelir.
9
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 ($GLOBALS['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.
10
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.
11
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.
12
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.
13
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.
14
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.
15
$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.
16
$_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.
17
$_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.
18
$_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.
19
$_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
20
$_SERVER
• Örneğin:
<?php
echo $_SERVER['SERVER_NAME'];
?>
• Yukarıdaki örnek şuna benzer bir çıktı üretir:
www.örnek.com
• $_SERVER ile mesela sadece şu IP aralığından
görülebilecek sayfalar yaratabiliriz.
21
$_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 ' y nin değeri '.$x. ' dir ';
else
echo ' y nin 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.
22
$_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/>
Her çalıştırmada POST dizini içerisinde submit değişkeni olup
</form>
olmadığına bakılır. İlk çalıştırmada bu değişken yoktur. Formu
<?php
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.
23
$_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.
24
$_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.
25
$_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.
26
$_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.
27
Ornek Dosya Aktarimi
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>
Yukle.php
• <?php
• if (!isset ($_FILES["dosyam"]))
•
die("Dosya bulunamadi");
•
•
if($_FILES["dosyam"]["error"]!=0)
die("Dosya aktarimi basarisiz.");
•
•
if($_FILES["dosyam"]["type"]!="image/pjpeg")
die("Sadece jpg dosyasi gonderebilirsiniz");
•
$dosyaYeriveAdi='./resimler/'.basename($_FILES
["dosyam"]["name"]);
$sonuc=move_uploaded_file($_FILES["dosyam"]
["tmp_name"],$dosyaYeriveAdi);
if ($sonuc==true)
{
echo "Dosya basari ile aktarildi<br/>";
echo "<img width=\"20\" height=\"20\"
src=\"".$dosyaYeriveAdi."\">";
}
else
die("Yazma sikintisi var");
?>
•
•
•
•
•
•
•
•
•
28
$_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'];
?>
29