PHP7 Upgrade

สวัสดีครับ พบกับบทความจาก Thanop.com อีกเช่นเคย คราวนี้ผมขอข้ามสาย จากการ รีวิวเครื่องใช้ไฟฟ้า หรือ สินค้าในครัวเรือน มาพูดถึงเรื่องเทคนิคๆ บ้างนะครับ โดยเป็นการบอกเล่าประสบการณ์ การอัพเกรดเวอร์ชั่นของ PHP ของ เซิร์ฟเวอร์ตัวเว็บ Thanop.com ที่คุณกำลังเปิดอ่านอยู่ตอนนี้แหละครับ โดยอัพเกรดจาก PHP5 ตระกูลที่ใช้อยู่ก่อนหน้า มาแล้วกว่า 10 ปี (ตั้งแต่ปี ค.ศ. 2004) ให้กลายเป็น PHP7 ว่าจะต้องมีการเตรียมตัว (และเตรียมใจ) พร้อมรับมือกับมันอย่างไรบ้าง ? เวลาใครที่ต้องการอัพเกรดแล้ว จะได้ไม่ต้องมานั่งเสียเวลาแบบผมอีกนั่นเอง

ก่อนที่จะไปอ่านบทความในลำดับต่อไปนั้น ผมขอเกริ่นบอกเอาไว้ก่อนว่า ผมไม่ใช่ เทคนิเชียน (Technician) หรือผู้เชี่ยวชาญ (Specialist) ชำนาญการอะไร ผมแค่เป็นคนที่ติดตั้งเซิร์ฟเวอร์พอเป็น ให้มันรันเป็นเว็บเซิร์ฟเวอร์ได้ แก้ปัญหาเฉพาะหน้าได้เล็กน้อย พูดง่ายๆ คือผมกำลังถ่อมตัวว่า ไม่ได้เป็นคนแข่งอะไรมากมาย เรื่องเซิร์ฟเวอร์ นะครับ

ส่วนการเขียนเว็บด้วย ภาษา PHP นั้นพอได้เล็กๆ น้อยๆ พื้นฐาน ก่อนหน้านี้เคย เมื่อ 8-9 ปีก่อน เคยเป็นอาจารย์สอน PHP อยู่ที่ สถาบัน NetDesign อยู่พักนึง แต่ตอนนี้ก็ลืมไปเยอะแล้ว เพราะฉะนั้น บทความผมคงไม่ได้เจาะลึกด้านประสิทธิภาพ ด้านเทคนิค อะไรมากมายนะครับ

PHP7 มีดีอย่างไร ?

PHP7 Logo

หากใครที่อยากจะรู้ว่า PHP7 มันมีดีอย่างไร ดีกว่าเวอร์ชั่นก่อนๆ ยังไง ผมขอสรุปคร่าวๆ จากเว็บของ PHP.NET นะแหละ ว่ามันมีดีอย่างไรบ้าง

  • ปรับปรุงประสิทธิภาพ ให้มีความเร็วมากกว่า PHP5.6 ถึง 2 เท่าด้วยกัน
  • ปรับลดอัตราการบริโภคหน่วยความจำ (RAM) อย่างเห็นได้ชัด
    สนับสนุนระบบปฏิบัติการ แบบ 64 บิต อย่างเต็มรูปแบบ รีดประสิทธิภาพของมันออกมาได้เต็มที่
  • ปรับแก้ไข ข้อผิดพลาดร้ายแรง (Fatal Error) ให้กลายเป็น Exceptions ดักแทน แล้วไม่แสดงข้อผิดพลาดออกมาได้แล้ว
    ปรับวินัยการเขียนโค้ดของผู้พัฒนาให้เป็นระบบระเบียบมากขึ้น
  • ยกเลิกส่วนขยาย (Extension) เก่าๆ และ API การเชื่อมต่อบางอย่างออกไป ให้เป็นมาตรฐานมากยิ่งขึ้น
  • และการเปลี่ยนแปลง อื่นๆ อีกมากมาย (ที่ผมแปลไม่ออก 555)

ทำไมถึงรีบอัพเกรด PHP7 จัง ?

เนื่องจากผมเป็นโรคจิตชนิดนึง ที่หากเป็นซอฟต์แวร์ หรืออะไรก็ตามแต่ที่เกี่ยว เซิร์ฟเวอร์ ผมจะชอบอัพเดท (Update) อัพเกรด (Upgrade) ให้เป็นเวอร์ชั่นใหม่ล่าสุดเสมอ ด้วยความเชื่อที่ว่า เวอร์ชั่นใหม่ ย่อมมีประสิทธิภาพดีกว่าเวอร์ชั่นเก่า และ ข้อผิดพลาดย่อมน้อยกว่า ความปลอดภัยย่อมมากกว่า แต่จริงๆ แล้วมันก็ไม่เสมอไปนะครับ ท่านผู้ชม พูดง่ายๆ คือ ผมชอบหาเรื่องใส่ตัวนั่นเอง ๕๕๕ เพราะการอัพเดท หรือ อัพเกรด ซอฟต์แวร์เป็นเวอร์ชั่นใหม่ๆ นั้น จะต้องมีหลายเรื่องเกี่ยวกับ การเข้ากันได้ (Compatibility) และ การเข้ากันไม่ได้ (Incompatibility) อีกหลายๆ อย่าง หลายๆ ประเด็น ซึ่งก็ต้องมาปรับแก้ไขกันยกใหญ่พอสมควร

อันที่จริง ผมเห็นธนาคารในประเทศไทย หลายธนาคาร ยังใช้ระบบปฏิบัติการ Windows 2000 หรือ Windows 98 สำหรับตู้ ATM หรือ ใช้ภายในสำนักงาน อะไรแบบนี้กันอยู่เลย สาเหตเพราะ โปรแกรม หรือ ระบบปฏิบัติการเหล่านี้ ยิ่งเก่า ก็ยิ่งสเถียร เพราะปัญหาต่างๆ นั้นถูกแก้ไขมาอย่างดี ผู้พัฒนาเข้าใจปัญหามาอย่างถ่องแท้แล้ว แล้วยิ่งเป็นระบบที่ต้องดูแลเรื่องเงินๆ ทองๆ อย่างธนาคาร ด้วยละก็จะต้องคิดหนักเลยทีเดียว

Windows 2000 Installed in Passbook Update Machine
Windows 2000 ถูกติดตั้งอยู่ข้างใน เครื่องอัพเดทสมุดบัญชี (Passbook Update Machine)

เริ่มอัพเกรด เป็น PHP7

ผมก็เฝ้าติดตามข่าวคราว ความเคลื่อนไหวของ ทาง PHP มาอยู่พักใหญ่ๆ ตั้งแต่ทีมพัฒนา เขาออกเวอร์ชั่นทดสอบก่อนกลายปล่อยตัวจริงในแบบ RC (Release Candidate) มาได้ 8 เวอร์ชั่น (RC8) จนกระทั่งทาง ทีมผู้พัฒนาของเขาประกาศ ปล่อยเวอร์ชั่นใหม่ อย่างเป็นทางการ (Final Release) ใน วันพฤหัสบดีที่ 3 ธันวาคม ค.ศ. 2015 ผมก็นั่งเฝ้าคอยอย่างใจจดใจจ่อ จนกระทั่งมันถูกออกมาสู่สาธารณะในวันที่ 3 ธันวาคม อย่างที่แจ้งเอาไว้จริงๆ

PHP7 Officially Launched
มาตามนัด PHP7 ประกาศ เปิดตัวอย่างเป็นทางการในวันที่ 3 ธันวาคม 2015

ช่วงหยุดยาววันพ่อ ผมก็คิดในใจ และ บอกกับตัวเองว่า “อัพเกรดเลยสิครับ รออะไรอยู่ละ ?”

เนื่องจากผมใช้ระบบปฏิบัติการ CentOS ซึ่งเป็น Linux วิธีการติดตั้ง PHP ทั่วๆ ไปแล้ว จึงมี 2 แบบหลักๆ ด้วยกันคือ

  1. ติดตั้งด้วยวิธี คอมไพล์จากซอสโค้ด
  2. ติดตั้งด้วยวิธี ใช้ตัวติดตั้งอัตโนมัติ (yum)

อัพเกรด PHP7 ด้วยวิธีคอมไพล์จากซอสโค้ด (Compile PHP from Source)

การติดตั้ง PHP แบบ คอมไพล์จากซอสโค้ด (Compile PHP from Source) วิธีนี้คือวิธีแรกที่ผมศึกษาและเรียนรู้ตอนเริ่มหัดใช้ Linux แรกๆ เลย แต่หารู้ไม่ว่า จริงๆ มันมีวิธีที่ง่ายกว่านี้ และ ประหยัดเวลากว่านี้เยอะ อย่างเช่นการติดตั้งผ่าน คำสั่ง yum บนลีนุกซ์สาย Red Hat และ ติดตั้งผ่านคำสั่ง apt-get สำหรับลีนุกซ์สาย Debian

วิธีการก็ไม่ได้ยากเย็นอะไร ทำตามนี้เลย

  1. ดาวน์โหลด PHP7 มาจากเว็บไซต์ php.net ที่หน้า ดาวน์โหลด PHP ด้วยคำสั่ง wget หรืออะไรก็ว่าไป
  2. แตกไฟล์ด้วยคำสั่ง tar -xvf php-7.0.0.tar.gz
  3. สร้างไฟล์ หรือ อัพโหลดไฟล์ ที่แสดงฟังก์ชั่น phpinfo(); เพื่อดูคำสั่งที่ใช้ในการติดตั้ง หรือ Configure Command ของเก่า
  4. ก๊อปปี้ทั้งหมด ที่เป็น ./configure … ไปแปะใน โปรแกรม SSH แล้วกด ENTER
  5. ต่อด้วยคำสั่ง make && make install เพื่อติดตั้ง PHP7 ลงบนเซิร์ฟเวอร์ของเครื่องคุณอย่างถาวร
  6. เสร็จแล้วก็รีสตาร์ทโปรเซส ของ Apache Web Server ครั้งนึง ก็เสร็จพิธี

หมายเหตุ 1

ตอนที่คุณจะติดตั้งในคำสั่ง ./configure นั้น หากมีชุดคำสั่ง –with-mysql อยู่ใน Configure Command นั้น มันจะไม่ให้แล้วนะจ๊ะ มันจะแจ้งเตือนว่า

configure: WARNING: unrecognized options: –with-mysql

คุณจะต้องเปลี่ยนให้เป็น –with-mysqli เท่านั้น ถึงจะสามารถคอมไพล์ และไปต่อได้

หมายเหตุ 2

สำหรับใครที่ติดตั้งด้วยวิธีการคอมไพล์ซอสโค้ด ด้วยวิธีผมแบบนี้ จะต้องเข้าไปแก้ไขในไฟล์ httpd.conf ของ HTTPD Apache ด้วยนะครับ โดยคุณจะต้องลบ หรือ คอมเม้นต์บรรทัดที่โหลด โมดูลไลบรารี่ของ PHP5 เอาไว้

#LoadModule php5_module modules/libphp5.so

และเปิดการใช้งานของ โมดูลไลบรารี่ ของ PHP7

LoadModule php7_module        modules/libphp7.so

โดยห้ามเปิดพร้อมกัน 2 อันนะครับ ไม่งั้นจะงง มั่ว และ เอ๋อ มากๆ ผมเสียเวลากับมันมา ชั่วโมงกว่าๆ หาสาเหตนี้

อัพเกรด PHP7 ด้วยวิธีใช้ตัวติดตั้งอัตโนมัติ yum

เนื่องจากคลังข้อมูลของเจ้า yum (yum Repositories) ที่เป็นของ CentOS นั้นยังไม่ได้ เปลี่ยนให้คุณได้สามารถอัพเกรดเป็นเวอร์ชั่นใหม่ ได้เลยทันทีหรอก ต้องรออีกชาตินึง (หลายเดือน ถึงขั้นเป็นปี) หากคุณติดตั้งด้วยวิธีนี้ การได้มาซึ่ง PHP7 จากแหล่งของ CentOS เองนั้นจึงเป็นเรื่องที่ลืมไปก่อนได้เลย

ดังนั้นหากคุณต้องการที่จะใช้มัน ผ่านการติดตั้งด้วย ตัวติดตั้งอัตโนมัติ สำเร็จรูปอย่างเจ้า yum แล้วละก็ ผมแนะนำให้คุณไปใช้แหล่งดาวน์โหลดใหม่ อย่างที่ Webtatic.com (อีกเครื่องนึงผมใช้อยู่)

https://webtatic.com/packages/php70/

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

ผลกระทบหลังอัพเกรด PHP7

ลองมาดูผลกระทบการใช้งานหลังอัพเกรดไปแล้วบ้าง

ทดลองกับโปรเจค Open-Source

สำหรับเว็บไซต์ที่ใช้งานด้วยโปรเจคโอเพ่นซอร์ส อย่าง WordPress หรือ เว็บบริหารจัดการเนื้อหาสำเร็จรูป (CMS – Content Management Systems) นั้น หากคุณใช้กับ PHP 5.6 มาก่อนได้ไม่มีปัญหา คุณก็สามารถใช้กับ PHP7 อย่างไม่มีปัญหาใดๆ เช่นเดียวกัน ใช้ได้ฉลุย ไม่ต้องทำอะไรเลย

ทดลองกับเว็บที่เขียนขึ้นมาเอง

ผมมีอีกเว็บนึงที่เขียนขึ้นมาเอง ตั้งแต่ปี ค.ศ. 2009 อันนี้สิงานงอกของจริง เพราะการใช้งานฟังก์ชั่นต่างๆ นั้นก็ยังเป็นแบบโบราณกันอยู่ ผลลัพธ์คือ เว็บไซต์นี้ เปิดไม่ขึ้นเลย มานั่ง Debug หาสาเหตการเกิดข้อผิดพลาด (Error) ไปมาก็พบว่า ทั้งเว็บเราใช้การเชื่อมต่อระหว่าง PHP กับ MySQL ด้วยฟังก์ชั่น mysql_ ทั้งหมดเลย ยกตัวเช่น

  1. mysql_connect
  2. mysql_select_db
  3. mysql_query
  4. mysql_fetch_array
  5. และอื่นๆ

ซึ่งทั้งหมดนี้จะต้องเปลี่ยนเป็นฟังก์ชั่นใหม่ นั่นก็คือ mysqli_ โดยจากที่พิมพ์มาด้านบนจะต้องเติม i เข้าไปข้างหลังให้หมด

  1. mysqli_connect
  2. mysqli_select_db
  3. mysqli_query
  4. mysqli_fetch_array
  5. และอื่นๆ

ทั้งหมดทั้งมวลนี้ สามารถทำได้ด้วยฟังก์ชั่นแทนที่คำ (Replace) ของโปรแกรมเขียนโปรแกรม อย่าง โปรแกรม Notepad++ ที่ผมใช้งานอยู่ แต่มันก็ยังไม่จบแค่นั้น เพราะบางฟังก์ชั่น ต้องมีการเพิ่มพารามิเตอร์ (Parameter) เข้าไปอีก ไม่อย่างนั้น ไม่สามารถใช้งานได้ ยกตัวอย่างเช่น

ฟังก์ชั่น mysql_select_db กับ mysqli_select_db

  • สมัยก่อน : mysql_select_db(ชื่อดาต้าเบส)
  • สมัยปัจจุบัน : mysqli_select_db(ชื่อลิ้งค์การเชื่อมต่อ, ชื่อดาต้าเบส)

นอกจากนั้น ฟังก์ชั่นอื่นๆ อีกมากมาย ก็ต้องนั่งไล่ตามไล่แก้กันไป นอกจากนี้ก็ยังมีอีกหลายฟังก์ชั่นที่หมดอายุไขเลิกใช้กันไป (Deprecated Function) อย่างเช่น ereg_replace() เปลี่ยนเป็น preg_replace() คราวนี้บังคับเปลี่ยนถาวรแล้ว ไม่มีอนุโลมเหมือนสมัยก่อนๆ ที่ยังพออนุโลม หยวนๆ กันไปได้

บทสรุปการอัพเกรด PHP เวอร์ชั่น 7

อยากทุกท่าน ก่อนที่จะอัพเกรดเป็น PHP นั้น อยากให้ ตรวจสอบฟังก์ชั่นต่างๆ นิดนึงว่าอันไหนเขาเลิกใช้ไปแล้วบ้าง เพราะจะได้ไม่ต้องมาเสียเวลานั่งแก้โค้ดกันหลังอัพเกรดเสร็จแล้ว ในขณะที่เว็บนั้นเน่า เข้าไม่ได้ เสียโอกาสการขาย เสียลูกค้า ไปอีกเยอะเลยทีเดียวนะ ใครที่มีอะไรอยากแลกเปลี่ยนประสบการณ์เรื่องการอัพเกรด PHP ก็ฟอโล่วทวิตเตอร์ (Twitter) ของผมมาคุยกันได้นะครับที่ @thanop บทความนี้ขอลาไปก่อน สวัสดีครับ

 

4 ความคิดเห็น

  1. ไลท์เพจให้แล้วนะคับ ผมกำลังมีปัญหา อัพเกรด host เป็น php7 แต่ code เดิมไม่ขึ้นเลยคับ ปวดหัวมากๆ คับตอนนี้ ผมไล่เปลี่ยน mysql_* เป็น mysqli_* หมดแล้ว แต่ก้อไม่ขึ้นคับ

  2. กำลังค้นหาบทความเกี่ยวกับ php 7 อยู่เลย ยังไงจะลองติดตั้งดู ขอบคุณสำหรับบทความดีๆนะครับ เท่าที่ที่เข้าเว็บท่านมาไวดีครับ

  3. หลังอัพเกรด เว็บไซต์ไวกว่าอย่างเห็นได้ชัดป่ะคะ คือรู้สึกได้ว่ามันไวกว่า? อิอิ
    ขอบคุณสำหรับบทความนะคะ

ทิ้งคำตอบไว้

Please enter your comment!
Please enter your name here