標籤:檔案名稱 function elf 字串 request 返回 請求 lan 地址
今天遇到一個問題:php,incldue_once引入多次檔案,多層引用,所以,不同目錄下的檔案要使用一個檔案得先確定目錄,比如(下例是提取出來的精簡例子,組織的有點亂亂的):
/homepage/index.php檔案include引入了/homepage/temp1/index.php
首頁檔案(/homepage/temp1/index.php)以及 列表檔案(/homepage/temp1/news_list.php)
都引入了一個top.php檔案,裡面需要訪問homepage下的a.png檔案,現在需要不通過絕對路徑,通過相對路徑訪問,但是
首頁檔案(/homepage/temp1/index.php)是通過/homepage/index.php訪問的,$_SERVER["PHP_SELF"] 輸出:/blog/Homepage/index.php
列表檔案(/homepage/temp1/news_list.php)是通過/homepage/temp1/news_list.php訪問的,$_SERVER["PHP_SELF"] 輸出:/blog/Homepage/temp1/news_list.php
現在如果有變數可以直接鎖定到固定的目錄下就Ok了,
function chdirdir(){//鎖定homepage $dir=dirname($_SERVER["PHP_SELF"]); while(strpos($dir,‘temp‘)!==false){ $dir=dirname($dir); } return $dir;}
判斷路徑中有沒有temp字串,有就去掉/後取上級...
現在在首頁和列表都可以如此調用:
$dirx=chdirdir();echo "<img src=$dirx/a.png>";
雖然dirname()介紹為:本函數返回去掉檔案名稱後的目錄名。但是發現它可以每次取/後面字元以達到取到目錄效果,這裡用了這個小bug或者feature。
p.s.還是用架構好,這次這個領導又一意孤行的要逼死誰要用原生的。TP用習慣了這次在原生裡還寫了類似的U方法,不過比TP的弱多了,其實有點像ajax執行方式。
本來想用chdir(),可能不會用,最後也沒用上。
通過 php應用路徑變數問題總結 整理了一個輸出路徑的函數,
function paths(){ $pathsarr=array( ‘當前請求的 Host:‘=>$_SERVER["HTTP_HOST"], ‘請求執行檔案的相對位址:‘=>$_SERVER["PHP_SELF"], ‘實際執行檔案相對位址:‘=>$_SERVER["SCRIPT_NAME"], ‘實際執行檔案的絕對路徑:‘=>$_SERVER["SCRIPT_FILENAME"], ‘實際執行代碼的絕對路徑:‘=>__FILE__, ‘url請求中包括/和之後的所有內容:‘=>$_SERVER["REQUEST_URI"], ‘url請求中?之後的內容:‘=>$_SERVER["QUERY_STRING"], ‘主目錄:‘=>$_SERVER["DOCUMENT_ROOT"], ‘請求執行檔案的的檔案名稱:‘=>basename($_SERVER["PHP_SELF"]), ‘實際執行檔案的檔案名稱:‘=>basename($_SERVER["SCRIPT_NAME"]), ‘實際執行檔案的檔案名稱:‘=>basename($_SERVER["SCRIPT_FILENAME"]), ‘實際執行代碼的檔案名稱:‘=>basename(__FILE__), ‘請求執行檔案的的所在目錄:‘=>dirname($_SERVER["PHP_SELF"]), ‘實際執行檔案的所在目錄:‘=>dirname($_SERVER["SCRIPT_NAME"]), ‘實際執行檔案的所在目錄:‘=>dirname($_SERVER["SCRIPT_FILENAME"]), ‘實際執行代碼的所在目錄:‘=>dirname(__FILE__), ‘dir:‘=>__DIR__ ); var_dump($pathsarr);}
PHP中include引用導致不能再次相對參照檔案的一個小問題