Home

เขียน 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 ​ที่สุด โดยโค้ดตรงไหนที่ผิดพลาดก็แก้ให้ถูกต้องซะ คำคมทิ้งท้าย: ทำโปรแกรมให้แข็งแรงต่อสู้กับเซิร์ฟเวอร์ที่หลากหลาย ดีกว่าทำโปรแกรมให้ทำงานได้แค่เซิร์ฟเวอร์เพียงเซิร์ฟเวอร์เดียว