PHP register_global = On/Off |
Register_global คือ โหมด php.ini ที่ใช้กำหนดรูปแบบในการอ่านค่าตัวแปร โดยถ้ากำหนดเป็น On จะสามารถอ่านค่าตัวแปรโดยไม่ต้องระบุชนิดของตัวแปร และถ้ากำหนดเป็น Off ในการอ่านค่าตัวแปรทุกครั้ง จะต้องทำการระบุชนิดของตัวแปรตาม ว่าเป็นชนิด $_GET,$_POST,$_SESSION,...ตัวอย่าง
php.ini
; You should do your best to write your scripts so that they do not require
; register_globals to be on; Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = On
ตัวอย่างการอ่านตัวแปรกรณีที่มีค่าเป็น On
ส่งค่าผ่าน Form
<input type="text" name="txtName">
รูปแบบ
<?php
echo $txtName;
?>
ส่งค่าผ่าน Query String (URL)
http://localhost/index.php?sitename=thaicreate.com
รูปแบบ
<?php
echo $sitename;
?>
ตัวอย่างการอ่านตัวแปรกรณีที่มีค่าเป็น Off
ส่งค่าผ่าน Form
<input type="text" name="txtName">
รูปแบบ
<?php
echo $_POST["txtName"]
?>
ส่งค่าผ่าน Query String (URL)
http://localhost/index.php?sitename=thaicreate.com
รูปแบบ
<?php
echo $_GET["sitename"];
?>
สำหรับการกำหนดเป็น Off ในการพัฒนาโปรแกรมจะมีความปลอดภัยมากกว่าในกรณีที่เป็น On ครับ และมีลดความสับสน และตัวแปรซ้ำซ้อนได้ครับ แต่ Server ส่วนมากจะกำหนดค่าในส่วนนี้เป็น On เพราะโปรแกรมส่วนมากในการพัฒนาโปรแกรมเมอร์จะไม่ค่อยใส่ใจในส่วนนี้ซะเท่าไหร่ แต่ถึงอย่างไร ผมเองก็ยังแนะนำให้ใช้ Off ดีที่สุดครับ และระบุชนิดตัวแปรทุกครั้งที่เรียกใช้งาน ถึงแม้จะกำหนดเป็น On หรือ Off ก็ตาม
หรือในกรณีที่ Server มีการกำหนดเป็น Off ผมมี Code ที่สามารถอ่านตัวแปรที่ไม่ต้องระบุชนิดได้ครับ
Code
<?php
//*** Register Global =On/Off Function ***//
$phpVersion = phpversion();
list($v_Upper,$v_Major,$v_Minor) = explode(".",$phpVersion);
if (($v_Upper == 4 && $v_Major < 1) || $v_Upper < 4) {
$_FILES = $HTTP_POST_FILES;
$_ENV = $HTTP_ENV_VARS;
$_GET = $HTTP_GET_VARS;
$_POST = $HTTP_POST_VARS;
$_COOKIE = $HTTP_COOKIE_VARS;
$_SERVER = $HTTP_SERVER_VARS;
$_SESSION = $HTTP_SESSION_VARS;
$_FILES = $HTTP_POST_FILES;
}
if (!ini_get('register_globals')) {
while(list($key,$value)=each($_FILES)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_ENV)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_GET)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_POST)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_COOKIE)) $GLOBALS[$key]=$value;
while(list($key,$value)=each($_SERVER)) $GLOBALS[$key]=$value;
while(list($key,$value)=@each($_SESSION)) $GLOBALS[$key]=$value;
foreach($_FILES as $key => $value){
$GLOBALS[$key]=$_FILES[$key]['tmp_name'];
foreach($value as $ext => $value2){
$key2 = $key."_".$ext;
$GLOBALS[$key2]=$value2;
}
}
}
?>
เพียงนำ Code นี้ไปวางไว้บนสุดของ Code ก็จะสามารถอ่านแบบไม่ต้องระบุชนิดของตัวแปรได้ครับ หรือจะสร้างเป็นไฟล์ include เพื่อเรียกใช้งานในหลาย ๆ หน้าที่ต้องการใช้งาน
Reference : https://www.thaicreate.com/php-manual/security.globals.html
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2008-08-02 12:11:04 /
2017-03-14 13:47:23 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|
|
|