1~

Minter Coder's Blog

20-PHP'de Süper Değişkenler (Superglobals)

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>
?>