PHP #08 - Variabel Global dan Superglobal

10 Aug 2020 • ⏳ ~ 15 menit

 

Variabel Global

Ruang lingkup (scope) adalah konteks cakupan definisi dan akses suatu variabel. Dalam PHP, scope sebuah variabel bergantung pada letak variabel dideklarasi/diinisialisasi. Hal ini berarti bahwa variabel dapat dideklarasikan secara khusus pada blok fungsi atau kelas; maupun secara umum (di luar lingkup tertentu). Variabel yang dideklarasi/diinisialisasi secara umum (di luar lingkup tertentu) disebut sebagai variabel global.

Variabel global dapat dimanipulasi di semua ruang lingkup script, baik di dalam maupun di luar fungsi atau kelas. Namun pada keadaan tertentu, manipulasi suatu variabel dapat pula dipengaruhi dari ruang lingkup prosesnya. Sebagai contoh:

<?php
  // Global scope
  $trend = 'Corona';
  $year = 2020;

  function statement() {
    // Variabel $trend dan $year bereferensi pada local function scope
    echo "Tren virus $trend mengindikasikan pandemi belum berakhir pada tahun $year.";
  }

  statement();
?>
Notice: Undefined variable: trend

Notice: Undefined variable: year

Kita akan mendapatkan peringatan seperti contoh di atas. Hal ini dikarenakan dalam ruang lingkup fungsi tidak terdapat variabel $trend dan $year yang diakses secara khusus sebagai local function scope.

Oleh karena itu, kita dapat menerapkan beberapa metode sebagai berikut:

1. Menggunakan Keyword global

Ketika kita akan menggunakan variabel global dalam ruang lingkup tertentu, kita harus mendefinisikan keyword global sebelum nama variabel global ditetapkan. Berikut contoh penerapan keyword global.

<?php
  // Global scope
  $trend = 'Corona';
  $year = 2020;

  function statement() {
    global $trend, $year;

    echo "Tren virus $trend mengindikasikan pandemi belum berakhir pada tahun $year.";
  }

  statement();
?>
Tren virus Corona mengindikasikan pandemi belum berakhir pada tahun 2020.

2. Memanfaatkan Variabel Superglobal $GLOBALS

Di samping keyword global, kita juga dapat memanfaatkan fitur array yang terdapat pada variabel superglobal $GLOBALS sebagai referensi variabel global. Pemanfaatan array $GLOBALS sama seperti array associative. Kita cukup menuliskan nama variabel global sebagai key dari array $GLOBALS. Pembahasan lebih lanjut mengenai $GLOBALS dapat kita lihat pada pembahasan variabel superglobal. Perhatikan penerapannya pada contoh berikut.

<?php
  // Global scope
  $trend = 'Corona';
  $year = 2020;

  function statement() {
    echo "Tren virus {$GLOBALS['trend']} mengindikasikan pandemi belum berakhir pada tahun {$GLOBALS['year']}.";
  }

  statement();
?>
Tren virus Corona mengindikasikan pandemi belum berakhir pada tahun 2020.

Dalam penerapan kedua cara akses variabel global di atas terdapat perbedaan yang harus diperhatikan. Dengan memanfaatkan variabel superglobal $GLOBALS, kita masih dapat mendeklarasikan variabel dengan nama yang sama pada scope lokal. Namun, pemanfaatan keyword global membawa variabel tersebut pada scope lokal sehingga tidak memungkinkan penggunaan variabel dengan nama yang sama pada scope lokal. Untuk lebih jelasnya, perhatikan contoh berikut:

<?php
  // Global scope
  $trend = 'Corona';
  $year = 2020;

  function statement() {
    // Akses variabel global
    global $trend, $year;

    // Variabel $year dibawa pada scope lokal
    // Inisialisasi akan mengubah nilai $year secara global
    // Kita tidak dapat lagi mendeklarasikan/menginisialisasi sebuah variabel local scope baru menggunakan nama yang sama ($year)
    $year = 2019

    echo "Tren virus $trend mengindikasikan pandemi belum berakhir pada tahun $year.";
  }

  statement();
  // Output: Tren virus Corona mengindikasikan pandemi belum berakhir pada tahun 2019.

  echo $year;
  // Output: 2019
?>

<?php
  // Global scope
  $trend = 'Corona';
  $year = 2020;

  function statement() {
    // Sebuah variabel local scope baru menggunakan nama yang sama ($year) diinisialisasi
    // Inisialisasi tidak akan mengubah nilai $year secara global
    $year = 2019;

    echo "Tren virus {$GLOBALS['trend']} mengindikasikan pandemi belum berakhir pada tahun $year.";
  }

  statement();
  // Output: Tren virus Corona mengindikasikan pandemi belum berakhir pada tahun 2019.

  echo $year;
  // Output: 2020
?>

Variabel Superglobal

Variabel superglobal adalah variabel-variabel bawaan PHP (PHP built-in variables) yang dapat diakses dan dimanipulasi di semua ruang lingkup script PHP.

Untuk memanfaatkan variabel superglobal, kita tidak perlu mendefinisikannya terlebih dahulu, juga tidak perlu menggunakan keyword global untuk mengakses variabel tersebut.

Terdapat 9 variabel superglobal, antara lain:

1. $GLOBALS

$GLOBALS merupakan variabel superglobal yang digunakan untuk mengakses variabel-variabel global di semua ruang lingkup. Variabel-variabel global disimpan dalam array associative $GLOBALS ini. Saat kita akan mengakses variabel global, kita hanya perlu menuliskan nama variabel globalnya sebagai key dari array $GLOBALS. Mari kita perhatikan penerapan $GLOBALS pada contoh berikut.

<?php
  // Global scope
  // Semua variabel global scope akan secara otomatis menjadi bagian dari variabel superglobal $GLOBALS
  $globalVariable = "Global";

  function localFunction() {
    // Local function scope
    // Variabel local scope tidak akan menjadi bagian dari variabel superglobal $GLOBALS
    $localVariable = "Lokal";

    echo("Sebuah variabel local scope dengan nilai '$localVariable' dibuat.");
    echo("Kita juga dapat mengakses variabel global dalam sebuah function: {$GLOBALS['globalVariable']}.");
  }

  localFunction();
  var_dump($GLOBALS);
?>
Sebuah variabel local scope dengan nilai 'Lokal' dibuat.
Kita juga dapat mengakses variabel global dalam sebuah function: Global.

array(6) {
  ["_GET"]=>
  array(0) {
  }
  ["_POST"]=>
  array(0) {
  }
  ["_COOKIE"]=>
  array(0) {
  }
  ["_FILES"]=>
  array(0) {
  }
  ["GLOBALS"]=>
  array(6) {
    ["_GET"]=>
    array(0) {
    }
    ["_POST"]=>
    array(0) {
    }
    ["_COOKIE"]=>
    array(0) {
    }
    ["_FILES"]=>
    array(0) {
    }
    ["GLOBALS"]=>
    *RECURSION*
    ["globalVariable"]=>
    string(6) "Global"
  }
  ["globalVariable"]=>
  string(6) "Global"
}

2. $_SERVER

$_SERVER merupakan variabel superglobal berupa array associative yang berisi informasi berupa header, path, hingga lokasi-lokasi script. Nilai-nilai dari variabel superglobal yang satu ini bersumber dari web server tersendiri. Jadi, tidak ada jaminan bahwa setiap web server akan menyediakan nilai-nilai yang sama persis, bahkan bisa saja terdapat beberapa nilai yang tidak tersedia pada web server tertentu. Agar lebih jelas, mari kita perhatikan contoh berikut.

<?php
  var_dump($_SERVER);
?>
array(45) {
  ["MIBDIRS"]=>
  string(24) "C:/xampp/php/extras/mibs"
  ["MYSQL_HOME"]=>
  string(16) "\xampp\mysql\bin"
  ["OPENSSL_CONF"]=>
  string(31) "C:/xampp/apache/bin/openssl.cnf"
  ["PHP_PEAR_SYSCONF_DIR"]=>
  string(10) "\xampp\php"
  ["PHPRC"]=>
  string(10) "\xampp\php"
  ["TMP"]=>
  string(10) "\xampp\tmp"
  ["HTTP_HOST"]=>
  string(9) "localhost"
  ["HTTP_CONNECTION"]=>
  string(10) "keep-alive"
  ["HTTP_UPGRADE_INSECURE_REQUESTS"]=>
  string(1) "1"
  ["HTTP_USER_AGENT"]=>
  string(115) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
  ["HTTP_ACCEPT"]=>
  string(124) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
  ["HTTP_SEC_FETCH_SITE"]=>
  string(4) "none"
  ["HTTP_SEC_FETCH_MODE"]=>
  string(8) "navigate"
  ["HTTP_SEC_FETCH_USER"]=>
  string(2) "?1"
  ["HTTP_SEC_FETCH_DEST"]=>
  string(8) "document"
  ["HTTP_ACCEPT_ENCODING"]=>
  string(17) "gzip, deflate, br"
  ["HTTP_ACCEPT_LANGUAGE"]=>
  string(14) "en-US,en;q=0.9"
  ["HTTP_COOKIE"]=>
  string(0) ""
  ["PATH"]=>
  string(255) "C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\WINDOWS\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps"
  ["SystemRoot"]=>
  string(10) "C:\WINDOWS"
  ["COMSPEC"]=>
  string(27) "C:\WINDOWS\system32\cmd.exe"
  ["PATHEXT"]=>
  string(53) ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
  ["WINDIR"]=>
  string(10) "C:\WINDOWS"
  ["SERVER_SIGNATURE"]=>
  string(94) "<address>Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.4.3 Server at localhost Port 80</address>"
  ["SERVER_SOFTWARE"]=>
  string(46) "Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.4.3"
  ["SERVER_NAME"]=>
  string(9) "localhost"
  ["SERVER_ADDR"]=>
  string(3) "::1"
  ["SERVER_PORT"]=>
  string(2) "80"
  ["REMOTE_ADDR"]=>
  string(3) "::1"
  ["DOCUMENT_ROOT"]=>
  string(15) "C:/xampp/htdocs"
  ["REQUEST_SCHEME"]=>
  string(4) "http"
  ["CONTEXT_PREFIX"]=>
  string(0) ""
  ["CONTEXT_DOCUMENT_ROOT"]=>
  string(15) "C:/xampp/htdocs"
  ["SERVER_ADMIN"]=>
  string(20) "postmaster@localhost"
  ["SCRIPT_FILENAME"]=>
  string(25) "C:/xampp/htdocs/index.php"
  ["REMOTE_PORT"]=>
  string(5) "54481"
  ["GATEWAY_INTERFACE"]=>
  string(7) "CGI/1.1"
  ["SERVER_PROTOCOL"]=>
  string(8) "HTTP/1.1"
  ["REQUEST_METHOD"]=>
  string(3) "GET"
  ["QUERY_STRING"]=>
  string(0) ""
  ["REQUEST_URI"]=>
  string(1) "/"
  ["SCRIPT_NAME"]=>
  string(10) "/index.php"
  ["PHP_SELF"]=>
  string(10) "/index.php"
  ["REQUEST_TIME_FLOAT"]=>
  float(1597114403.99)
  ["REQUEST_TIME"]=>
  int(1597114403)
}

Meskipun atribut yang disediakan masing-masing berbeda, terdapat beberapa atribut yang penting. Mari kita perhatikan tabel berikut.

AtributKeterangan
HTTP_HOSTMenyatakan nama host server, diperoleh dari header permintaan client. Dimanfaatkan juga sebagai target host untuk permintaan client. Karena bersumber pada header permintaan client, nilai atribut ini sewaktu-waktu dapat dimodifikasi client.
HTTP_USER_AGENTMemuat User-Agent, yang merupakan sebuah teks (string) yang dikirimkan browser sendiri ke web server untuk mengidentifikasi dirinya, sehingga situs web tersebut dapat mengirim konten yang berbeda berdasarkan browser dan kompatibilitas browser.
SERVER_NAMEMenyatakan nama dari host server yang menjalankan script ini. Berbeda dengan HTTP_HOST, nilai atribut ini bersumber pada konfigurasi dari server, sehingga atribut ini tidak dapat kita ubah nilainya. Atribut ini juga tidak memberikan informasi apapun seputar permintaan.
SERVER_ADDRMemuat nilai berupa IP (Internet Protocol) Address dari server di mana script dijalankan.
SERVER_PORTMenyatakan nama dari port pada mesin server yang digunakan oleh web server untuk berkomunikasi. Secara default bernilai ‘80’ dan menggunakan SSL. Dalam penerapannya, hal ini berfungsi mengubahnya menjadi HTTP port apapun yang kita tentukan.
DOCUMENT_ROOTMemuat nilai berupa direktori utama dari file script yang dijalankan. Umumnya ditentukan dalam file konfigurasi server.
SCRIPT_FILENAMEMemuat path direktori sesungguhnya dari file script yang dijalankan secara terperinci.
REQUEST_METHODMenyatakan metode permintaan jenis apa yang digunakan dalam mengakses halaman tersebut. Sebagai contoh metode permintaan adalah GET, POST, dsb.
QUERY_STRINGMemuat nilai dari query-string yang terdapat pada halaman tersebut. Query-string merupakan cara untuk menambah atau menyalurkan data melalui URL halaman dalam bentuk parameter.
REQUEST_URIMenyatakan nilai dari permintaan URI halaman yang diakses. URI sendiri merupakan Uniform Resource Identifier sebagai pengenal dari tempat permintaan diterapkan. Saat ini, URI hampir selalu mengikuti aturan HTTP URL yang berdasarkan sintaks standar Web URLs. Sebagai contoh dengan URL https://informatika.web.id/variabel-global-dan-superglobal.html, maka kita mendapatkan URI berupa /variabel-global-dan-superglobal.html.
SCRIPT_NAMEMenyatakan path direktori dari script yang dijalankan. Atribut ini hanya merujuk pada file script ini sendiri saja, tidak menunjukkan direktori secara terperinci.
PHP_SELFMenyatakan nama file script yang dijalankan, tetapi secara relatif terhadap document root (nilai dari DOCUMENT_ROOT). Misalkan dengan URL https://informatika.web.id/PHP/variabel-global-dan-superglobal.html, /PHP/variabel-global-dan-superglobal.html yang termuat sebagai PHP_SELF.

3. $_GET

$_GET merupakan variabel superglobal berbentuk array associative dari variabel-variabel yang di-passing/diteruskan ke script melalui parameter URL berdasarkan permintaan GET. Variabel superglobal ini digunakan untuk memperoleh data yang di-submit dari form HTML dengan metode GET (dimuat dalam parameter URL setelah tanda ? pada URL). Kita juga dapat mengirimkan beberapa data melalui URL dengan memisahkannya menggunakan tanda &.

Untuk lebih memahami penggunaan variabel superglobal $_GET, buatlah sebuah file dengan nama get.php pada folder project Superglobal (C:\xampp\htdocs\Superglobal).

Ketik kode sebagai berikut:

<?php
  var_dump($_GET);

  echo $_GET['stats'] ?? 'Tidak ada statistik.';
?>

Pada baris pertama, isi array associative $_GET secara keseluruhan akan ditampilkan.

Kita juga dapat mengakses data tertentu yang dikirimkan melalui metode GET dengan mengakses key dari array $_GET. Pada baris ketiga, kita akan memeriksa apakah terdapat data stats yang dikirimkan. Apabila ada, kita akan menampilkan output nilai stats yang dikirimkan. Namun, jika tidak ada, kita akan menampilkan output kalimat “Tidak ada statistik.”.

Buka browser dan ketik localhost/Superglobal/get.php?trend=Corona&year=2020&country=Indonesia pada address bar. Kita akan melihat hasil output sebagai berikut:

array(3) {
  ["trend"]=>
  string(6) "Corona"
  ["year"]=>
  string(4) "2020"
  ["country"]=>
  string(9) "Indonesia"
}

Tidak ada statistik.

Adapun penjelasan parameter URL dengan pengiriman data melalui metode GET adalah sebagai berikut:

Penjelasan parameter URL dengan pengiriman data melalui metode GET

JANGAN pernah mengirimkan data yang berisi informasi sensitif (seperti password) saat menggunakan metode GET. Data yang dikirimkan dimuat pada URL yang dapat diakses pada history browser.

4. $_POST

$_POST mirip seperti $_GET, hanya saja nilai variabel superglobal ini bersumber dari submit form HTML yang menerapkan metode POST. Karena menggunakan metode POST, data-data yang diteruskan ke script tidak akan terpampang pada parameter URL, tetapi diolah sebagai application/x-www-form-urlencoded atau multipart/form-data pada HTTP Content-Type.

Untuk lebih memahami penggunaan variabel superglobal $_POST, buatlah sebuah file dengan nama form_post.html pada folder project Superglobal (C:\xampp\htdocs\Superglobal).

Ketik kode sebagai berikut:

<form method="POST" action="post.php">
  <input type="text" name="username" placeholder="Username">
  <input type="password" name="password" placeholder="Password">
  <input type="submit">
</form>

Kita harus memberikan nilai POST untuk atribut method pada tag form. Hal ini dikarenakan secara default, HTML akan mendefinisikan form dengan metode GET (jika tidak ditentukan).

Value dari atribut name pada tag input akan menjadi key dari array $_POST.

Lanjutkan dengan membuat sebuah file dengan nama post.php pada folder project yang sama. Ketik kode sebagai berikut:

<?php
  var_dump($_POST);
?>

Buka browser dan ketik localhost/Superglobal/form_post.html pada address bar.

Masukkan username dan password. Pada contoh ini, kita akan memberikan input username berupa Corona dan password berupa StayAtHome. Lalu, tekan tombol Submit.

Form Post

Halaman akan diarahkan ke localhost/Superglobal/post.php dengan hasil output sebagai berikut:

array(2) {
  ["username"]=>
  string(6) "Corona"
  ["password"]=>
  string(10) "StayAtHome"
}

Meskipun pada URL tidak terdapat data yang dikirimkan, kita dapat mengakses data yang telah terkirim menggunakan metode POST dengan memanfaatkan variabel superglobal $_POST.

Pengiriman data menggunakan metode POST juga tidak selalu aman. Hal ini dikarenakan bisa saja terjadi pencurian data saat terjadi komunikasi antara client dan server. Penggunaan HTTPS akan menjamin pengiriman data yang lebih aman.

$_COOKIE merupakan variabel superglobal yang berisi data-data yang disimpan secara lokal pada browser. Data-data tersebut disalurkan melalui HTTP Cookies. $_COOKIE ini juga berbentuk array associative.

Berbeda dengan variabel superglobal lainnya, inisialisasi cookie dapat dilakukan dengan menggunakan fungsi setcookie(). Pada fungsi ini, kita dapat menentukan key, nilai, waktu expire, path, dlsb.

Untuk menghancurkan sebuah cookie juga dilakukan menggunakan fungsi setcookie() dengan mengosongkan nilainya dan memberikan waktu expire pada masa lalu.

Untuk lebih jelas, perhatikan contoh berikut.

<?php
  // Inisialisasi cookie dengan key trend, nilai "Corona"
  // Cookie ini akan expire dalam waktu 1 jam
  setcookie("trend", "Corona", time() + 3600);

  // Inisialisasi cookie dengan key year, nilai 2020
  // Cookie ini akan expire saat sesi browsing berakhir
  setcookie("year", 2020);

  // Menghancurkan cookie dengan key trend
  setcookie("trend", "", time() - 1);

  if (!isset($_COOKIE['year'])) {
      header("Refresh: 0");
  } else {
      var_dump($_COOKIE);
  }
?>
array(1) {
  ["year"]=>
  string(4) "2020"
}

Apabila kita membuat cookie pertama kalinya, mungkin saja browser telah selesai melakukan render page sesaat sebelum cookie berhasil diinisialisasi. Untuk itu, kita dapat melakukan refresh page untuk memaksa browser melakukan render page lagi.

Pada kode di atas, kita akan melakukan refresh page apabila cookie dengan key year belum diinisialisasi. Namun, jika sudah diinisialisasi, kita akan menampilkan output $_COOKIE secara keseluruhan.

Untuk melihat cookie secara langsung, kita dapat membuka Developer Tools (menggunakan shortcut Ctrl + Shift + I pada PC, ⌥ + ⌘ + I pada Mac, disesuaikan dengan browser yang digunakan). Pilih tab Application. Pada bagian Storage, klik pada Cookies.

Cookie - Developer Tools

6. $_SESSION

$_SESSION mirip seperti $_COOKIE, hanya saja data-data dari session disimpan dalam server, berbeda dengan cookie yang menyimpan data-data pada lokal browser.

Untuk memulai session, kita perlu menyertakan fungsi session_start() pada setiap bagian atas halaman script yang memanfaatkan session. Dengan demikian, data yang disimpan pada variabel superglobal $_SESSION dapat di-passing antarhalaman yang bersangkutan.

Saat memulai sebuah sesi browser pada alamat website tertentu, sebuah ID acak session akan dibuat menjadi sebuah cookie dengan key PHPSESSID. Cookie ini akan berisi ID session untuk menandakan sesi aktif browser pada alamat website tersebut.

Untuk menghancurkan sebuah variabel tertentu pada session dapat menggunakan fungsi unset(). Apabila hendak menghancurkan keseluruhan sesi aktif browser pada alamat website, kita dapat menggunakan fungsi session_destroy(). Fungsi ini akan menghancurkan sesi secara keseluruhan, yang berarti seluruh variabel session tidak berlaku lagi.

Untuk lebih memahami penggunaan variabel superglobal $_SESSION, buatlah sebuah file dengan nama session_1.php pada folder project Superglobal (C:\xampp\htdocs\Superglobal).

Ketik kode sebagai berikut:

<?php
  session_start();

  $_SESSION['trend'] = 'Corona';
  $_SESSION['year'] = 2020;
  $_SESSION['country'] = 'Indonesia';

  echo "<pre>";
  var_dump($_SESSION);
  echo "</pre>";

  header("Refresh: 5; url=session_2.php");
?>

Kode di atas akan menampilkan beberapa variabel $_SESSION yang telah diinisialisasi selama 5 detik. Kemudian, mengarahkan halaman ke session_2.php.

Lanjutkan dengan membuat sebuah file dengan nama session_2.php pada folder project yang sama. Ketik kode sebagai berikut:

<?php
  session_start();
  
  echo "Nilai awal variabel session.";
  echo "<pre>";
  var_dump($_SESSION);
  echo "</pre>";
  
  unset($_SESSION['trend']);

  echo "Menghancurkan variabel trend pada session.";
  echo "<pre>";
  var_dump($_SESSION);
  echo "</pre>";

  session_destroy();

  header("Refresh: 5; url=session_3.php");
?>

Kode di atas akan menampilkan beberapa variabel $_SESSION yang telah diinisialisasi pada halaman session_1.php sebelumnya. Lalu, variabel $_SESSION['trend'] dihancurkan. Proses dilanjutkan dengan menghancurkan keseluruhan sesi aktif browser pada alamat website tersebut. Setelah 5 detik, halaman diarahkan ke session_3.php.

Untuk melihat penghancuran session, buat sebuah file dengan nama session_3.php pada folder project yang sama. Ketik kode sebagai berikut:

<?php
  session_start();
  
  echo "Menghancurkan seluruh variabel pada session.";
  echo "<pre>";
  var_dump($_SESSION);
  echo "</pre>";
?>

Buka browser dan ketik localhost/Superglobal/session_1.php pada address bar. Perhatikan hasil eksekusi kode di atas sebagai berikut:

Session

Untuk perincian perbedaan cookie dan session, mari sama-sama kita simak pada tabel berikut.

CookieSession
Tersimpan di sisi client secara lokal pada browser.Tersimpan di sisi server.
Tidak begitu aman, karena cookie dapat disisipi program yang tidak diketahui oleh client. Oleh karena itu, browser client dapat diatur untuk menghapus cookie, bahkan menonaktifkan fungsi cookie. Cookie juga tidak aman bagi sisi server karena dapat di-edit oleh client.Lebih aman, karena tidak ada file yang dimasukkan ke sisi client.
Data yang disimpan cookie dapat bertahan lebih lama dan dapat diatur waktu expired sesuai kebutuhan.Data yang disimpan session akan hilang jika sesi browsing berakhir dan waktu expired tidak dapat diatur sesuai kebutuhan.
Contoh penerapan:
  • Fitur Remember Me pada Login.
  • Pengaturan tema dan bahasa website sesuai preferensi pengguna.
  • Penampilan iklan sesuai halaman yang dikunjungi pengguna.
Contoh penerapan:
  • Proses Login & Register. Memastikan user dapat mengakses halaman website sesuai autentikasi yang diberikan dan hak akses yang dimiliki.
  • Fitur Add to Cart.

7. $_REQUEST

$_REQUEST merupakan variabel superglobal yang memuat semua nilai dari $_GET, $_POST, dan $_COOKIE.

Karena $_REQUEST menampung nilai dari ketiga variabel superglobal, sangat memungkinkan terdapat kesamaan key. Hal ini akan menyebabkan satu nilai menimpa yang lainnya. Misalnya terdapat $_GET['username'] dan $_POST['username']. Secara default, $_REQUEST['username'] akan menerima nilai $_GET['username'] terlebih dahulu, kemudian ditimpa dengan nilai $_POST['username'].

Dalam PHP, kita dapat menentukan presedensi ketiga variabel superglobal tersebut dengan melakukan modifikasi nilai request_order pada php.ini. Misalnya, kita memodifikasi nilainya menjadi "GPC" sehingga urutannya menjadi $_GET, $_POST, lalu $_COOKIE. Hal ini menyebabkan apabila terdapat kesamaan key, nilai $_COOKIE pada key tersebut yang akan digunakan.

Untuk lebih memahami penggunaan variabel superglobal $_REQUEST, buatlah sebuah file dengan nama form_request.html pada folder project Superglobal (C:\xampp\htdocs\Superglobal).

Ketik kode sebagai berikut:

<form method="POST" action="request.php?username=Covid19&year=2020">
  <input type="text" name="username" placeholder="Username">
  <input type="password" name="password" placeholder="Password">
  <input type="submit">
</form>

Kita harus memberikan nilai POST untuk atribut method pada tag form. Hal ini dikarenakan secara default, HTML akan mendefinisikan form dengan metode GET (jika tidak ditentukan).

Lanjutkan dengan membuat sebuah file dengan nama request.php pada folder project yang sama. Ketik kode sebagai berikut:

<?php
  echo "Metode GET";
  var_dump($_GET);

  echo "Metode POST";
  var_dump($_POST);

  echo "Metode REQUEST";
  var_dump($_REQUEST);
?>

Buka browser dan ketik localhost/Superglobal/form_request.html pada address bar.

Masukkan username dan password. Pada contoh ini, kita akan memberikan input username berupa Corona dan password berupa StayAtHome. Lalu, tekan tombol Submit.

Form Post

Halaman akan diarahkan ke localhost/Superglobal/request.php?username=Covid19&year=2020 dengan hasil output sebagai berikut:

Metode GET
array(2) {
  ["username"]=>
  string(7) "Covid19"
  ["year"]=>
  string(4) "2020"
}

Metode POST
array(2) {
  ["username"]=>
  string(6) "Corona"
  ["password"]=>
  string(10) "StayAtHome"
}

Metode REQUEST
array(3) {
  ["username"]=>
  string(6) "Corona"
  ["year"]=>
  string(4) "2020"
  ["password"]=>
  string(10) "StayAtHome"
}

8. $_ENV

$_ENV adalah variabel superglobal yang berisi variabel-variabel environment yang disesuaikan dengan tempat website dijalankan pada web server. $_ENV berbentuk array associative dan variabel-variabelnya diimpor ke namespace global PHP dari environment tempat PHP parser berjalan.

Untuk dapat mengakses variabel superglobal $_ENV, kita dapat melakukan modifikasi nilai variables_order menjadi "EGPCS" pada php.ini.

Sebenarnya, untuk dapat mengakses variabel-variabel environment, kita juga dapat memanfaatkan fungsi getenv(). Fungsi ini dapat bekerja tanpa dipengaruhi pengaturan pada php.ini. Selain itu, fungsi ini menerima parameter string yang case insensitive.

Agar lebih jelas, mari kita perhatikan contoh berikut.

<?php
  var_dump($_ENV['OS']);
  var_dump(getenv('username'));
?>
string(10) "Windows_NT"
string(16) "DESKTOP-5SZ3QE4$"

9. $_FILES

$_FILES merupakan variabel superglobal yang berbentuk array associative dari data yang di-upload ke script berdasarkan metode HTTP POST, seperti file gambar, video, atau file berekstensi lainnya. Data yang tersimpan dalam array berupa nama file, tipe file, size, dsb.

Untuk lebih memahami penggunaan variabel superglobal $_FILES, buatlah sebuah file dengan nama form_upload.html pada folder project Superglobal (C:\xampp\htdocs\Superglobal).

Ketik kode sebagai berikut:

<form method="POST" enctype="multipart/form-data" action="upload.php">
  <input type="file" name="document" />
  <input type="submit">
</form>

Kita harus memberikan nilai POST untuk atribut method pada tag form. Hal ini dikarenakan secara default, HTML akan mendefinisikan form dengan metode GET (jika tidak ditentukan).

Kita juga harus menambahkan enctype="multipart/form-data" pada tag form. Bagian ini penting apabila form berkaitan dengan upload file.

Lanjutkan dengan membuat sebuah file dengan nama upload.php pada folder project yang sama. Ketik kode sebagai berikut:

<?php
  if (isset($_FILES['document'])) {
    echo "File berhasil di-upload!";

    var_dump($_FILES['document']);
  } else {
    echo "File tidak berhasil di-upload!";
  }
?>

Buka browser dan ketik localhost/Superglobal/form_upload.html pada address bar.

Masukkan file yang akan di-upload. Pada contoh ini, kita akan melakukan upload sebuah gambar dengan nama informatikawebid.jpg. Lalu, tekan tombol Submit.

Upload Form

Halaman akan diarahkan ke localhost/Superglobal/upload.php dengan hasil output sebagai berikut:

File berhasil di-upload!

array(5) {
  ["name"]=>
  string(20) "informatikawebid.jpg"
  ["type"]=>
  string(10) "image/jpeg"
  ["tmp_name"]=>
  string(23) "C:\xampp\tmp\phpDFB.tmp"
  ["error"]=>
  int(0)
  ["size"]=>
  int(627073)
}
PHP

PHP #09 - Konstanta

PHP #07 - Variabel & Tipe Data (Bag. II)

comments powered by Disqus