สรุป
ตัวอย่างนี้สมมติว่าคุณรู้อยู่เสมอว่าโฟลเดอร์รูทของ apache อยู่ที่ '/ var / www /' และคุณกำลังพยายามค้นหาเส้นทางโฟลเดอร์ถัดไป (เช่น '/ var / www / my_website_folder') นอกจากนี้ยังใช้งานได้จากสคริปต์หรือเว็บเบราว์เซอร์ซึ่งเป็นสาเหตุที่มีรหัสเพิ่มเติม
รหัส PHP7
function getHtmlRootFolder(string $root = '/var/www/') {
// -- try to use DOCUMENT_ROOT first --
$ret = str_replace(' ', '', $_SERVER['DOCUMENT_ROOT']);
$ret = rtrim($ret, '/') . '/';
// -- if doesn't contain root path, find using this file's loc. path --
if (!preg_match("#".$root."#", $ret)) {
$root = rtrim($root, '/') . '/';
$root_arr = explode("/", $root);
$pwd_arr = explode("/", getcwd());
$ret = $root . $pwd_arr[count($root_arr) - 1];
}
return (preg_match("#".$root."#", $ret)) ? rtrim($ret, '/') . '/' : null;
}
ตัวอย่าง
echo getHtmlRootFolder();
เอาท์พุท:
/var/www/somedir/
รายละเอียด:
โดยทั่วไปก่อนอื่นให้พยายามรับ DOCUMENT_ROOT หากมี '/ var / www /' จากนั้นให้ใช้อีกวิธีหนึ่งรับ dir ปัจจุบัน (ซึ่งมีอยู่มากในโครงการ) และรับค่าพา ธ ถัดไปตามจำนวนพา ธ $ รูท หมายเหตุ: เพิ่มคำสั่ง rtrim เพื่อให้แน่ใจว่าพา ธ ส่งคืนที่ลงท้ายด้วย '/' ในทุกกรณี ไม่ได้ตรวจสอบว่าต้องมีขนาดใหญ่กว่า / var / www / แต่ยังสามารถส่งคืน / var / www / เป็นการตอบสนองที่เป็นไปได้