IT Zone

เขียน php ให้มีภูมิคุ้มกันสู้กับโฮสต์

เพื่อการพัฒนาโปรแกรมให้เป็นไปอย่างราบรื่น และเพื่อให้เกิดปัญหากับลูกค้าหรือโปรแกรมเมอร์ด้วยกันน้อย ที่สุด ในกรณีที่มีการช่วยเหลือกันแก้โปรแกรม และเพื่อให้โปรแกรมมีประสิทธิภาพมากที่สุด เราจำเป็นที่จะต้องปฏิบัติตามดังต่อไปนี้

1. ควรตั้งค่าตัวแปร config ของ php บางตัวให้เป็นดังต่อไปนี้
register_globals=Off
short_open_tag=Off
asp_tags=Off
error_reporting=E_ALL | E_DEPRECATED
display_errors=On
allow_call_time_pass_reference=Off

2. เรื่องการตั้งชื่อตัวแปรต่างๆ โดยเฉพาะตัวแปรที่เป็น constant ที่เรามักจะ define ไว้ในไฟล์ภาษาของคอมโพเน้นท์เรา ให้ระวังเรื่องการตั้งชื่อซ้ำกับของระบบแมมโบ้ที่มีอยู่แล้ว ถ้าเป็นไปได้ให้เราตั้งชื่อโดยการใช้ prefix ที่เราคิดว่ามันไม่น่าจะไปซ้ำกับของแมมโบ้หรือของคอมโพเน้นท์ อื่น หรือ extension ตัวอื่นๆ อย่างเช่น แทนที่เราจะตั้งเป็น _MAY ให้เราตั้งเป็น _LTS_MAY หรือ LTS_MAY เป็นต้น(LTS มาจาก Laithai Suit)

3. ตรงนี้มักจะมีปัญหาในกรณีที่เราสร้างฟังก์ชั่นตอนที่เราสร้างโมดูล และเราทำการสำเนาโมดูล หรือบางทีอาจจะทำคอมโพเน้นท์ให้ใช้ได้ทั้งแมมโบ้และจูมล่า บางครั้งคอมโพเน้นท์นั้นๆ เราอาจจะไปเอาคอมโพเน้นท์ของจูมล่ามาแก้ และมันดันไปเรียกฟังก์ชั่นบางตัวที่แมมโบ้ไม่มี เราก็จึงจำเป็นที่จะต้องไปก๊อปปี้ฟังก์ชั่นนั้นมาด้วย แต่ว่า ถ้าเราไปก๊อปปี้มาเฉยๆ คอมโพเน้นท์ใหม่ที่เราแก้ ก็อาจจะทำงานผิดพลาดในกรณีที่เรานำไปใช้กับจูมล่า เพราะว่าชื่อฟังก์ชั่นมันซ้ำกัน ถ้าจะเปลี่ยนชื่อฟังก์ชั่นซะใหม่ ก็จะทำให้ขนาดเนื้อที่ในฮาร์ดดิสก์เพิ่มขึ้น(ถึงแม้จะไม่มากก็ ตาม แต่ก็สำคัญ เพราะเราจะต้องทำให้งานของเรามีขนาดเล็กที่สุด แต่ประสิทธิภาพมากที่สุด) เพราะฉะนั้นวิธีแก้ปัญหาก็ง่ายมาก เวลาเราจะสร้างฟังก์ชั่นให้เราใช้ฟังก์ชั่น function_exists() ช่วยในการตรวจสอบว่าชื่อฟังก์ชั่นนี้มีอยู่หรือเปล่า ถ้ามีแล้ว ก็ไม่จำเป็นที่จะต้องสร้างฟังก์ชั่นใหม่ ตัวอย่างการใช้ ให้ใช้ดังนี้ if(!function_exists("function_name")) { function function_name( $param1, $param2, ....) { ........ } } เราสามารถเปลี่ยน function_name เป็นชื่อที่เราต้องการได้

4. ใช้ฟังก์ชั่น include_once() หรือ require_once() แทน include() หรือ require() อันนี้จะเป็นปัญหาเรื่องการประกาศฟังก์ชั่นซ้ำเช่นกัน หรือบางทีอาจจะเป็นการเรียกโปรเซสซ้ำๆ หรือประกาศตัวแปรซ้ำ ซึ่งเราไม่ต้องการให้มันซ้ำ เราต้องการจะเรียกมันแค่ครั้งเดียว อย่างเช่นการเรียกไฟล์ภาษาเป็นต้น ถ้าเราใช้ include_once() หรือ require_once() มันจะตรวจสอบเรื่องของการซ้ำให้เรา ถ้าเราเรียกใช้ไฟล์นี้ครั้งที่สอง หรือสาม สี่ ห้า ครั้งต่อๆไป จะไม่มีผล จะมีผลแค่ครั้งแรกครั้งเดียวเท่านั้น

5. สำหรับโปรแกรมเมอร์ที่พัฒนา extensions ของแมมโบ้หรือจูมล่าให้เปิดโหมด debug ของระบบด้วย วิธีการคือล็อกอินเข้าด้านหลัง เข้าไปที่การตั้งค่าคอนฟิกหลัก หรือ Global Configuration ที่แท็บแรกเลย ให้เปิดโหมด ดีบั๊ก หรือแก้ไขข้อผิดพลาด โดยให้เลือกเป็นใช่แล้วกดบันทึก

6......ยังนึกไม่ออก

ป.ล.ในกรณีที่ทำตามคำแนะนำต่างๆ แล้วเกิดมีข้อความ error หรือ warning แสดงออกมาให้เราคลีนให้หมด(ไม่ใช่โดยการไปทำในสิ่งที่ตรงกัน ข้ามกับที่ผมบอกนะ) โดยการแก้โปรแกรมให้อยู่ในรูป well-form ที่สุด โดยโค้ดตรงไหนที่ผิดพลาดก็แก้ให้ถูกต้องซะ คำคมทิ้งท้าย: ทำโปรแกรมให้แข็งแรงต่อสู้กับเซิร์ฟเวอร์ที่หลากหลาย ดีกว่าทำโปรแกรมให้ทำงานได้แค่เซิร์ฟเวอร์เพียงเซิร์ฟเวอร์เดียว