วิธีตรวจสอบโค้ดที่อาจติด 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(คุณสามารถเพิ่มระดับ Level จาก 0 ไปถึง 9 เพื่อความเข้มงวดในการตรวจจับ)bashvendor/bin/phpstan analyse src --level 0ใช้โค้ดอย่างระมัดระวัง
🛠️ เครื่องมือที่ 2: Rector (แนะนำสำหรับการเตรียมอัปเกรดเวอร์ชันโดยเฉพาะ)
Rector ไม่เพียงแต่ตรวจจับ แต่ยังสามารถปรับแก้โค้ดให้อัตโนมัติ (Automated Refactoring) ให้เข้ากับ PHP เวอร์ชันใหม่ได้ด้วย
- วิธีติดตั้ง:bash
composer require --dev rector/rectorใช้โค้ดอย่างระมัดระวัง - วิธีใช้งาน: สร้างไฟล์คอนฟิกเพื่อทดสอบว่ามีโค้ดส่วนไหนต้องแก้สำหรับ PHP 8.4 (ใช้คำสั่ง
--dry-runเพื่อดูรายงานโดยยังไม่แก้ไขไฟล์จริง)bashvendor/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ให้ตั้งค่าเพื่อบันทึกแจ้งเตือนโดยไม่ให้แสดงผลบนหน้าจอผู้ใช้ เพื่อเก็บข้อมูลพฤติกรรมของโค้ดในสถานการณ์จริงinierror_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) ให้โดยอัตโนมัติ
- รันคำสั่งติดตั้งตัวจัดการผ่าน Terminal:bash
composer require --dev dealerdirect/phpcodesniffer-composer-installerใช้โค้ดอย่างระมัดระวัง - เมื่อระบบถามการอนุญาตการทำงานของปลั๊กอิน (ถ้ามี) ให้ตอบ y (yes)
- ทดสอบตรวจสอบรายชื่ออีกครั้ง:คุณควรจะเห็นคำว่าbash
vendor/bin/phpcs -iใช้โค้ดอย่างระมัดระวังPHPCompatibilityเพิ่มเข้ามาในรายชื่อแล้ว
วิธีที่ 2: ตั้งค่า Path ด้วยตัวเอง (Manual)
หากไม่ต้องการติดตั้งปลั๊กอินเพิ่ม คุณสามารถบอก
phpcs โดยตรงว่าโฟลเดอร์ของ PHPCompatibility อยู่ที่ไหน- รันคำสั่งนี้เพื่อผูกโฟลเดอร์เข้าด้วยกัน:
- สำหรับ 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ใช้โค้ดอย่างระมัดระวัง
- สำหรับ Mac / Linux:
- ทดสอบตรวจสอบรายชื่ออีกครั้ง:bash
vendor/bin/phpcs -iใช้โค้ดอย่างระมัดระวัง
เมื่อทำตามวิธีใดวิธีหนึ่งเสร็จแล้ว คุณก็จะสามารถเริ่มตรวจสอบโค้ดเพื่อเตรียมพร้อมสำหรับ PHP 8.4 ด้วยคำสั่งเดิมได้ทันทีครับ:
bash
vendor/bin/phpcs -p src --standard=PHPCompatibility --runtime-set testVersion 8.4
ใช้โค้ดอย่างระมัดระวัง
หลังจากทำตามแล้ว สามารถแสดงรายชื่อ PHPCompatibility ผ่านคำสั่ง
phpcs -i ได้สำเร็จไหมครับ? หรือหากติดขัดตรงขั้นตอนไหน แจ้งเพิ่มเติมได้เลยนะครับ!