PHP中include引用導致不能再次相對引用文件的一個小問題


今天遇到一個問題: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__   //dirname(__FILE__)和__DIR__一樣一樣的
    );
    var_dump($pathsarr);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM