วันนี้จะคุยกันเรื่องวิธีการอ้างถึงตัวแปรใน PHP ครับ เมื่อก่อน PHP จะเน้นการทำงานทั่วไปที่ไม่ซับซ้อนและไม่ได้แยกประเภทตัวแปร เวลาเรียกใช้ตัวแปรเราจะเรียกชื่อมันตรงๆเลย และไม่มีการแยกว่าเป็นตัวแปรชนิดใด แต่ปัจจุบัน PHP ถูกนำไปใช้กันอย่างกว้างขวาง และรับค่าตัวแปรหลากหลายจึงมีการแบ่งตัวแปรเป็นชนิดต่างๆ และเรียกผ่านตัวแปรระบบเหมือนตัวแปรชนิด Array เพื่อป้องกันการสับสนจากการเรียกใช้ชื่อตัวแปรที่เหมือนกัน ซึ่งอาจโดนผู้ไม่หวังดีส่งค่าตัวแปรมารบกวนการทำงานของระบบได้ โดย PHP จะมีให้เราตั้งค่า register_global เพื่อบอกให้ PHP รู้ว่าเราต้องการแบบใด (บางครั้งเราไม่ได้เลือกหรอกครับเพราะ admin ของ web hosting เค้ากำหนดเลย)
register_global เป็นค่า config ของระบบ เป็นการตั้งค่าเพื่อกำหนดว่าจะยอมให้ PHP อ้างถึงตัวแปรที่ส่งมาโดย methode get,post,session โดยตรงเลยหรือไม่
register_global=On
สามารถเรียกใช้ได้โดยอ้างชื่อได้ตรงๆเลย
register_global=Off
ต้องรับค่าผ่านตัวแปร array ที่ระบบสร้างขึ้น เช่น $_POST["variable"]
เพื่อความปลอดภัยเราควรตั้งค่า register_global=Off ไว้เพื่อป้องกันการทำงานสับสน และอาจถูกเจาะระบบได้จากการที่ hacker ส่งค่าตัวแปรบางอย่างเข้ามาโดยตรง
วิธีแก้ไขสำหรับท่านที่พบปัญหา
ปัญหาที่ท่านจะพบมักมีกรณีเดียวคือ ย้ายเครื่อง Server ที่ติดตั้ง Script หรือ Upgrade Software เพราะ PHP เวอร์ชั่นใหม่ๆก็จะตั้งค่า register_global=OFF ไว้เพื่อความปลอดภัย หากสคริปที่ทำขึ้นมาใน PHP รุ่นก่อนๆก็จะเกิดปัญหาทันที การแก้ไขก็คือ
1.) ยอมกลับไปตั้งค่า register_globals=On วิธีนี้ก็ต้องไปแก้ไฟล์ .htaccess โดยเพิ่มบรรทัดใหม่ลงไปว่า php_flag register_globals On ครับ หลังจากนั้นก็แบกรับความเสี่ยงภัยเอาครับ (ไม่แนะนำ)
2.) ปล่อยให้ค่า register_globals=Off ไปตามยุคใหม่เค้านิยม (เน้นปลอดภัยขึ้นอีกขั้นด้วย) แล้วค่อยๆแก้ไขโปรแกรมของท่านโดยใส่ $_POST, $_GET หรือ $_REQUEST เมื่อเรียกใช้ตัวแปรแล้วเกิดปัญหาไปทีละเปลาะๆ
หวังว่าคงช่วยเพิ่มความเข้าใจ และช่วยให้แก้ไขได้ถูกต้องตรงประเด็นนะครับ
ปล. สำหรับใครที่เริ่มมาเล่น PHP ใหม่ๆในยุคนี้อาจไม่เกิดปัญหา เพราะหนังสือหนังหาก็สอนให้ใช้ $_GET , $_POST กันหมดแล้ว
จบแล้ว / ไว้เจอกันใหม่ครับ
0 ความคิดเห็น