20-PHP Superglobals
PHP'de önceden tanımlı global değişkenler vardır bunlara superglobals denir.
- Yazılımcı tanımlı fonksiyon,method dışındaki değişkenlere global değişkenler denir ve php'de bunları global yapabilmek için "global" keywordünü kullanmamız gereklidr.
- PHP scriptinde herhangi bir yerden erişime sahip olan değişkenlere superglobals denir."global" keywordünü yazmadan da direkt olarak erişim yapabiliriz.
SUPERGLOBALS in PHP
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
1. $GLOBALS
PHP'de herhangi bir değişkene erişmek için "global $variable" yazmak yerine "superglobal" değişkeni olarak $GLOBALS kullanmamız yeterlidir.
<?php
# 1.ÖRNEK
$programming = "Minter";
$language = "Coder";
echo $GLOBALS["programming"] . "<br>";
echo $GLOBALS["language"];
# 2.ÖRNEK
function topla(){
$myVariable = "Test";
echo "My global variable : " . $GLOBALS["myVariable"] ."<br>";
echo "My local variable " . $myVariable;
}
$myVariable = "GLOBAL";
topla();
?>
2. $_SERVER
PHP'de HTTP headerleri,web server hakkındaki bilgileri içeren bir superglobaldir.
<?php
echo $_SERVER["SERVER_ADDR"];
foreach($_SERVER as $key => $value){
echo $key.": ".$value."<br>";
}
?>
3. $_REQUEST
Bu bir associative array'dir ve $_GET,$_POST, ve $_COOKIE değişkenlerinin içeriğini tutar.
GET ve POST'ları almak için
<?php
if($_SERVER["REQUEST_METHOD"] == "GET" && $_REQUEST["first_name"]!=''){
echo "<pre>";
echo "GET İLE GELDİ " . $_REQUEST['first_name'] . " " . $_REQUEST['last_name'];
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
echo "<pre>";
echo "POST İLE GELDİ : " . $_REQUEST['first_name'] . " " . $_REQUEST['last_name'];
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<p>First Name : </p> <input type="text" name="first_name" id="first_name"><br>
<p>Last Name : </p> <input type="text" name="last_name" id="last_name">
<button type="submit">Save</button>
</form>
4. $_POST
HTTP protocolünün POST Methodlarında kullanılan key-value associative array olan yapıdır. Bir form üzerinde URLEncoded yada multipart/form-data içeriğinde gönderilen post isteklerinin karşılığını alırız.
<?php
echo "<pre>";
if (isset($_POST["first_name"]) && isset($_POST['last_name'])){
echo "POST İLE GELDİ : " . $_POST['first_name'] . " " . $_POST['last_name'];
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<p>First Name : </p> <label for="first_name"></label><input type="text" name="first_name" id="first_name"><br>
<p>Last Name : </p> <label for="last_name"></label><input type="text" name="last_name" id="last_name">
<button type="submit">Save</button>
</form>
5. $_GET
$_POST superglobal değeriyle aynı şeydir sadece tek fark ise bizim url'lerde get isteğiyle aldığımız keyleri query string'lerin sonucunda aldığımız değerlerle elde ederiz. Yani form'da post isteği değil get isteğiyle aldığımız değerleri bu superglobal keywordüyle tutarız.
<?php
if (isset($_GET["first_name"]) && isset($_GET["last_name"])){
$first_name = $_GET['first_name'];
$last_name = $_GET['last_name'];
echo "First name is : $first_name and last name is : $last_name ";
}
?>
<form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<label for="first_name">First Name</label><input type="text" name="first_name" id="first_name"><br>
<label for="last_name">Last Name</label><input type="text" name="last_name" id="last_name">
<button type="submit">Send</button>
</form>
6. $_FILES
HTTP İle gönderilen post methodlarıyla birlikte bizim eklediğimiz dosyayı seçtikten sonra o dosya hakkında elde ettiğimiz bilgileri tutan superglobal değişkenidir.
Eğer ki biz form'da dosya göndermek istiyorsak forumun enctype'ı : multipart/form-data ve method'u da post olmalıdır. $_FILES dizisi şunları içerir
$_FILES['file']['name']
=> Kullanıcının seçtiği dosyanın orjinal ismi.
$_FILES['file']['type']
=> Dosyanın MIME type'dır. Örneğin bir dosya eklediğimzde image/gif olabilir.
$_FILES['file']['size']
=> Dosyanın byte birimde boyutudur.
$_FILES['file']['tmp_name']
=> Yüklenen dosyanın sunucuda saklandığı dosyanın geçici dosya adıdır.
$_FILES['file']['full_path']
=> Browser tarafından gönderilen full path'i belirtir.
$_FILES['file']['error']
=> Bu upload süreciyle ilgili dosyanın error code'sını gösterir. Örneğin: UPLOAD_ERR_OK (Değeri=0) hata yok dosya başarılı bir şekilde yüklendi demek.
Error Codes | Description |
---|---|
UPLOAD_ERR_OK (Value=0) |
There is no error, the file uploaded with success. |
UPLOAD_ERR_INI_SIZE (Value=1) |
The uploaded file exceeds the upload_max_filesize directive in php.ini. |
UPLOAD_ERR_FORM_SIZE (Value=2) |
The uploaded file exceeds the MAX_FILE_SIZE. |
UPLOAD_ERR_PARTIAL (Value=3) |
The uploaded file was only partially uploaded. |
UPLOAD_ERR_NO_FILE (Value=4) |
No file was uploaded. |
UPLOAD_ERR_NO_TMP_DIR (Value=6) |
Missing a temporary folder. |
UPLOAD_ERR_CANT_WRITE (Value=7) |
Failed to write file to disk. |
UPLOAD_ERR_EXTENSION (Value=8) |
A PHP extension stopped the file upload. |
<?php
<form action="hello.php" method="POST" enctype="multipart/form-data">
<p><input type="file" name="file"></p>
<p><input type ="submit" value="submit"></p>
</form>
?>