PHP : เกี่ยวกับ php.ini ปรับแก้ยังไงให้ใช้งานได้ดีกับ server

เข้าชม/อ่าน 4130 ครั้ง2017-11-27 11:54 |เลือกหมวดหมู่:เทคโนโลยีสารสนเทศ

PHP : php.ini คืออะไร? ปรับแก้ยังไงให้ใช้งานได้ดีกับ server

     ผมเจอปัญหากวนใจหาคำตอบยังไงก็ไม่เจอว่าทำไมเว็บไซต์ที่เราเขียนไว้เสร็จแล้วที่ localhost ของเรา พอ Upload ไปที่ server กับมีข้อผืดพลาด ใช้งานไม่ได้อย่างที่เขียนไว้ที่ localhost นี่คือวิธีแก้ไขที่จะช่วยแก้ไขปัญหาที่น่าปวดหัวนี้ได้(ติดปัญหานี้มา 5 วันเต็มๆ T-T )
php.ini คืออะไร?


php.ini คืออะไร?
php.ini คือไฟล์ที่ใช้สำหรับปรับแต่งคุณสมบัติ หรือการทำงานของ php
( เครื่องหมาย ; ในไฟล์ php.ini เป็นเครื่องหมายคอมเม้นท์ ถ้าบรรทัดใดมีเครื่องหมายเซมิคอล่อน อยู่ข้างหน้า นั่นหมายความว่าบรรทัดนั้นจะไม่มีผลใดๆ บรรทัดนั้นจะเป็นแค่คอมเม้นท์ )


php.ini อยู่ที่ไหน ?
php.ini บนวินโดว์ปรกติจะอยู่ใน C:\WINDOWS ครับ ของคุณใช้ appserv น่าจะอยู่ในนี้ ถ้าไม่เจอลอง find ดูในไดว์ C:


PHP มี config ต่างๆ มากมาย หากอยากรู้ว่า server ของเราเซ็ต config อะไรไว้อยู่บ้างให้ทดสอบด้วยการสั่ง phpinfo(); ในไฟล์ php ไฟล์ใดก็ได้ ระบบจะแสดง config ออกมาให้เห็นทั้งหมด รวมไปถึงหากต้องการทราบว่าไฟล์ php.ini อยู่ที่ไหนก็ดูได้จาก phpinfo(); เช่นกัน

ตัวอย่าง วิธีแก้ปัญหา 
+ปัญหาการติดตั้ง-การเพิ่ม memory-limit ใน php.ini

วิธีแก้
ลองใช้ phpinfo() นะครับ แล้วดูว่าระบบเรียก php.ini จากที่ไหน เช่น /usr/local/etc/php.ini ซึ่งไฟล์นี้จะเป็นค่าเริ่มต้นของ PHP เราไม่สามารถไปทำอะไรได้เพราะเป็นไฟล์ของระบบ

แต่เราสามารถปรับแต่งค่านี้ได้จากคำสั่ง

ini_set("memory_limit", "40M");


ซึ่งอาจจะต้องเพิ่มเข้าไปใน config.php เอง
ที่มา : https://moodle.org/mod/forum/discuss.php?d=71098


สำหรับการ setup php ตั้งแต่เวอร์ชั่น 5.3 เป็นต้นไป จะมีไฟล์ php.ini-development เอาไว้เป็น sample ให้ copy เป็น php.ini ถ้าต้องการใช้ทดสอบโปรแกรมเฉยๆ และไฟล์ php.ini-production เอาไว้ใช้ใน server ที่ให้บริการกับลูกค้าจริง
โดย config ที่ผมจะแนะนำให้รู้จักมีดังนี้
display_errors – On/Off – หากเกิด error ขึ้นให้แสดงภายในหน้าเว็บหรือไม่ ถ้าเป็นเครื่อง development ควร On ไว้เพื่อ debug ถ้าเป็นเครื่อง production ควร Off เพื่อไม่ให้ผู้ใช้เห็น
error_reporting – E_ALL/0 – ใช้ปรับระดับ level การแสดง error ว่าจะให้แสดงมากน้อยเพียงใด หากต้องการปิด error ไม่ให้แสดงเลย ให้ใส่เป็น 0 (ศูนย์) ได้
short_open_tag – On/Off – ถ้าเปิด On ไว้จะสามารถใช้ <? ?> แทน <?php ?> และ <?=’Hello World’?> แทน <?php echo ‘Hello World’; ?> ได้ (feature นี้เพื่อความสะดวกของตัวโปรแกรมเมอร์นั่นเอง)
max_execution_time – int – กำหนดเป็นตัวเลขที่ต้องการให้ script สามารถรันได้นานที่สุด ทั่วไปกำหนดที่ 30 วินาทีซึ่งค่อนข้างเพียงพอต่อการใช้งานทั่วไป หากต้องมีการทำงานที่ใช้การประมวลผลเป็นเวลานานสามารถปรับเพิ่มขึ้นได้ แต่ไม่แนะนำให้ใส่เยอะเกินไป เพราะอาจทำให้ loop infinite ก่อนความเสียหายเป็นระยะเวลานาน โดยที่เราไม่รู้ตัวได้
max_input_time – int – ใช้กำหนดเวลามากที่สุดที่อนุญาตให้ php ประมวลผลข้อมูลที่ผู้ใช้ส่งเข้ามาได้เช่นการ submit form post
memory_limit – int – กำหนดขนาดของ memory ที่อนุญาตให้ script แต่ละตัวใช้ได้ ถ้ากำหนดสูงไปอาจเกิดปัญหา memory leak ได้
post_max_size – int – ขนาดข้อมูลใหญ่ที่สุดที่อนุญาตให้ผู้ใช้ส่งเข้ามาได้ ขนาดตรงนี้รวมทั้ง file ที่ upload และข้อมูลที่ submit ผ่าน form เข้ามา
auto_prepend_file – string – path ไฟล์ php ที่ต้องการทำงานก่อนการทำงาน php ทุกๆ ไฟล์ที่รันตามปกติ ตรงนี้มีประโยชน์มากต่อการกำหนดตัวแปร Global ที่ต้องการให้ใช้งานได้ทุกๆ ไฟล์ ซึ่งเราจะเขียนอย่างไรก็ได้ตามใจเราเลย
auto_append_file – string – เหมือน  auto_prepend_file  ต่างกันแค่เป็นการทำงานหลังไฟล์ php ทุกๆ ไฟล์
file_uploads – On/Off – อนุญาตให้ upload file ขึ้น server ได้หรือไม่
upload_max_filesize – int – ขนาดไฟล์สูงสุดที่ให้ upload ได้ (ต้อง <=  post_max_size )
max_file_uploads – int – จำนวนไฟล์ที่ upload ได้พร้อมกันทั้งหมด
extension – string – กำหนด extension ของ php ที่ต้องการใช้งาน
session.gc_maxlifetime – int – อายุของ session ของผู้ใช้แต่ละคนที่จะเก็บไว้สูงสุด หากมีการเรียกใช้ session
Config เหล่านี้นอกจากจะสามารถกำหนดได้ที่ php.ini แล้วเรายังสามารถกำหนดใน run-time ในไฟล์ php ไฟล์ใดก็ได้อีกด้วย เพียงเรียกใช้ function ini_set() ก็สามารถเปลี่ยนแปลงค่า config เหล่านี้ได้ตลอดเวลา

ที่มา :
http://blog.levelup.in.th/2011/11/26/study-configuration-for-php-in-phpini%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81%E0%B8%81%E0%B8%B1%E0%B8%9A-config-%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B8%99%E0%B9%88%E0%B8%B2%E0%B8%AA%E0%B8%99/
http://www.select2web.com/general/php-ini-where-are-you.html



บทความนี้จะมือใหม่หรือมือเก๋าก็อ่านได้ เพราะนี่จะเป็นการปรับแต่ง php.ini ให้เหมาะสำหรับการพัฒนาเท่านั้น
หลายๆคนมักจะโพสท์ถามกันให้เห็นบ่อยๆตามฟอรั่ม php ทั่วไป ว่าทำไมสิ่งที่พวกเขาทำได้บน localhost กลับทำไม่ได้บน server จริง
นั่นเป็นเพราะนักพัฒนาเหล่านั้นขาดความเข้าใจในการปรับแต่งให้เหมาะสมสำหรับสภาพแวดล้อมของการพัฒนา (development)
เมื่อ นำไปใช้บน server จริงแล้ว ทำให้ใช้งานไม่ได้เหมือนเคย เป็นเพราะ server จริงแต่ละที่จะมีการปรับแต่ง php.ini สำหรับการใช้จริงเท่านั้น
ซึ่ง server เหล่านั้นต้องเพิ่มความปลอดภัยอีกมาก ทำให้ต้องปรับลดส่วนต่างๆที่ไม่จำเป็นออกไป
ทำ ให้การปรับแต่ง php.ini สำหรับการพัฒนาเท่านั้น เป็นสิ่งที่สำคัญมาก เพราะนั่นหมายความว่า ไม่ว่าจะนำเว็บไซต์ไปวางไว้ที่ใด** ก็จะใช้งานได้เป็นปกติเหมือนเคย.
** ยกเว้นพวก free hosting หลายแห่ง ที่มีการปรับแต่งเพื่อความปลอดภัยมากเกินธรรมดาทำให้ใช้งานแบบปกติแทบไม่ได้
คำเตือนก่อนทำการปรับแต่ง! หาก 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 หลายแห่ง ที่มีการปรับแต่งเพื่อความปลอดภัยมากเกินธรรมดาทำให้ใช้งานแบบปกติแทบไม่ได้


แหล่งที่มา : http://appwebblog.blogspot.com/2015/03/php-phpini-server_9.html

เขินอ่ะ

อะไรก็ไม่รู้

เห็นด้วยๆ

ซึ้งจังเลย

ขำฮาตรึม

ความคิดเห็น (0 ความคิดเห็น)

facelist

คุณต้องลงชื่อเข้าใช้ก่อนจึงจะสามารถแสดงความคิดเห็นได้ ลงชื่อเข้าใช้ | ลงทะเบียน

ขึ้นไปด้านบน