เมื่อ register_globals On
<?
$data = "modoeye.com";
function show(){
echo $data;
}
?>
จะได้ผลเป็น modoeye.com
เมื่อ register_globals Off
<?
$data = "modoeye.com";
function show(){
echo $data;
}
?>
จะได้ผลเป็นค่าว่าง หรือจะแสดง WARNING ว่าไม่มีตัวแปรดังกล่าว
แล้วสำคัญอย่างไร?
จะเห็นได้ว่าเมื่อ register_globals On ตัวแปรใดๆจะสามารถเรียกใช้ได้จากทุกส่วนของโปรแกรม ในทางกลับกันก็ยังสามารถถูกตั้งค่าได้จากส่วนต่างๆของโปรแกรมได้เช่นเดียวกัน เช่น
<?
// login.php
// เช็กว่ามีการ login หรือยัง เมื่อมีการล็อกอินแล้วให้เซ็ทค่าตัวแปร $authorized เป็น true
if (authenticated_user()) {
$authorized = true;
}
// เช็กว่าตัวแปร $authorized เท่ากับ true หรือไม่ถ้าใช่ให้เข้าไปส่วนของ member ได้
if ($authorized) {
include "/member/index.php";
}
?>
แล้วทำการเรียกใช้งาน login.php?authorized=1 ดังนั้นจะเสมือนว่าได้ทำการ login เรียบร้อยแล้วสามารถเข้าไปยังส่วนที่เป็นส่วนของ member ได้
การแก้ไขทำได้โดยแก้ไขที่ไฟล์ php.ini
register_globals = Offถ้าท่านที่ใช้งาน web hosting และไม่สามารถแก้ไขไฟล์ php.ini ได้ก็สามารถเพิ่ม เข้าไปในไฟล์ .htaccess ก็จะสามารถปิดการทำงานของ register_globals ได้เช่นเดียวกันครับ
php_flag register_globals Off
การเข้าถึงตัวแปรในสภาพแวดล้อมที่ register_globals เป็น Off
ในการเข้าถึงตัวแปรในสภาวะที่ register_globals เป็น Off นั้น PHP ได้สร้างตัวแปร Pre-defined Global Variables ไว้ด้วยเพื่อในการอ้างถึงตัวแปรที่มาจากคนละสภาพแวดล้อม โดยประกอบด้วย:
- $_REQUEST เป็น array ของตัวแปรที่ได้รับจากการส่งทั้งแบบ POST และ GET
- $_GET เป็น array ของตัวแปรที่ได้จากการส่งค่าแบบ GET
- $_POST เป็น array ของตัวแปรที่ได้จากการส่งค่าแบบ POST
- $_COOKIE เป็น array ของตัวแปร COOKIE
- $_SESSION เป็น array ของตัวแปร SESSION
- $_SERVER เป็น array ของตัวแปรค่าของระบบที่อ่านได้จาก Server
- $_FILES เป็น array ของตัวแปรที่ได้จากการ upload files ไปยัง Server
- $_ENV เป็น array ของตัวแปรค่าของสภาพแวดล้อมของระบบ (Environment)
ตัวอย่างการอ่านค่า
<?
echo "ค่าจากตัวแปร $_REQUEST"; print_r($_REQUEST); echo "\n";
echo "ค่าจากตัวแปร $_GET"; print_r($_GET); echo "\n";
echo "ค่าจากตัวแปร $_POST"; print_r($_POST); echo "\n";
echo "ค่าจากตัวแปร $_COOKIE"; print_r($_COOKIE); echo "\n";
echo "ค่าจากตัวแปร $_SESSION"; print_r($_SESSION); echo "\n";
echo "ค่าจากตัวแปร $_SERVER"; print_r($_SERVER); echo "\n";
echo "ค่าจากตัวแปร $_FILES"; print_r($_FILES); echo "\n";
echo "ค่าจากตัวแปร $_ENV"; print_r($_ENV); echo "\n";
?>