GyaanSetu PHP

PHP, Laravel และ WordPress

36 articlesDeep, practical knowledge

Laravel 13.31 เปิดตัว Interruptible Jobs เพื่อป้องกันปัญหา Task ถูกสั่งหยุดระหว่างการ Deployment

การอัปเดตนี้มีการเพิ่ม Interruptible contract ที่ Job สามารถนำไปใช้งานได้ โดยเมื่อได้รับสัญญาณ SIGTERM ทาง Laravel จะทำการตั้งค่า flag และเรียกใช้ method interrupted() ของ Job เพื่อให้โค้ดสามารถทำงานในลูปปัจจุบันให้เสร็จสิ้น, ทำการ Rollback การเปลี่ยนแปลง หรือทำ Checkpoint ก่อนที่จะจบการทำงาน

PHP · 4 min read

เปลี่ยนจาก ‘new’ มาใช้ Factories: วิธีเพิ่มความสามารถในการทดสอบให้กับ Laravel Controllers

ด้วยการย้ายการสร้างออบเจกต์ไปยัง factory ที่กำหนดไว้โดยเฉพาะ Laravel controllers จะไม่ต้องเรียกใช้ `new` โดยตรงอีกต่อไป ช่วยให้การสร้างออบเจกต์รวมศูนย์อยู่ที่เดียว และทำให้โค้ดขยายต่อ ทดสอบ และดูแลรักษาได้ง่ายขึ้นมากเมื่อโปรเจกต์มีขนาดใหญ่ขึ้น

PHP · 4 min read

วิธีที่ Laravel Queues ช่วยป้องกันการหมดเวลา (Timeout) ของ Telegram Bot และการอัปเดตซ้ำซ้อน

คู่มือนี้จะแสดงวิธีการตรวจสอบความถูกต้องของ header X-Telegram-Bot-Api-Secret-Token ของ Telegram ด้วย Laravel middleware, การจัดเก็บ update_id แต่ละรายการลงใน Redis โดยใช้ NX flag และการส่งงานเข้าคิว (queued job) ทันที เพื่อให้การตอบกลับ HTTP เสร็จสิ้นภายในไม่กี่วินาที

PHP · 2 min read

การรันโค้ดจากระยะไกล (Remote Code Execution) ช่วยให้ใครก็ได้สามารถเข้าควบคุมเว็บไซต์ WordPress ขององค์กรการกุศลผ่าน GiveWP

ช่องโหว่นี้เกิดจากการเชื่อมโยงกันระหว่าง unsafe deserialization, blind re-deserialization และ TCPDF gadget เพื่อรันคำสั่งใดๆ ก็ตามได้โดยไม่ต้องเข้าสู่ระบบ การอัปเดตเป็นเวอร์ชัน 4.16.7.2 จะทำการตัดการเชื่อมต่อทั้งหมดและรันกระบวนการ migration เพื่อล้าง payload ที่ตกค้างอยู่

PHP · 3 min read

ข้อมูลรั่วไหลของ CoopCycle เผยที่อยู่ลูกค้าหลายพันรายผ่านช่องโหว่ของ GET Endpoint ที่ไม่มีการตรวจสอบ

การขาดการกำหนดค่าความปลอดภัยบน endpoint `/api/stores/{id}/addresses` ทำให้ผู้ใช้ CoopCycle ที่ผ่านการยืนยันตัวตนสามารถไล่ดูไอดีของร้านค้าเพื่อเก็บรวบรวมชื่อ-นามสกุล ที่อยู่ และรหัสไปรษณีย์ ซึ่งส่งผลกระทบต่อความเป็นส่วนตัวของสหกรณ์หลายแห่ง

PHP · 3 min read

การถอนการติดตั้ง PrestaShop อาจลบการตั้งค่าของโมดูลอื่นผ่านตาราง Config ที่ใช้ร่วมกัน

จากการตรวจสอบโมดูล PrestaShop สาธารณะ 57 โมดูล พบว่าการใช้คีย์การตั้งค่าที่ไม่มีการระบุ namespace และการเรียกใช้ Configuration::deleteByName อย่างไม่ระมัดระวัง ทำให้ขั้นตอนการถอนการติดตั้งของโมดูลหนึ่งไปลบการตั้งค่าของส่วนขยายอื่นที่ไม่เกี่ยวข้อง ซึ่งสร้างความสับสนให้กับผู้ประกอบการ

PHP · 4 min read

เลิกมองข้าม Deprecations: Shopware แยก @deprecated ออกจากการปรับแต่ง API

Shopware 6.7.14.0 เพิ่ม namespace ของ attribute BC-Change ใหม่ เพื่อแยกการยกเลิกการใช้งาน (deprecations) ที่สำคัญออกจากเพียงการปรับแต่ง API ทั่วไป ช่วยให้นักพัฒนาสามารถจัดการกับคำเตือน CallSiteCompatibilityChange และ ExtenderCompatibilityChange ได้อย่างตรงจุดก่อนการเปิดตัวเวอร์ชัน 6.8

PHP · 1 min read

นักบัญชีที่มีสิทธิ์อ่านอย่างเดียวสามารถยกเลิกใบแจ้งหนี้ใน Akaunting ได้ จนกระทั่งมีการออกแพตช์ 3.2.0

ผู้ใช้ที่มีสิทธิ์อ่านอย่างเดียวสามารถเรียกใช้งาน endpoint 'markCancelled' ที่ไม่ได้ระบุไว้ในเอกสารผ่านคำขอแบบ GET ซึ่งส่งผลให้ข้อมูลการชำระเงินถูกลบและทำให้เส้นทางการตรวจสอบ (audit trails) เสียหาย บั๊กนี้เกิดจากการที่รายการอนุญาต (allowlist) ไม่ได้รวมวิธีการเปลี่ยนสถานะเอาไว้ และได้รับการแก้ไขแล้วในเวอร์ชัน 3.2.0

PHP · 2 min read

Laravel 13 แทนที่ $fillable, $table และ $casts ด้วย Native PHP Attributes

Laravel 13 เปิดตัว PHP attributes แบบ built-in สำหรับการกำหนดค่า Model ช่วยให้คุณเปลี่ยนจากการใช้ property แบบเดิมอย่าง $table, $fillable และ $casts มาเป็นการใช้ annotation ที่มีการระบุประเภท (typed) และทำงานผ่าน reflection ได้ โดยไม่ส่งผลกระทบต่อโค้ดเดิมที่มีอยู่

PHP · 4 min read

บล็อก wp-cron.php ที่ระดับเซิร์ฟเวอร์เพื่อประหยัด PHP Workers และป้องกันปัญหา CPU พุ่งสูง

การตั้งค่า DISABLE_WP_CRON = true เป็นเพียงการหยุดไม่ให้ WordPress ทำการส่ง loopback request ของตัวเองเท่านั้น แต่ URL ของ wp-cron.php ยังคงสามารถเข้าถึงได้ และอาจถูกโจมตีอย่างหนักจากผู้ไม่หวังดี ซึ่งจะทำให้ PHP workers หมดลงและก่อให้เกิดปัญหา Denial-of-Service บน Shared Hosting

PHP · 4 min read

การแพตช์ InvoiceShelf ปิดช่องโหว่ระดับ 8.7 คะแนน ที่เปิดโอกาสให้เจ้าของระบบสามารถเข้ายึดบัญชีผู้เช่ารายอื่นได้

ช่องโหว่นี้มีสาเหตุมาจากการทำ route-model binding ของ Laravel และการขาดการตรวจสอบขอบเขตของผู้เช่า (tenant-scope check) ซึ่งเปิดโอกาสให้เจ้าของระบบสามารถร้องขอ ID ของผู้ใช้รายใดก็ได้เพื่อเขียนทับข้อมูลประจำตัว ส่งผลให้บัญชีของผู้เสียหายถูกย้ายไปยังบริษัทของผู้โจมตีได้อย่างสมบูรณ์

PHP · 2 min read

นักพัฒนา Magento ลดการเรียกใช้ DB จาก 300 เหลือ 1 ครั้ง แต่สินค้าที่หมดสต็อกกลับหายไป

การเปลี่ยนจากการเรียกใช้ repository 300 ครั้งต่อหนึ่งผลิตภัณฑ์ มาเป็นการใช้ collection query เพียงครั้งเดียวช่วยลดจำนวนการ query ลงอย่างมหาศาล แต่ตัวกรองสต็อกที่มีมาให้ในตัวของ Magento กลับคัด SKU ที่มีจำนวนเป็นศูนย์ออกทั้งหมด ทำให้ลูกค้าต้องพบกับแคตตาล็อกสินค้าที่ไม่สมบูรณ์

PHP · 3 min read

นักพัฒนาเสียเวลาหลายชั่วโมงกับหน้ายืนยันอีเมลของ WP – นี่คือวิธีแก้ด้วยโค้ดเพียงบรรทัดเดียว

ตั้งแต่ WP 5.3 เป็นต้นมา หน้าการยืนยันอีเมลผู้ดูแลระบบจะปรากฏขึ้นทุกๆ ไม่กี่เดือน ทำให้การรัน Playwright แบบ unattended ต้องรอปุ่มที่ไม่เคยแสดงขึ้นมา การเพิ่มการตรวจสอบ URL อย่างรวดเร็วและคลิก “I’ll wait” จะช่วยให้การทำงานอัตโนมัติกลับมาทำงานได้อย่างแม่นยำและคาดการณ์ได้อีกครั้ง

PHP · 3 min read

Etcd ลดข้อผิดพลาดในการกำหนดเส้นทางวิดีโอใน APAC เหลือเพียง 1 วินาที ยุติปัญหาการส่งข้อมูลผิดพลาดระหว่างโซลและโตเกียว

ด้วยการย้ายข้อมูลการกำหนดเส้นทางเฉพาะภูมิภาคไปยัง etcd โดยใช้ watch, lease และ CAS primitives ทำให้แพลตฟอร์มสามารถส่งการเปลี่ยนแปลงไปยังเราเตอร์ทั้งแปดตัวได้ภายในเวลาประมาณหนึ่งวินาที นอกจากนี้ยังมี Go sidecar ขนาดเล็กที่ทำหน้าที่เขียนการตั้งค่าลงใน shared memory ช่วยให้ PHP สามารถตอบสนองคำขอด้วยการอ่านข้อมูลที่มีความหน่วงเป็นศูนย์ (zero-latency)

PHP · 4 min read

Croatia’s 2026 E-Invoice Rule Forces PHP Apps to Rewrite 62 Validation Rules

From 1 January 2026 every B2B transaction in Croatia must pass a Schematron file written in XSLT 2.0, but PHP’s built-in libxslt only supports XSLT 1.0. Developers must either add a native Saxon-C extension, call an external service, or re-code the 62 checks in PHP to keep invoicing alive.

PHP · 4 min read

วิธีที่ Edge-Side Includes ช่วยลดการโหลดหน้าเพจยอดนิยมจาก 4,000 เหลือเพียง <50 คิวรีต่อนาที

ทีมงานได้แบ่งหน้าแรกออกเป็น 3 ส่วน ได้แก่ ตารางวิดีโอ, ตัวสลับภาษา และส่วนหัวแบบสด โดยใช้ค่า Varnish TTL ที่ 60 วินาที, 24 ชั่วโมง และแบบไม่เก็บแคช พร้อมทั้งตัดคุกกี้ออกจากส่วนที่ไม่ระบุตัวตน และใช้ surrogate keys เพื่อให้สามารถล้างแคชได้ทันที

PHP · 3 min read

นโยบาย Noindex ของทีม SEO เมื่อมีรายการน้อยกว่า 3 รายการ ทำให้หน้าหมวดหมู่หายวับไปกับตา

ตาราง ‘seo_unlocks’ ใหม่จะบันทึกช่วงเวลาแรกที่หมวดหมู่มีรายการที่ใช้งานอยู่ครบ 3 รายการ เพื่อให้หน้านั้นสามารถถูกทำดัชนี (index) ได้อย่างถาวร ซึ่งจะช่วยป้องกันปัญหาเดิมที่หน้าเว็บเคยหายไปจาก Google และต้องใช้เวลาหลายสัปดาห์กว่าจะกลับมาติดอันดับได้อีกครั้ง

PHP · 3 min read

การใช้ดัชนีคู่ OpenSearch-SQLite ช่วยแก้ปัญหาผลลัพธ์ว่างเปล่าสำหรับผู้ใช้ตัวอักษรละตินได้อย่างไร

ด้วยการส่งคำค้นหาผ่านฟิลด์ Latin แบบ fuzzy และ CJK bigram analyzer ของ OpenSearch เป็นอันดับแรก แล้วจึงสลับไปใช้ SQLite FTS5 เมื่อเกิด timeout ทำให้ทีมงานสามารถลดอัตราการไม่พบผลลัพธ์ลงเหลือเพียง 2.1% โดยไม่เกินเพดานความหน่วงที่ 20 มิลลิวินาที

PHP · 4 min read

Cloudflare Workers ช่วยลดการใช้ CPU ในการสร้าง Thumbnail ของเว็บไซต์วิดีโอลงจนเหลือศูนย์

ด้วยการย้ายการสร้าง Thumbnail ไปยัง Cloudflare Workers แพลตฟอร์มโฮสต์วิดีโอนี้สามารถกำจัดภาระการประมวลผลรูปภาพทั้งหมดออกจากเซิร์ฟเวอร์ต้นทาง บรรลุอัตรา Edge Cache Hit Rate ที่ 96% และสามารถส่งมอบการตอบสนองของรูปภาพได้ภายในเวลาไม่ถึงหนึ่งวินาทีทั่วโลกอย่างสม่ำเสมอ

PHP · 3 min read