php อยากรู้ตำแหน่ง directory ที่แท้จริง

เวลาพัฒนาระบบบางครั้งต้องการทราบว่า php ที่กำลังเรียกใช้อยู่นี้วางอยู่ที่ไหนใน SERVER เพื่อเราจะได้กำหนด path ได้อย่างถูกต้อง เช่น การ include เอา function library หรือเพื่อนๆของมันเข้ามาทำงาน หรือจะประยุกต์ใช้กับการเก็บค่า path ลงในตัวแปรเพื่อให้โปรแกรมสามารถปรับตัวได้แม้นำไปอยู่ใน path อื่นๆที่ไม่ใช่ตำแหน่งเดิม หรือจดจำ path สำหรับ export ไฟล์ผลลัพธ์ก็แล้วแต่จะประยุกต์ใช้ครับ ทั้งนี้เพื่อจะลดความผิดพลาดเพราะเมื่อโปรแกรมโหลดส่วนประกอบมาไม่ครบจะทำงานไม่ได้หรือทำงานผิดพลาดไปจากที่ตั้งใจ ถึงตอนนั้นกว่าจะรู้บางครั้งก็เกิดความเสียหายไปแล้วนั่นเองครับ

สำหรับตัวอย่างนี้ก็ง่ายมากครับผมสร้าง code อย่างในกรอบนี้แล้วนำไปแทรกลงในไฟล์ที่เราจะเรียกใช้ มันก็จะคายผลออกมาเป็น path ในรูปแบบต่างๆให้คุณทราบนั่นเองครับ
<?php
   echo "\$_SERVER['PHP_SELF'] : ".$_SERVER['PHP_SELF'] . "<br/>\n";
   echo "dirname(\$_SERVER['PHP_SELF']) : ".dirname($_SERVER['PHP_SELF']) . "<br>\n";
   echo "back4_wwwroot : ".preg_replace('/\/[^\/]+/','../',dirname($_SERVER['PHP_SELF'])) . "<br/>\n";
   echo "pathof_wwwroot : ".realpath('./' .    preg_replace('/\/[^\/]+/','../',dirname($_SERVER['PHP_SELF'])))."<br/>\n";
   $wwwroot = realpath('./' . preg_replace('/\/[^\/]+/','../',dirname($_SERVER['PHP_SELF'])));
?>
ที่มา :
http://www.thaiadmin.org/board/index.php?topic=92711.0
http://www.thaicreate.com/php/forum/053757.html

พอดีอ่านไปอ่านมามีที่ thaiseo แนวคล้ายๆกันนะครับเลยจับมารวมไว้ด้วยกัน
<?php
   $reg = "";
   $deep = 1;   //ระดับความลึกต่างกันของไฟล์
   for($o=0; $o<$deep; $o++) $reg .= "/[^/]+";
   $path = preg_replace("#(".$reg.")$#", "", str_replace("\\", "/", dirname(__FILE__)));
   echo "path : ".$path."<br/>";
?>
ที่มา :http://www.thaiseoboard.com/index.php/topic,33976.0.html


สำหรับแบบสุดท้ายนี่ก็จัดว่ามีหลักการง่ายดีครับสร้าง ../ ขึ้นมาให้เท่ากับความลึกของ subdirectory
<?php
function dynRoot(){
   $levels = substr_count($_SERVER['PHP_SELF'],"/"); 
   for ($i=0; $i < $levels - 1; $i++){
      $relativeDir .= "../";
   }
   return $relativeDir;
}
$path = dynRoot();
?>
ที่มา : http://www.thaiseoboard.com/index.php/topic,33976.0.html


แต่เมื่อดูทั้งหมดแล้วหากจะประยุกต์ใช้กับการหา path เพื่อ include ผมแนะนำแบบนี้ครับ ^_^ ไม่อธิบายนะครับเพราะไม่ยาก และเพื่อให้ท่านได้ทบทวนความเข้าใจก่อนนำไปใช้ด้วยครับ
<?php
   $dir_root = preg_replace('/\/[^\/]+/','../',dirname($_SERVER['PHP_SELF'])); 
   $dir_include = $dir_root."include/"
   include $dir_include."config.inc.php"; 
   ...
   ...
   ... 
?>

จบแล้ว...ไว้เจอกันใหม่ตอนหน้า สวัสดีครับ

#20141125 อัพเดทครับ ไปๆมาๆเจอฟังก์ชั่น
  • getcwd();
  • dirname(__FILE__);
  • dirname($_SERVER['PHP_SELF']);
เขียนสั้นๆให้ผลลัพธ์ที่ตรงใจกว่าแฮะ ที่มา http://php.net/manual/en/function.dirname.php

แสดงความคิดเห็น

0 ความคิดเห็น