ใน PHP มีวิธีในตัวในการแก้ไขเส้นทางที่สัมพันธ์กับเส้นทางอื่นหรือไม่
ตัวอย่างเช่น เมื่อกำหนด $baseDir
dir: /home/ben/project
แล้ว $path
ต่อไปนี้ควรแก้ไขเป็น:
/foo/bar
→/foo/bar
../foo/bar
, →/home/ben/foo/bar
โซลูชั่นที่อยู่ในใจ:
การเปลี่ยนแปลงไดเร็กทอรีการทำงานปัจจุบันชั่วคราว และใช้
realpath()
:$currentDir = getcwd(); chdir($baseDir); $resolvedPath = realpath($path); chdir($currentDir); return $resolvedPath;
วิธีแก้ปัญหานี้ค่อนข้างน่าเบื่อ
ตรวจสอบว่าเส้นทางเป็นค่าสัมบูรณ์หรือไม่ หากไม่ใช่ ให้ใช้
realpath()
:if ($path[0] === '/') { return $path; } return realpath($currentDir . '/' . $path);
โซลูชันนี้ไม่ใช่ข้ามแพลตฟอร์ม การทำให้ข้ามแพลตฟอร์มได้อย่างปลอดภัยอาจไม่เป็นเรื่องเล็กน้อยอย่างที่คิด
สุดท้ายแต่ไม่ท้ายสุด realpath()
ส่งคืน false
เมื่อไม่มีเส้นทาง ซึ่งไม่ได้นำมาพิจารณาในโค้ดข้างต้น และอาจเกิดปัญหาในบางกรณีการใช้งาน
ฉันพลาดอะไรไปหรือเปล่า?
C:\
ไม่ใช่/
และฉันไม่แน่ใจเกี่ยวกับระบบปฏิบัติการอื่น ๆ - person BenMorel   schedule 01.08.2019/
ก็ทำงานบน Windows ได้เช่นกัน ปัญหาคือการตรวจสอบที่เชื่อถือได้ว่าเส้นทางเป็นแบบสัมบูรณ์หรือแบบสัมพัทธ์ - person BenMorel   schedule 01.08.2019