GyaanSetu PHP

PHP, Laravel และ WordPress

28 articlesDeep, practical knowledge

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

TrendVidStream Swaps 30-Day JWTs for Single-Use Refresh Tokens After Hack

A partner SDK cached a 30-day JWT in plain text, letting an attacker replay it from abroad. The breach forced TrendVidStream to replace long-lived JWTs with 15-minute access tokens and single-use refresh tokens that trigger immediate revocation on reuse.

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

การตลาดอัตโนมัติแบบโอเพนซอร์สไม่จำเป็นต้องหมายถึงการยอมยกข้อมูลของคุณให้กับผู้ให้บริการ SaaS โดย Mautic ช่วยให้การทำแคมเปญอีเมล

การตลาดอัตโนมัติแบบโอเพนซอร์สไม่จำเป็นต้องหมายถึงการยอมยกข้อมูลของคุณให้กับผู้ให้บริการ SaaS โดย Mautic ช่วยให้คุณสามารถจัดการแคมเปญอีเมล การติดตามผู้ติดต่อ และการฟูมฟักลีด (lead nurturing) ได้ภายใต้การดูแลของคุณเอง...

PHP · 5 min read

หากคุณใช้เวลาหลายปีในการดูแลรักษา business logic ภายในแอปพลิเคชัน PHP การดูบทเรียน Model Context Protocol อาจ

หากคุณใช้เวลาหลายปีในการดูแลรักษา business logic ภายในแอปพลิเคชัน PHP การดูบทเรียน Model Context Protocol อาจให้ความรู้สึกเหมือนกำลังยืนอยู่หน้าประตูที่ถูกล็อคไว้ แทบทุกคู่มือ...

PHP · 7 min read

PHP จัดการงานที่ต้องทำซ้ำๆ จำนวนมากในฝั่งเซิร์ฟเวอร์ การร้องขอเพียงครั้งเดียวอาจต้องสแกนโฟลเดอร์ที่เต็มไปด้วยรูปภาพ, po

PHP จัดการงานที่ต้องทำซ้ำๆ จำนวนมากในฝั่งเซิร์ฟเวอร์ การร้องขอเพียงครั้งเดียวอาจต้องสแกนโฟลเดอร์ที่เต็มไปด้วยรูปภาพ, ตรวจสอบฐานข้อมูลจนกว่าสถานะจะเปลี่ยน หรือถามผู้ใช้ซ้ำๆ...

PHP · 6 min read

Your file exists() Is Secretly a Network Call

Your file exists() Is Secretly a Network Call You write this line a thousand times: if ( file exists( $path ) ) { It looks safe. It looks fast. But if $path points to an S3 bucket…

PHP · 2 min read

PHP เพิ่ม Polling API แบบ Native ช่วยให้ Fibers ทำงานได้เร็วระดับ OS

Polling API ที่เพิ่งรวมเข้ามาใหม่นี้จะครอบคลุม epoll, kqueue และ IOCP ช่วยให้ event loop สามารถสั่ง resume fibers ได้ด้วยการเรียกใช้ system call เพียงครั้งเดียว ผลการทดสอบแสดงให้เห็นว่า overhead ของการทำงานแบบ concurrency ลดลงจนเหลือศูนย์ และการใช้งาน CPU ยังคงคงที่แม้จะมี stream จำนวนมากก็ตาม

PHP · 3 min read

Optistream รวม 12 ปลั๊กอิน WordPress เข้าเป็นหนึ่งเดียว โดยไม่สูญเสีย SEO ใน 1,000 หน้า

ทีมงานได้สร้าง bootstrap loader ขนาดเล็ก, กำหนดขอบเขต CSS ทั้งหมด, คงค่า meta keys ไว้โดยไม่เปลี่ยนแปลง และตรวจสอบทุก URL ด้วยรายการตรวจสอบที่เข้มงวดหลังจากการสลับโมดูลแต่ละครั้ง เพื่อให้มั่นใจว่าจะไม่มีการลดลงของสถานะ 200, ลิงก์เสีย หรือความผิดพลาดของเลย์เอาต์

PHP · 4 min read