• July 27, 2026

    ต่างกันอย่างไร
    $db_path = “../../db.json”
    $db_path = DIR . “/../../db.json”;

    ทั้งสองบรรทัดให้ผลลัพธ์ “คล้ายกัน” แต่ความน่าเชื่อถือและการทำงานต่างกันมากครับ

    แบบที่ 1

    $db_path = "../../db.json";

    เป็น Relative Path (พาธสัมพัทธ์)

    หมายความว่า PHP จะหาตำแหน่งไฟล์โดยอิงจาก Current Working Directory (CWD) หรือโฟลเดอร์ที่สคริปต์กำลังรันอยู่ ไม่จำเป็นต้องเป็นโฟลเดอร์ที่ไฟล์นี้อยู่

    ตัวอย่าง

    project/
    │
    ├── db.json
    ├── admin/
    │   └── api/
    │       └── save.php

    สมมติ save.php มี

    $db_path = "../../db.json";

    ถ้าเรียก

    https://example.com/admin/api/save.php

    อาจจะเจอ db.json

    แต่ถ้าไฟล์นี้ถูก

    include "admin/api/save.php";

    จากไฟล์อื่นที่อยู่คนละตำแหน่ง

    index.php

    Current Working Directory อาจเปลี่ยน ทำให้

    ../../db.json

    ชี้ไปผิดที่ได้


    แบบที่ 2

    $db_path = __DIR__ . "/../../db.json";

    ใช้ Absolute Path ที่สร้างจากตำแหน่งของไฟล์ปัจจุบัน

    __DIR__

    คือ

    โฟลเดอร์ที่ไฟล์ PHP ไฟล์นี้อยู่จริง

    เช่น

    /home/user/public_html/admin/api

    ดังนั้น

    __DIR__ . "/../../db.json"

    จะกลายเป็น

    /home/user/public_html/db.json

    ไม่ว่าไฟล์นี้จะถูกเรียกจาก

    • Browser
    • include
    • require
    • cron
    • command line (CLI)

    ผลลัพธ์ก็จะเหมือนเดิมเสมอ


    ตัวอย่าง

    สมมติ

    public_html/
    │
    ├── db.json
    ├── index.php
    └── api/
        └── user/
            └── save.php

    ภายใน

    save.php

    ถ้าเขียน

    echo "../../db.json";

    PHP อาจมองเป็น

    public_html/../../db.json

    หรือ

    api/user/../../db.json

    ขึ้นกับว่า Current Working Directory คืออะไร

    แต่ถ้าใช้

    echo __DIR__ . "/../../db.json";

    จะได้

    /home/username/public_html/db.json

    แน่นอนทุกครั้ง


    ควรใช้อันไหน?

    แทบทุกกรณีควรใช้

    $db_path = __DIR__ . "/../../db.json";

    เพราะ

    • ✅ ไม่ขึ้นกับตำแหน่งที่เรียกไฟล์
    • ✅ ใช้กับ include และ require ได้ปลอดภัย
    • ✅ ลดปัญหา “หาไฟล์ไม่เจอ”
    • ✅ เป็นแนวทางที่นิยมใช้ในโปรเจกต์ PHP

    ผมเองแทบจะไม่ใช้ เดี่ยว ๆ แล้ว

    "../../db.json"

    เว้นแต่เป็นกรณีง่าย ๆ ที่มั่นใจว่า Current Working Directory จะไม่เปลี่ยนครับ



เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories


Uncategorized