ปรับแต่ง php.ini อย่างไรให้เหมาะสำหรับการพัฒนาเว็บ

บทความนี้จะมือใหม่หรือมือเก๋าก็อ่านได้ เพราะนี่จะเป็นการปรับแต่ง php.ini ให้เหมาะสำหรับการพัฒนาเท่านั้น

หลายๆคนมักจะโพสท์ถามกันให้เห็นบ่อยๆตามฟอรั่ม php ทั่วไป ว่าทำไมสิ่งที่พวกเขาทำได้บน localhost กลับทำไม่ได้บน server จริง
นั่นเป็นเพราะนักพัฒนาเหล่านั้นขาดความเข้าใจในการปรับแต่งให้เหมาะสมสำหรับสภาพแวดล้อมของการพัฒนา (development)

เมื่อ นำไปใช้บน server จริงแล้ว ทำให้ใช้งานไม่ได้เหมือนเคย เป็นเพราะ server จริงแต่ละที่จะมีการปรับแต่ง php.ini สำหรับการใช้จริงเท่านั้น
ซึ่ง server เหล่านั้นต้องเพิ่มความปลอดภัยอีกมาก ทำให้ต้องปรับลดส่วนต่างๆที่ไม่จำเป็นออกไป

ทำ ให้การปรับแต่ง php.ini สำหรับการพัฒนาเท่านั้น เป็นสิ่งที่สำคัญมาก เพราะนั่นหมายความว่า ไม่ว่าจะนำเว็บไซต์ไปวางไว้ที่ใด** ก็จะใช้งานได้เป็นปกติเหมือนเคย.

คำเตือนก่อนทำการปรับแต่ง! หาก php.ini ของท่านเป็นคนละรุ่นกับตัวอย่าง หรือบางอย่างมีการ comment ไว้ในนั้นว่า deprecate ก็อย่าได้ไปใช้มัน หรือปิดการใช้ไปเลย.
การปรับแต่งต่อไปนี้ ไม่ใช่ทั้งหมดของ php.ini แต่จะแนะนำสิ่งที่ควรปรับเป็นบางส่วนไปเท่านั้น

php.ini
short_open_tag = Off ปิดการใช้งานการเขียนแบบสั้นๆ ( <? ... ?> ) server จริงหลายแห่งปิดการใช้งานนี้ ดังนั้นเราควรปิดมันด้วย และให้เปลี่ยนไปใช้ <?php ... ?> แทน.

asp_tags = Off เราเขียน php ครับ ไม่ได้เขียน asp ( <% ... %> )

output_buffering = Off เราไม่ควรเปิด output buffer โดย server เพราะหากไปใช้งานบาง server ที่ไม่ได้เปิดไว้ผลอาจจะออกมาเจ๊งกะบ๊งได้. เราควรเปิดใช้ด้วยตัวเองในโค้ด. ทางแก้คือ ใส่ ob_start(); ที่บรรทัดแรกสุดของโค้ด และ ob_end_flush(); ที่บรรทัดล่างสุด หรือ ออกแบบการทำงานของสคริปเสียใหม่ ให้มีการประมวลผลเป็นส่วนแรกสุด ตามด้วยการแสดงผลเป็นส่วนสุดท้าย ก็จะช่วยได้

max_execution_time = 30 ให้เวลาการทำงานไม่ควรเกิน 30 วินาที

memory_limit = 64M กำหนดลิมิตของหน่วยความจำไว้เท่านี้ ใช้งานใน shared hosting ได้สบายๆ หรือจะลดลงมาอีกนิดหน่อย เหลือสัก 60M ก็ยิ่งดี

error_reporting = E_ALL | E_STRICT รายงานทุกอย่าง ทั้ง Error, Warning, Notice เพื่อที่เราจะได้เห็นทุกอย่างว่ามีความผิดพลาดอะไรบ้าง แล้วตามแก้ให้หมดครับ. ส่วน E_STRICT คือให้ PHP แจ้งเตือนว่าโค้ดส่วนใดของคุณควรได้รับการเปลี่ยนแปลงเพื่อความเข้ากันได้กับรุ่นต่อๆไปของ PHP ครับ.

display_errors = On แสดงรายการที่ error ต่างๆ อย่างที่บอกด้านบน เพื่อที่เราจะได้ตามแก้ครับ error ไม่ใช่สิ่งที่น่ากลัวและน่าอายที่จะปิดมัน แต่เราต้องแก้มัน

display_startup_errors = On แสดง error แม้กระทั่งตอนเริ่มต้น

register_globals = Off ต้องปิดไว้เพื่อความปลอดภัย นอกจากนี้ทำให้เราต้องประกาศตัวแปรให้ชัดเจนว่าเป็นอะไรมาจากไหน (เลิกวิธีเขียนแบบโบราณๆ ชนิดที่จู่ๆจะเรียก $var ก็เรียก กันได้แล้วครับ) เช่น การรับค่าจาก form method post ก็ให้ใช้ $name = $_POST['name']; แทนการเรียก $name เฉยๆโดยไม่บอกว่ามันคืออะไรมาจากไหน.

post_max_size = 8M ไม่ควรเกินจากนี้ เพราะ server จริงส่วนใหญ่ก็ประมาณนี้ การกำหนดมากเกินไปอาจมีปัญหาเมื่อต้องย้ายไปบน server จริง.

magic_quotes_gpc = Off ใน php รุ่นใหม่ๆต่อๆไปจะเลิกการใช้งานส่วนนี้แล้ว ดังนั้นเราก็ควรปิดมัน แต่หาก server จริงที่ไหนยังใช้อยู่ แล้วเราต้องเผชิญกับการแปลง " เป็น \"  ก็ให้ใช้ไฟล์ .htaccess ปิดมันเสีย ด้วยคำสั่ง php_flag magic_quotes_gpc Off หรือ php_value magic_quotes_gpc Off  แล้วใช้วิธีการ escape stringแทน.

upload_max_filesize = 2M กำหนดค่าอัพโหลดไฟล์ไม่ควรให้มากเกินไป แม้จะต้องการอัพโหลดไฟล์ใหญ่ๆก็ควรสำรวจจาก server จริงว่าจะรองรับได้เพียงใด แล้วทำการปรับแต่งค่านี้ผ่านทาง .htaccess แทนผ่านคำสั่ง php_value upload_max_filesize 10M การกำหนดค่านี้ไม่ควรมากกว่า post_max_size หากมากกว่าควรไปปรับ post_max_size ให้มากขึ้นไปด้วยเพื่อจะได้รองรับกัน.

date.timezone = Asia/Bangkok อย่าลืมกำหนดค่า timezone ให้ระบบ โดยอิงค่าอื่นๆได้จาก http://php.net/manual/en/timezones.php

เมื่อ ทำการปรับแต่งได้ดังนี้แล้ว ให้ลอง restart web server แล้วเรียกเว็บเพจดูใหม่ จะพบได้ทันทีเลยว่า ที่ผ่านมาเราทำงานละเอียดแค่ไหน ซึ่งก็ต้องตามแก้ไขกันไป
การแก้ไขที่ดีที่สุดก็คือแก้ไปตามวิธีการที่ถูก ไม่ใช่อุดปากมันด้วยการเติม @ ลงไปข้างหน้าในที่ๆไม่จำเป็น
และเมื่อทำสำเร็จแล้ว ก็จะสามารถนำเว็บไซต์ไปวางไว้ที่ไหนๆ** ก็จะใช้งานได้เหมือนเดิม เพราะเราเขียนมันด้วยสภาพแวดล้อม "สำหรับการพัฒนา" มาแล้วนั่นเอง

** ยกเว้นพวก free hosting หลายแห่ง ที่มีการปรับแต่งเพื่อความปลอดภัยมากเกินธรรมดาทำให้ใช้งานแบบปกติแทบไม่ได้
แสดงความคิดเห็น (0)
ใหม่กว่า เก่ากว่า