備忘錄_20160105(定位) 修改 回首頁

程式 2023-03-23 10:24:47 1679538287 100
php 取得當前的位置,不論是以 web url(相對位址) 或是 os filesystem(絕對位址)

php 取得當前的位置,不論是以 web url(相對位址) 或是 os filesystem(絕對位址)

假定

http://localhost:8080/xyz/a.php
http://localhost:8080/xyz/pqr/b.php

/var/www/html/xyz/a.php
/var/www/html/xyz/pqr/b.php

a.php 引入(include) b.php

則

在 a.php 用 pathinfo($_SERVER["REQUEST_URI"])['dirname'] 會出現 /xyz
在 b.php 用 pathinfo($_SERVER["REQUEST_URI"])['dirname'] 會出現 /xyz (以最源頭呼叫的程式為主)

在 a.php 用 dirname(__FILE__) 會出現 /var/www/html/xyz
在 b.php 用 dirname(__FILE__) 會出現 /var/www/html/xyz/pqr

若考量 windows、linux、斜線、反斜線、根目錄、子目錄 等情形,則用下面語法,應該可以把最後的斜線也給加上去。
若考量到 unicode 的問題,則 str_replace 大概就要用別的函式替代。
$strBaseUrl=str_replace("//","/",str_replace("\\","/",pathinfo($_SERVER["REQUEST_URI"])['dirname']) . "/");
$strBaseSys=str_replace("//","/",str_replace("\\","/",dirname(__FILE__)) . "/");