Süper Global’ler PHP’de ön tanımlı değişkenlere verilen isim olup; dış kaynaklı değişkenlerden yerleşik ortam değişkenlerine, son hata iletisinden son elde edilen başlıklara kadar bir çok veriye ulaşmamızı sağlarlar.
$GLOBALS: Atanacak olan değişken için kapsama / etki alanlarının değiştirilmesini sağlar. Bu sayede global alanda tanımlanmış bir değişkene local alandan, local alanda tanımlanmış bir değişkene global alandan ulaşılabilme imkanı tanır.
$_SERVER: Http server’ı tarafından oluşturulan, server (sunucu) ve işletme ortamı bilgilerine ulaşılabilme imkanı tanır. Fakat her Http sunucusu bu değerleri oluşturacak diye bir garanti yoktur. Ayrıca her Http sunucusu farklı değerler üretebilir.
$_GET: URL üzerinden gelen verilere ulaşabilme imkanı tanır. Genellikle URL üzerinden gelen istekler ve form işleme işlemleri için kullanılmaktadır.
$_POST: İstek gönderim etiketleri aracılığı ile gelen verilere ulaşabilme imkanı tanır. Genellikle kapalı yöntemle gelen istekler ve form işleme işlemleri için kullanılmaktadır.
$_REQUEST: URL üzerinden veya istek gönderim etiketleri aracılığı ile gelen verilere ulaşabilme imkanı tanır. Genellikle URL üzerinden gelen istekler, kapalı yöntemle gelen istekler ve form işleme işlemleri için kullanılmaktadır. $_REQUEST esasında $_GET ile $_POST’un yaptığı işi tek başına yapar.
$_FILES: Http sunucusuna herhangi bir dosya yükleme işlemi esnasında, ilgili dosya verilerine ulaşabilme imkanı tanır.
$_COOKIE: Herhangi bir kullanıcının web tarayıcısına yerleştirilmiş olan cookie (çerez) verilerine ulaşabilme imkanı tanır.
$_SESSION: Herhangi bir kullanıcı için session (oturum) tanımlama imkanı tanır. Ayrıca daha önceden tanımlanmış olan oturum verilerine de ulaşabilme imkanı tanır.
$GLOBALS Kullanımı:
Ön tanımlı değişkenlerden ilki olan $GLOBALS değişkeninin görevi değişkenlerin kapsama alanlarını genişletme imkanı vermesidir. Şimdi klasik düzende ne olduğuna bakalım:
<?php function globalden_lokale(){ $ad_soyad="Oben Seven"; } echo $ad_soyad; ?>
kodu için çıktı şu şekilde olacaktır:
Notice: Undefined variable: ad_soyad in /opt/lampp/htdocs/php/globals.php on line 22
Bu hatanın kaynaklanma nedeni “Undefined Variable” yani Tanımlanmamış Değişken. Php dosyasının global alanında olan ekrana yazdırma fonksiyonu, değişkeni arıyor ama bulamıyor. Çünkü lokal alanda tanımlanmış. Dolayısıyla tanımlanmamış değişken hatası veriyor.
Peki lokal alanda tanımlanan değişkeni global alanda nasıl kullanabiliriz ? Tabii ki lokalde tanımlayacağımız değişkeni $GLOBALS ile tanımlayarak.
<?php function globalden_lokale(){ $GLOBALS["ad_soyad"]="Oben Seven"; } globalden_lokale(); echo $ad_soyad; ?>
Burada $GLOBALS[“ad_soyad”] ifadesiyle lokaldeki ad_soyad değişkenini globalleştirdik ve php dosyamızın her yerinden erişilebilir hale getirdik. ilk(); komutuyla fonksiyonumuzu çalıştırınca artık değişkenimizi kullanabiliriz.
Dikkat ederseniz değişkenimize $ad_soyad şeklinde erişebildik. Dilerseniz lokaldeki şekli ile $GLOBALS[“ad_soyad”] şeklinde de yazabilirsiniz.
<?php function globalden_lokale(){ $GLOBALS["ad_soyad"]="Oben Seven"; } globalden_lokale(); echo $ad_soyad; echo "<br />"; echo $GLOBALS["ad_soyad"]; ?>
Her iki kullanım şekli de size aynı sonucu verecektir:
Oben Seven Oben Seven
Şimdi dilerseniz bir örnek ile de lokalden global alana erişmeyi görelim.
<?php $firma="interaktifweb"; function lokalden_globale(){ echo "info@" . $firma . ".com adresinden ulaşabilirsiniz."; } lokalden_globale(); ?>
kodunu çalıştırdığımızda çıktımız:
Notice: Undefined variable: firma in /opt/lampp/htdocs/php/globals.php on line 38 info@.com adresinden ulaşabilirsiniz.
şeklinde hata verecektir. Çünkü globalde tanımlanan $firma değişkenine lokalden erişmek de mümkün olmamıştır.
Bunu gerçekleştirebilmek için biraz önce öğrendiğimiz şekilde değişkeni global değişken olarak tanımlarsak sorunumuz çözülür mü ?
<?php $GLOBALS["firma"]="interaktifweb"; function lokalden_globale(){ echo "info@" . $firma . ".com adresinden ulaşabilirsiniz."; } lokalden_globale(); ?>
kodunu çalıştırdığımızda çıktımız:
Notice: Undefined variable: firma in /opt/lampp/htdocs/php/globals.php on line 38 info@.com adresinden ulaşabilirsiniz.
maalesef yine hata verecektir. Ancak tanımlandığı şeklinde ifadeyi kullanacak olursak;
<?php $GLOBALS["firma"]="interaktifweb"; function lokalden_globale(){ echo "info@" . $GLOBALS["firma"] . ".com adresinden ulaşabilirsiniz."; } lokalden_globale(); ?>
kodunu çalıştırdığımızda çıktımız:
info@interaktifweb.com adresinden ulaşabilirsiniz.
Yani lokal alandaki değişkene global alandan ulaşmak istiyorsak değişken adını $firma şeklinde direkt kullanabiliriz ama global alandaki değişkene lokal alandan ulaşmak istiyorsak mutlaka $GLOBALS[“firma”] şeklinde kullanmalıyız.
Global alandaki değişkene lokal alandan erişmenin bir diğer yolu da değişkeni global ifadesiyle lokal alana almaktır:
<?php $sehir="Ankara"; function konum(){ global $sehir; echo "İnteraktifweb " . $sehir . " merkezli bir web tasarım&programlama firmasıdır."; } konum(); ?>
kodunu çalıştırdığımızda çıktımız:
İnteraktifweb Ankara merkezli bir web tasarım&programlama firmasıdır.
Burada lokal alanda kullanılan global ifadesiyle $GLOBALS süper globalini karıştırmayınız.
$_SERVER Kullanımı:
Super Globaller içinde en çok işleve sahip olanıdır. Sunucu tarafından oluşturulan işletme ortamı bilgilerine ulaşabilme imkanı tanır. Tabii her sunucu bu verilere erişim izni verecek ya da aynı verileri oluşturacak diye bir garanti yoktur. Bir çok ön tanımlı işlevi bulunmaktadır. Bir kısmını aşağıda verdik ama farklı sunucularda daha fazla ya da az işlev bulmanız da olasıdır.
Şimdi örneklerle bu değişken yardımıyla erişebileceğimiz sunucu bilgilerini görelim. Örneğin ilk işlevimizi olan ve çalışan PHP dosyasının adresini döndüren PHP_SELF verisini elde etmek için kullanabileceğimiz $_SERVER[‘PHP_SELF’] değişkenini kullanalım;
<?php echo $_SERVER['PHP_SELF']; ?>
kodu için çıktı şu şekilde olacaktır:
/php/server.php
Web sitemizin kök dizini içerisinde çalıştırılan dosyanın yolunu bize verdi.
Benzer şekilde tüm değişkenleri test ederek hangi verileri bize döndürdüklerine bir bakalım:
<?php echo '$_SERVER[\'PHP_SELF\'] değişkeni bize çalışan dosyanın yolunu verir: ' . $_SERVER['PHP_SELF']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'GATEWAY_INTERFACE \'] değişkeni sunucunun CGI versiyonunu verir: ' . $_SERVER['GATEWAY_INTERFACE']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SERVER_ADDR\'] değişkeni sunucumuzun IP adresini verir. Localhost için: ' . $_SERVER['SERVER_ADDR']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SERVER_NAME\'] değişkeni sunucumuzun konfigürasyon dosyasında tanımlı adını verir: ' . $_SERVER['SERVER_NAME']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SERVER_SOFTWARE\'] değişkeni sunucuda çalışan yazılımın adını ve versiyonunu verir: ' . $_SERVER['SERVER_SOFTWARE']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SERVER_PROTOCOL\'] değişkeni çalışan sunucunun HTTP protokol versiyonunu verir: ' . $_SERVER['SERVER_PROTOCOL']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'REQUEST_METHOD\'] değişkeni çalışan PHP dosyasının hangi istek metodunu kullandığını verir: ' . $_SERVER['REQUEST_METHOD']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'REQUEST_TIME\'] değişkeni 1 Ocak 1970\'den itibaren geçen saniye değerini verir: ' . $_SERVER['REQUEST_TIME']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'REQUEST_TIME_FLOAT\'] değişkeni 1 Ocak 1970\'den itibaren geçen saniye ve mikrosaniye değerini verir: ' . $_SERVER['REQUEST_TIME_FLOAT']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'QUERY_STRING\'] değişkeni çalışan dosyanın url\'si ile gönderilen bir sorgudizesi var ise onu verir: ' . $_SERVER['QUERY_STRING']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'DOCUMENT_ROOT\'] değişkeni sunucunun kök dizini yolunu verir: ' . $_SERVER['DOCUMENT_ROOT']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'HTTP_ACCEPT\'] değişkeni PHP dosyasına erişim için gönderilen başlık isteğinin bilgilerini verir: ' . $_SERVER['HTTP_ACCEPT']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'HTTP_ACCEPT_ENCODING\'] değişkeni PHP dosyasına erişim için kabul edilen kodlama başlık içeriğini verir: ' . $_SERVER['HTTP_ACCEPT_ENCODING']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'HTTP_ACCEPT_LANGUAGE\'] değişkeni PHP dosyasına erişim için kabul edilen lisan başlık bilgisini verir: ' . $_SERVER['HTTP_ACCEPT_LANGUAGE']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'HTTP_CONNECTION\'] değişkeni PHP dosyasına erişim için kabul edilen bağlantı başlık bilgisini verir: ' . $_SERVER['HTTP_CONNECTION']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'HTTP_HOST\'] değişkeni PHP dosyasının çalıştığı host başlık bilgisini verir: ' . $_SERVER['HTTP_HOST']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'HTTP_REFERER\'] değişkeni ziyaretçinin sitenize geldiği referans sitenin adını verir. Örneğin Google aramasıyla geldiyse goole adresini verir: ' . $_SERVER['HTTP_REFERER']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'HTTP_USER_AGENT\'] değişkeni PHP dosyasına erişim isteğinde bulunan ziyaretçinin tarayıcı bilgilerini verir: ' . $_SERVER['HTTP_USER_AGENT']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'HTTPS\'] değişkeni PHP dosyasına erişilirken güvenli erişim olup olmadığını verir: ' . $_SERVER['HTTPS']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'REMOTE_ADDR\'] değişkeni PHP dosyasını görüntüleyen kullanıcının IP adresi bilgisini verir: ' . $_SERVER['REMOTE_ADDR']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'REMOTE_HOST\'] değişkeni PHP dosyasını görüntüleyen kullanıcının host başlığı bilgisini verir. Örneğin bilgisayar adı gibi: ' . $_SERVER['REMOTE_HOST']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'REMOTE_PORT\'] değişkeni PHP dosyasını görüntüleyen kullanıcının sunucu ile haberleşmekte kullandığı port bilgisini verir: ' . $_SERVER['REMOTE_PORT']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SCRIPT_FILENAME\'] değişkeni bize çalışan dosyanın adını ve sunucudaki tam yolunu verir: ' . $_SERVER['SCRIPT_FILENAME']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SERVER_ADMIN\'] değişkeni php dosyasının çalıştığı sunucunun yönetici mail\'ini verir: ' . $_SERVER['SERVER_ADMIN']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SERVER_PORT\'] değişkeni php dosyasının çalıştığı sunucunun yayınlama port bilgisini verir: ' . $_SERVER['SERVER_PORT']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SERVER_SIGNATURE\'] değişkeni php dosyasının çalıştığı sunucunun yazılım versiyonunu, sanal host adresi ile port numarasını verir: ' . $_SERVER['SERVER_SIGNATURE']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'SCRIPT_NAME\'] değişkeni bize çalışan dosyanın yolunu verir: ' . $_SERVER['SCRIPT_NAME']; echo "<br />"; echo "<br />"; echo '$_SERVER[\'REQUEST_URI\'] değişkeni bize çalışan dosyanın URI yolunu verir: ' . $_SERVER['REQUEST_URI']; ?>
kodu için çıktı şu şekilde olacaktır:
$_SERVER['PHP_SELF'] değişkeni bize çalışan dosyanın yolunu verir: /php/server.php $_SERVER['GATEWAY_INTERFACE '] değişkeni sunucunun CGI versiyonunu verir: CGI/1.1 $_SERVER['SERVER_ADDR'] değişkeni sunucumuzun IP adresini verir. Localhost için: ::1 $_SERVER['SERVER_NAME'] değişkeni sunucumuzun konfigürasyon dosyasında tanımlı adını verir: localhost $_SERVER['SERVER_SOFTWARE'] değişkeni sunucuda çalışan yazılımın adını ve versiyonunu verir: Apache/2.4.39 (Unix) OpenSSL/1.0.2r PHP/7.3.5 mod_perl/2.0.8-dev Perl/v5.16.3 $_SERVER['SERVER_PROTOCOL'] değişkeni çalışan sunucunun HTTP protokol versiyonunu verir: HTTP/1.1 $_SERVER['REQUEST_METHOD'] değişkeni çalışan PHP dosyasının hangi istek metodunu kullandığını verir: GET $_SERVER['REQUEST_TIME'] değişkeni 1 Ocak 1970'den itibaren geçen saniye değerini verir: 1558871315 $_SERVER['REQUEST_TIME_FLOAT'] değişkeni 1 Ocak 1970'den itibaren geçen saniye ve mikrosaniye değerini verir: 1558871315.457 $_SERVER['QUERY_STRING'] değişkeni çalışan dosyanın url'si ile gönderilen bir sorgudizesi var ise onu verir: $_SERVER['DOCUMENT_ROOT'] değişkeni sunucunun kök dizini yolunu verir: /opt/lampp/htdocs $_SERVER['HTTP_ACCEPT'] değişkeni PHP dosyasına erişim için gönderilen başlık isteğinin bilgilerini verir: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 $_SERVER['HTTP_ACCEPT_ENCODING'] değişkeni PHP dosyasına erişim için kabul edilen kodlama başlık içeriğini verir: gzip, deflate, br $_SERVER['HTTP_ACCEPT_LANGUAGE'] değişkeni PHP dosyasına erişim için kabul edilen lisan başlık bilgisini verir: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7 $_SERVER['HTTP_CONNECTION'] değişkeni PHP dosyasına erişim için kabul edilen bağlantı başlık bilgisini verir: keep-alive $_SERVER['HTTP_HOST'] değişkeni PHP dosyasının çalıştığı host başlık bilgisini verir: localhost Notice: Undefined index: HTTP_REFERER in /opt/lampp/htdocs/php/server.php on line 67 $_SERVER['HTTP_REFERER'] değişkeni ziyaretçinin sitenize geldiği referans sitenin adını verir. Örneğin Google aramasıyla geldiyse goole adresini verir: $_SERVER['HTTP_USER_AGENT'] değişkeni PHP dosyasına erişim isteğinde bulunan ziyaretçinin tarayıcı bilgilerini verir: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36 Notice: Undefined index: HTTPS in /opt/lampp/htdocs/php/server.php on line 73 $_SERVER['HTTPS'] değişkeni PHP dosyasına erişilirken güvenli erişim olup olmadığını verir: $_SERVER['REMOTE_ADDR'] değişkeni PHP dosyasını görüntüleyen kullanıcının IP adresi bilgisini verir: ::1 Notice: Undefined index: REMOTE_HOST in /opt/lampp/htdocs/php/server.php on line 79 $_SERVER['REMOTE_HOST'] değişkeni PHP dosyasını görüntüleyen kullanıcının host başlığı bilgisini verir. Örneğin bilgisayar adı gibi: $_SERVER['REMOTE_PORT'] değişkeni PHP dosyasını görüntüleyen kullanıcının sunucu ile haberleşmekte kullandığı port bilgisini verir: 55276 $_SERVER['SCRIPT_FILENAME'] değişkeni bize çalışan dosyanın adını ve sunucudaki tam yolunu verir: /opt/lampp/htdocs/php/server.php $_SERVER['SERVER_ADMIN'] değişkeni php dosyasının çalıştığı sunucunun yönetici mail'ini verir: you@example.com $_SERVER['SERVER_PORT'] değişkeni php dosyasının çalıştığı sunucunun yayınlama port bilgisini verir: 80 $_SERVER['SERVER_SIGNATURE'] değişkeni php dosyasının çalıştığı sunucunun yazılım versiyonunu, sanal host adresi ile port numarasını verir: $_SERVER['SCRIPT_NAME'] değişkeni bize çalışan dosyanın yolunu verir: /php/server.php $_SERVER['REQUEST_URI'] değişkeni bize çalışan dosyanın URI yolunu verir: /php/server.php
Sunucunuzda hangi $_SERVER değişkenlerinin çalıştığını görebilmek için kullanabileceğiniz bir komut da var:
<?php print_r($_SERVER); ?>
kodu için çıktı şu şekilde olacaktır:
Array ( [UNIQUE_ID] => XOp-zxnHChUGdkEN1uWfNwAAAAE [HTTP_HOST] => localhost [HTTP_CONNECTION] => keep-alive [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [HTTP_USER_AGENT] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36 [HTTP_DNT] => 1 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 [HTTP_ACCEPT_ENCODING] => gzip, deflate, br [HTTP_ACCEPT_LANGUAGE] => tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7 [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin [LD_LIBRARY_PATH] => /opt/lampp/lib:/opt/lampp/lib [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache/2.4.39 (Unix) OpenSSL/1.0.2r PHP/7.3.5 mod_perl/2.0.8-dev Perl/v5.16.3 [SERVER_NAME] => localhost [SERVER_ADDR] => ::1 [SERVER_PORT] => 80 [REMOTE_ADDR] => ::1 [DOCUMENT_ROOT] => /opt/lampp/htdocs [REQUEST_SCHEME] => http [CONTEXT_PREFIX] => [CONTEXT_DOCUMENT_ROOT] => /opt/lampp/htdocs [SERVER_ADMIN] => you@example.com [SCRIPT_FILENAME] => /opt/lampp/htdocs/php/server2.php [REMOTE_PORT] => 55308 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /php/server2.php [SCRIPT_NAME] => /php/server2.php [PHP_SELF] => /php/server2.php [REQUEST_TIME_FLOAT] => 1558872015.977 [REQUEST_TIME] => 1558872015 )
Tabii bunu daha okunabilir bir formata getirebilecek olan bir HTML etiketimiz de var. Onu da kullanırsak daha okunabilir bir çıktı alabiliriz:
<?php echo "<pre>"; print_r($_SERVER) echo "</pre>"; ?>
kodu için çıktı şu şekilde olacaktır:
Array ( [UNIQUE_ID] => XOqAZ-axKGuhgYrd4PIwlAAAAAU [HTTP_HOST] => localhost [HTTP_CONNECTION] => keep-alive [HTTP_CACHE_CONTROL] => max-age=0 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [HTTP_USER_AGENT] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36 [HTTP_DNT] => 1 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 [HTTP_ACCEPT_ENCODING] => gzip, deflate, br [HTTP_ACCEPT_LANGUAGE] => tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7 [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin [LD_LIBRARY_PATH] => /opt/lampp/lib:/opt/lampp/lib [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache/2.4.39 (Unix) OpenSSL/1.0.2r PHP/7.3.5 mod_perl/2.0.8-dev Perl/v5.16.3 [SERVER_NAME] => localhost [SERVER_ADDR] => ::1 [SERVER_PORT] => 80 [REMOTE_ADDR] => ::1 [DOCUMENT_ROOT] => /opt/lampp/htdocs [REQUEST_SCHEME] => http [CONTEXT_PREFIX] => [CONTEXT_DOCUMENT_ROOT] => /opt/lampp/htdocs [SERVER_ADMIN] => you@example.com [SCRIPT_FILENAME] => /opt/lampp/htdocs/php/server2.php [REMOTE_PORT] => 55332 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /php/server2.php [SCRIPT_NAME] => /php/server2.php [PHP_SELF] => /php/server2.php [REQUEST_TIME_FLOAT] => 1558872167.302 [REQUEST_TIME] => 1558872167 )
Gördüğünüz gibi öğrendiklerimizin dışında bilgiler de mevcut ama bunlar sunucudan sunucuya değişiklik göstereceği için bu komut ile keşfetmek gereklidir.
$_GET $_POST $_REQUEST ve $_FILES Kullanımı
$_GET değişkeni URL üzerinden gelen verilere ulaşabilme imkanı verir. Örnek bir uygulama ile görelim.
Bu uygulamamız için 2 php dosyası oluşturalım. Birisi ana dosyamız olan get.php olsun, diğeri ise bu dosyaya veri gönderecek form.php dosyası olsun.
form.php dosyamız içinde bir form oluşturacağız. Form onaylandığında form verileri işlenmek üzere get yöntemiyle get.php dosyasına gönderilecek. get.php dosyamız içinde de $_GET değişkeni ile gelen veriyi alıp kullanacağız.
Formu klasik HTML etiketleriyle oluşturup action parametresine verileri göndereceğimiz get.php dosyasının adını gireceğiz. Ayrıca method parametresine de verileri gönderme yöntemimiz olan get gireceğiz. Doğal olarak form gönderildiği anda veriler adres çubuğundan gidecektir.
<form action= “get.php” method=”get”>
</form>
Şimdi formumuza kullanıcının veri girişi için input alanlarını ekleyelim. input etiketlerinin name parametresiyle veriyi alacağız.
<html> <head> <title>PHP Örnekleri</title> <meta content=""> <meta charset="utf-8"> <style></style> </head> <body> <form action= "get.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> </body> </html>
Bu tür uygulamalarda veriyi get ile göndermeyi tercih ettiğimiz için formdaki gönder butonuna tıklandığında kullanıcının girmiş olduğu değerler parametreleriyle birlikte adres çubuğuna eklenerek gösterilir.
Gönder butonu tıklandığında;
İşte bu adres satırında görmüş olduğunuz ve formda yer alan veri girişi alanlarındaki name parametreleri birer değişken, buna karşılık kullanıcının girmiş olduğu ve bu değişkenlere eklenen verilerde o değişkenlerin değeri oluyor.
Bu verileri almamızı sağlayan da $_GET süper globalidir. Hemen formun verileri göndermiş olduğu get.php dosyamızı açıyoruz ve gelen verileri yakalıyoruz. Bize kullanıc girişinden 2 veri gönderilecek. Öyleyse gelen bu verileri depolayabileceğimiz 2 değişken oluşturmakla işe başlayalım. Sonrada bu değişkenlerin değerlerini $_GET süper globali ile alıp değişkenlerimizin içine depolayalım. İşlemin çalışıp çalışmadığını test etmek için de echo kullanarak gelen verileri ekrana yazdıralım.
<?php $gelen_ad=$_GET["ad"]; $gelen_soyad=$_GET["soyad"]; echo "Sayın " . $gelen_ad . " " . $gelen_soyad . "<br />Formumuzu doldurduğunuz için teşekkür ederiz.<br />Verileriniz başarılı bir şekilde elimize ulaşmıştır."; ?>
Şimdi formumuzu doldurup Gönder butonuna tıklayacak olursanız aşağıdaki sayfa sizi karşılayacaktır.
Verileri adres çubuğunda aşikar etmeden almanın bir başka yöntemi ise $_POST süper globali ile verileri almaktır. Bunu kullanırken form içerisinde de method parametremizi post olarak seçeceğiz. Aynı örneği bir de $_POST süper globali için yapacak olursak eğer ;
<html> <head> <title>PHP Örnekleri</title> <meta content=""> <meta charset="utf-8"> <style></style> </head> <body> <form action= "get.php" method="post"> 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> </body> </html>
Verileri alıp işleyecek olan php dosyamızda;
<?php $gelen_ad=$_POST["ad"]; $gelen_soyad=$_POST["soyad"]; echo "Sayın " . $gelen_ad . " " . $gelen_soyad . "<br />Formumuzu doldurduğunuz için teşekkür ederiz.<br />Verileriniz başarılı bir şekilde elimize ulaşmıştır."; ?>
Formu doldurup gönder butonuna tıkladığımızda önceki örneğimizden farklı olarak sadece veriler adres çubuğuna yazılmadan gizli olarak gönderilecektir.
$_REQUEST süper globali ise $_GET ve $_POST süper globallerinin yaptığı işlemleri tek başına yapabilmektedir. Yani veri ister get methodu ile isterseniz de post methodu ile formdan gönderilmiş olsun, $_REQUEST süper globali ile gönderilen veriyi alıp işlem yapabilirsiniz. Yani önceki örneklerde veriyi yakalayan php dosyasında $_GET ya da $_POST yerine $_REQUEST kullanmanız yeterli olacaktır. Sonuç yine aynı olacaktır. Genelde bize gelen veriyi gönderen formun hangi method parametresini kullanarak gönderdiğiniz bilmiyorsak $_REQUEST süper globalini kullanırız.
Tabii bu işlemler formlardan veri gönderirken çok önemli bilgiler almayacaksanız kullanılabilirler. İletişim formu v.s için kullanılabilir ancak web sayfasının kaynak kodunu görüntüleyen biri kullanılan name parametrelerini dolayısıyla işlem yapacak dosyaya gönderilecek değişkenleri görebileceği için kodu manipüle edebilir. Dolayısıyla bu yöntemlerle veri alışverişi sadece güvenlik gerektirmeyen zamanlarda kullanılmalıdır.
$_FILES süper globali de, daha önce bahsettiğimiz gibi veri olarak dosya gönderilmesi durumlarında bu dosyanın bir takım verilerine erişmemizi sağlayan süper globaldir.
Örneğin dosyanın adı, dosyanın boyutu, veri türü, yükleme esnasında kullanılan geçici dizin(temp klasörü), hata mesajı gibi verilerine erişebilirsiniz. Yine örnek bir uygulama için 2 php dosyası oluşturalım. Biri dosya gönderme formu olsun. Diğeri dosya.php ismini taşısın ve gerekli verileri süper global kullanarak alıp işlesin.
Formumuzu kodlarken muhakkak post methodu ile veri gönderiyoruz. Çünkü birden fazla parçalı dosyalar get methodu ile gönderilemez. Ayrıca dosya yükleme işlemlerinde form etiketi içine enctype parametresi de mutlaka yerleştirilmelidir. Yoksa dosya gönderilemez.
<html> <head> <title>PHP ile dosya gönderme</title> <meta content=""> <meta charset="utf-8"> <style></style> </head> <body> <form action= "dosya.php" method="post" enctype="multipart/form-data"> Gönderilecek Dosyanız: <input type="file" name="Dosya"> <br /> <input type="submit" value="Dosyayı Yükle"> </form> </body> </html>
kodunun ekran çıktısı şu şekilde olacaktır:
Bu sayfada Dosya Seç butonuna tıkladığınızda bilgisayarınızdan herhangi bir dosyayı seçebilecek ve Dosyayı Gönder butonuna tıklayarak da gönderebileceksiniz.
Şimdi bu dosya gönderildiğinde alacak olan php dosyasında $_FILES süper globali ile ne gibi işlemler gerçekleştirebiliyoruz, ona bakalım.
dosya.php dosyasında tıpkı diğerlerinde olduğu gibi gelen verileri kullanmak için önce bir değişkene depolamalıyız.
$gelen_dosya=$_FILES[“dosya”];
Şimdi gönderilen veriyi daha öncede olduğu gibi ekrana yazdırarak görüntüleyelim.
echo $gelen_dosya;
<?php $gelen_dosya=$_FILES["dosya"]; echo $gelen_dosya; ?>
Test etmek için de formumuzdan bir dosya seçip Gönder butonuna tıklayalım.
Gördüğünüz gibi hata verdi. Çünkü biraz önce de ifade ettiğimiz gibi $_FILES süper global ile gönderilen dosya ile ilgili bir tane değil, birden fazla veriye erişebiliyoruz. Öyleyse gönderilen veri bir tane değil, birden çok olmalı. Dolayısıyla bize tek bir değişken değeri değil, birden fazla değişkenin değeri gönderiliyor demektir. Bu da gönderilen verinin bir değişken değil, dizi olduğunu gösterir. Zaten hatadan da dizi olduğu anlaşılıyor.
Dizileri echo ya da print komutu ile ekrana yazdıramayız. Bunun yerine print_r() fonksiyonu kullanılır.
<?php $gelen_dosya = $_FILES["dosya"]; print_r($gelen_dosya); ?>
Tekrar formu doldurup Gönder butonuna tıkladığımızda;
Bunu da biraz daha okunabilir formatta görüntülemek için yine HTML <pre> etiketlerinden faydalanabiliriz.
<?php $gelen_dosya = $_FILES["dosya"]; echo "<pre>"; print_r($gelen_dosya); echo "</pre>"; ?>
Artık gelen veriler daha okunabilir görüntülenecektir.
Gördüğünüz gibi dosya ile ilgili gönderilen veriler şunlardır: yüklemeye çalıştığımız dosyanın adı, dosya türü, dosyanın yüklendiği geçici dizinin yolu, hata olup olmadığı ve byte cinsinden dosyanın boyutu. Dilerseniz bu verilerden istediğinize dizi anahtarını yani değişken adını kullanarak ulaşabilirsiniz.
<?php $gelen_dosya = $_FILES["dosya"]; echo "<pre>"; print_r($gelen_dosya); echo "</pre>"; echo "<br />"; echo "<br />"; echo "<hr>"; $dosya_boyutu=$gelen_dosya["size"]; echo "<br />"; echo "Gönderilen dosyanın boyutu: " . intval($dosya_boyutu/1000) ." Kb.dır"; ?>
Bu kod da dizinin ilgili öğesine anahtar vasıtasıyla ulaşmanın yanı sıra, değişkenler ile matematiksel işlem operatörlerini kullanılması ve ondalık bir sayıyı tamsayıya çevirme fonksiyonu da bir arada kullanılmıştır. Sonucu ise;
$_COOKIE Kullanımı
Kullanıcının tarayıcısına yerleştirilmiş olan çerez(cookie) verilerine erişebilmeyi sağlar. Bunu nasıl gerçekleştirebileceğimizi de bir örnek üzerinde görelim. Bir php dosyası oluşturalım. Öğrenmemiz gereken ilk şey aslında çerezlerin nasıl oluşturulduğudur.
Çerezler setcookie() fonksiyonu sayesinde tanımlanır. değişken:değer ikilisi olarak tanımlanır.
setcookie(“ilkcerezim”,”Oben SEVEN”);
kodu ile çerezimizi tanımlayıp php dosyasını tarayıcıda açalım ve çerezimizi kullanıcının tarayıcısına yerleştirelim.
<?php $gelen_dosya = $_FILES["dosya"]; echo "<pre>"; print_r($gelen_dosya); echo "</pre>"; echo "<br />"; echo "<br />"; echo "<hr>"; $dosya_boyutu=$gelen_dosya["size"]; echo "<br />"; echo "Gönderilen dosyanın boyutu: " . intval($dosya_boyutu/1000) ." Kb.dır"; ?>
Şimdi Google Chrome tarayıcımız ile bu php dosyasını ziyaret ettiğimizde çerez yerleştirilecek ve siz bu işlemin gerçekleştirilmiş olduğunu Google Chrome menüsünde
Ayarlar – Site Ayarları – Çerezler – Tüm çerezleri ve site verilerini göster
alanında arama çubuğuna localhost yazarak görebilirsiniz.
localhost’a tıkladığınızda açılan detaylarda ilkcerezim isimli çerezinizi ve içinde barındırılan verileri görebilirsiniz.
Çerezler sayesinde sitenize gelen ziyaretçiyi sonradan tanıyabilirsiniz. İşte tarayıcıdaki bu çerezlere $_COOKIE süper globali yardımıyla erişebiliyoruz.
Yeni bir php dosyası oluşturalım ve ismini cookie_verisini_al.php olarak belirleyelim.
<?php $cerez=$_COOKIE["ilkcerezim"]; echo $cerez; ?>
kodu için çıktı şu şekilde olacaktır:
Oben SEVEN
$_SESSION Kullanımı
Herhangi bir kullanıcı için oturum oluşturma imkanı verir ve oluşturulmuş olan oturum verilerine ulaşabilmeyi sağlar.
Oturumlar ile ilgili konuları ilerleyen derslerde göreceğiz fakat şimdilik ihtiyaç duyacağımız kadarına göz atalım. Oturumların oluşturulabilmesi ve başlatılabilmesi için sayfanın en başında oturumun başlatılması gereklidir.
session_start() fonksiyonunu kullanmak bir oturum başlatmak için yeterlidir. Daha sonra $_SESSION süper globalini kullanarak oturum verileri oluşturup kullanabilirsiniz.
<?php session_start(); ?> <html> <head> <title>PHP Örnekleri</title> <meta content=""> <meta charset="utf-8"> <style></style> </head> <body> <?php $_SESSION["oturum_ismi"]="ilk oturum"; ?> </body> </html>
Bir oturum başlattık ve sonra bu oturuma $_SESSION süper globalini kullanarak bir değer depoladık. Dosyayı tarayıcıda açtığımızda bu oturum verisi tarayıcıya yerleştirilecektir. Görmek için yine çerezlerde olduğu gibi Google Chrome menüsünde;
Ayarlar – Site Ayarları – Çerezler – Tüm çerezleri ve site verilerini göster
alanında arama çubuğuna localhost yazıyoruz.
localhost tıkladığımızda açılan bilgilerde oturum bilgilerinin yerleştirilmiş olduğunu görüyoruz.
Gördüğünüz gibi çerezlerden farklı olarak burada PHPSESSID isimli bri veri daha mevcut. Detayını incelediğimizde;
Gördüğünüz gibi oturumların içerik bilgisi çerezlere nazaran daha güvenlikli tutulmaktadır. Bizim “ilk oturum” olarak tanımladığımız veri burada farklı harf ve rakamlarla gösterilmektedir. Kullanıcı bu veriye erişemez. Aslında oturumlar sunucuda tutulurlar. Burada yer alan harf ve rakamlar ise sunucuda yer alan dosyanın ismidir. localhost’ta xampp tarzı bir sunucu ile çalışıyorsanız bunu xampp klasöründeki temp klasörü altında sess_f8bd4e15eb7b8c994f0076cfab511171 isminde görebilirsiniz.
Oturumlar sayesinde sayfamıza giriş yapan kullanıcıyı bulabiliyoruz ya da sepete bir ürün eklendiğinde kullanıcı girişi yapılmamış olsa bile hafızaya alabiliyoruz ve kullanıcı daha sonra sayfayı ziyaret ettiğinde üye olmadığı halde daha önceki oturumda eklediği ürünleri sepetinde görebiliyor.
Şimdi oturum verilerine ulaşmaya çalışalım. Yeni bir dosya oluşturarak ismini oturum_verisini_al.php olarak belirleyelim.
<?php session_start(); ?> <html> <head> <title>PHP Örnekleri</title> <meta content=""> <meta charset="utf-8"> <style></style> </head> <body> <?php echo "Oturum değeriniz: " . $_SESSION["oturum_ismi"]; ?> </body> </html>
$_SESSION süper globalini kullanarak veri çekme işlemlerinde de önce oturumu session_start() fonksiyonu ile başlatmamız gereklidir. Aksi takdirde değişken tanımlı değildir hatası alırsınız.
Yukarıdaki kod için çıktı şu şekildedir:
Oturum değeriniz: ilk oturum
Bağlantıda Kalalım