Friday, December 16, 2005

PHP 4.4 ทำเจ๊ง

ญาติเมล์มาบอกว่า ฐานข้อมูลครอบครัว Family DB/Tree ที่เคยทำไว้ เข้าไม่ได้ เขาจะมาอัพเดทสักหน่อย ไปลองไล่ๆดู เออจริงแฮะ PHP มันเพี้ยนๆ

ไล่ไปไล่มา เครื่องนี้ PHP ถูกอัพเป็น 4.4 แล้ว ซึ่งในรุ่นใหม่นี้ตัวแปรของ GET หรือ POST ที่เคยมาทาง global variable มันไม่มาแล้ว เช่น ถ้า URL เป็น http://www../proc.php?xx=2 เดิมเคยเรียกใช้ $xx ใน proc.php ได้เลย ตอนนี้ต้องแก้โดยเพิ่มในตอนต้นของ proc.php ไฟล์ว่า

$xx = $_GET["xx"];
หรือ
$xx = $_REQUEST["xx"];
หรือถ้าใช้ POST ก็ต้อง
$xx = $_POST["xx"];
Otto บอกว่าถ้าอยากให้มันมีเหมือนเดิม ก็ไปแก้ .htaccess โดยเพิ่มบรรทัด
php_flag register_globals 1
ลองทำดูแล้ว ทีเดียวได้เลย ง่ายดี มันอาจจะมีปัญหาเกี่ยวกับ Security อะไรไม่รู้ ตอนนี้ใช้แบบนี้ไปก่อนก็แล้วกัน

3 comments:

Ford AntiTrust said...

ถ้าไม่กำหนด GET/POST อย่างที่บอกมันจะมีปัญหาแบบนี้ครับ

http://www.thaicyberpoint.com/ford/blogprojects/2005/06/get-post-form-method-hack_28.html

Sira said...

ใน php.ini มันจะมี set
register global อยู่ครับ

ถ้า on ไว้ มันก็จะมีปัญหาเืรื่อง
security ในกรณีคนเขียนโปรแกรม
หลวมก็เท่านั้นเองครับพี่

Patrickz said...

สาเหตุมาจากความปลอดภัย ซึ่ง PHP เค้าแนะนำไม่ให้อ้างถึง HTTP Query String โดยตรงมาตั้งนานแล้ว ราวๆ 2-3 ปี แต่ว่านักพัฒนาบางส่วนไม่ได้ทำตามกัน (มักง่าย) พอ version หลังๆ เค้าก็ปรับค่า default ไม่ใช้ใช้การอ้างถึงค่าจาก Query String ได้โดยตรง (register_globals flag) ก็เลยมีโปรแกรมบางส่วน โดยเฉพาะ PHP Script เก่า ใช้งานไม่ได้

ดังนั้นถึงแม้ว่า เราจะแก้ได้โดยการกำหนดค่า register_globals แต่ใน script ใหม่ๆก็อย่ามักง่ายนักเลย ทำให้ถูกข้อแนะนำจะดีกว่า