22 ตุลาคม 2569

การอัพเกรด 8.3 to 8.4

 วิธีตรวจสอบโค้ดที่อาจติด Deprecated ก่อนอัปเกรด • แนวทางการวางแผนย้ายไป PHP 8.4 หรือ 8.5

เครื่องมือที่ดีที่สุดในการตรวจจับโค้ดที่ล้าสมัย (Deprecated) และวางแผนย้ายเวอร์ชัน PHP คือการใช้ระบบวิเคราะห์โค้ดอัตโนมัติ (Static Analysis) ซึ่งช่วยประหยัดเวลาและปลอดภัยกว่าการไล่หาเองในระบบขนาดใหญ่

1. วิธีตรวจสอบโค้ดที่อาจติด Deprecated ก่อนอัปเกรด
คุณสามารถเลือกใช้เครื่องมือยอดนิยม 3 ตัวนี้ ตามความเหมาะสมของโปรเจกต์:
🛠️ เครื่องมือที่ 1: PHPStan (แนะนำสำหรับการหาบัคและเรื่องทั่วไป)
เครื่องมือ Static Analysis ยอดนิยมที่สามารถเช็คประเภทข้อมูล (Type) และการใช้ฟังก์ชันหรือฟีเจอร์ที่ล้าสมัย
  • วิธีติดตั้ง:
    bash
    composer require --dev phpstan/phpstan
    
    ใช้โค้ดอย่างระมัดระวัง
  • วิธีใช้งาน: รันเพื่อวิเคราะห์โฟลเดอร์ src
    bash
    vendor/bin/phpstan analyse src --level 0
    
    ใช้โค้ดอย่างระมัดระวัง
    (คุณสามารถเพิ่มระดับ Level จาก 0 ไปถึง 9 เพื่อความเข้มงวดในการตรวจจับ)
🛠️ เครื่องมือที่ 2: Rector (แนะนำสำหรับการเตรียมอัปเกรดเวอร์ชันโดยเฉพาะ)
Rector ไม่เพียงแต่ตรวจจับ แต่ยังสามารถปรับแก้โค้ดให้อัตโนมัติ (Automated Refactoring) ให้เข้ากับ PHP เวอร์ชันใหม่ได้ด้วย
  • วิธีติดตั้ง:
    bash
    composer require --dev rector/rector
    
    ใช้โค้ดอย่างระมัดระวัง
  • วิธีใช้งาน: สร้างไฟล์คอนฟิกเพื่อทดสอบว่ามีโค้ดส่วนไหนต้องแก้สำหรับ PHP 8.4 (ใช้คำสั่ง --dry-run เพื่อดูรายงานโดยยังไม่แก้ไขไฟล์จริง)
    bash
    vendor/bin/rector process src --dry-run
    
    ใช้โค้ดอย่างระมัดระวัง
🛠️ เครื่องมือที่ 3: PHP_CodeSniffer + PHPCompatibility
ใช้เพื่อตรวจเช็คความเข้ากันได้ของโค้ด (Compatibility) ระหว่างเวอร์ชันเก่าและใหม่โดยตรง
  • วิธีติดตั้ง:
    bash
    composer require --dev squizlabs/php_codesniffer wimg/php-compatibility
    
    ใช้โค้ดอย่างระมัดระวัง
  • วิธีใช้งาน: ตั้งค่าเวอร์ชันเป้าหมาย (เช่น 8.4) แล้วรันตรวจโค้ด
    bash
    vendor/bin/phpcs --config-set testVersion 8.4
    vendor/bin/phpcs -p src --standard=PHPCompatibility
    
    ใช้โค้ดอย่างระมัดระวัง

2. แนวทางการวางแผนย้ายไป PHP 8.4 หรือ 8.5
เพื่อให้ระบบของคุณทำงานได้อย่างต่อเนื่องและไม่เกิด Down-time ควรแบ่งขั้นตอนการทำงานดังนี้:
  • ตรวจสอบ Dependencies: เช็คไฟล์ composer.json และไลบรารีภายนอก (เช่น Laravel, Symfony หรือ Extension ต่างๆ) ว่ารองรับ PHP 8.4/8.5 แล้วหรือยัง หากยังไม่รองรับ ให้วางแผนอัปเดตไลบรารีเหล่านั้นก่อน
  • เปิดบันทึก Deprecation Logs บนโปรดักชัน: ในไฟล์ php.ini ให้ตั้งค่าเพื่อบันทึกแจ้งเตือนโดยไม่ให้แสดงผลบนหน้าจอผู้ใช้ เพื่อเก็บข้อมูลพฤติกรรมของโค้ดในสถานการณ์จริง
    ini
    error_reporting = E_ALL
    display_errors = Off
    log_errors = On
    error_log = /var/log/php_errors.log
    
    ใช้โค้ดอย่างระมัดระวัง
  • ทำ Docker สภาพแวดล้อมจำลอง (Staging/Local): รันโปรเจกต์บน PHP 8.4 หรือ 8.5 ในเครื่องคอมพิวเตอร์ของคุณหรือบน Server ทดสอบ เพื่อทำการทดสอบระบบทั้งหมด (Manual & Automated Testing) ก่อนใช้งานจริง
  • อัปเกรดแบบทีละขั้น (Step-by-Step): ขยับจาก PHP 8.3 ไป 8.4 ให้เสร็จสิ้นและเสถียรก่อน แล้วจึงค่อยวางแผนขยับไป PHP 8.5 ต่อไป ไม่ควรข้ามเวอร์ชันยาวๆ ในครั้งเดียวหากระบบมีขนาดใหญ่
โปรเจกต์ของคุณใช้งาน Framework ตัวไหนอยู่หรือไม่ (เช่น Laravel, Symfony, WordPress) หรือเป็น คัสตอมโค้ด (Vanilla PHP) เพื่อที่ผมจะได้แนะนำฟังก์ชันเฉพาะที่ถูกยกเลิกใน PHP 8.4 สำหรับระบบนั้นๆ ให้ครับ
ERROR: the "PHPCompatibility" coding standard is not installed. The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz and Zend
เหตุการณ์นี้เกิดขึ้นเพราะ PHP_CodeSniffer (phpcs) ยังไม่รู้จักโฟลเดอร์ของ PHPCompatibility ที่เพิ่งติดตั้งผ่าน Composer ครับ คุณต้องทำการเชื่อมต่อ (Register) ให้รู้จักมาตรฐานนี้ก่อน
วิธีการแก้ไข สามารถเลือกทำได้ 2 วิธีดังนี้ครับ (แนะนำวิธีที่ 1 สะดวกที่สุด)
วิธีที่ 1: ใช้เครื่องมืออัตโนมัติ (แนะนำ)
ติดตั้งแพ็กเกจเพิ่มอีกตัวเพื่อให้ระบบจัดการจับคู่โครงสร้างมาตรฐาน (Standard Paths) ให้โดยอัตโนมัติ
  1. รันคำสั่งติดตั้งตัวจัดการผ่าน Terminal:
    bash
    composer require --dev dealerdirect/phpcodesniffer-composer-installer
    
    ใช้โค้ดอย่างระมัดระวัง
  2. เมื่อระบบถามการอนุญาตการทำงานของปลั๊กอิน (ถ้ามี) ให้ตอบ y (yes)
  3. ทดสอบตรวจสอบรายชื่ออีกครั้ง:
    bash
    vendor/bin/phpcs -i
    
    ใช้โค้ดอย่างระมัดระวัง
    คุณควรจะเห็นคำว่า PHPCompatibility เพิ่มเข้ามาในรายชื่อแล้ว

วิธีที่ 2: ตั้งค่า Path ด้วยตัวเอง (Manual)
หากไม่ต้องการติดตั้งปลั๊กอินเพิ่ม คุณสามารถบอก phpcs โดยตรงว่าโฟลเดอร์ของ PHPCompatibility อยู่ที่ไหน
  1. รันคำสั่งนี้เพื่อผูกโฟลเดอร์เข้าด้วยกัน:
    • สำหรับ Mac / Linux:
      bash
      vendor/bin/phpcs --config-set installed_paths vendor/wimg/php-compatibility
      
      ใช้โค้ดอย่างระมัดระวัง
    • สำหรับ Windows (Command Prompt / PowerShell):
      cmd
      vendor\bin\phpcs --config-set installed_paths vendor\wimg\php-compatibility
      
      ใช้โค้ดอย่างระมัดระวัง
  2. ทดสอบตรวจสอบรายชื่ออีกครั้ง:
    bash
    vendor/bin/phpcs -i
    
    ใช้โค้ดอย่างระมัดระวัง

เมื่อทำตามวิธีใดวิธีหนึ่งเสร็จแล้ว คุณก็จะสามารถเริ่มตรวจสอบโค้ดเพื่อเตรียมพร้อมสำหรับ PHP 8.4 ด้วยคำสั่งเดิมได้ทันทีครับ:
bash
vendor/bin/phpcs -p src --standard=PHPCompatibility --runtime-set testVersion 8.4
ใช้โค้ดอย่างระมัดระวัง
หลังจากทำตามแล้ว สามารถแสดงรายชื่อ PHPCompatibility ผ่านคำสั่ง phpcs -i ได้สำเร็จไหมครับ? หรือหากติดขัดตรงขั้นตอนไหน แจ้งเพิ่มเติมได้เลยนะครับ!