[英]PHP - adapt url links from external php files
假設我有以下目錄上下文:
.
├── index.php
├── other.php
├── nav.php
└── subfolder
└── foo.php
我的nav.php為網站的每個頁面都包含一個簡單的nav元素,例如
<nav>
<ul>
<li><a href="index.php">Main</a></li>
<li><a href="other.php">Another</a></li>
</ul>
</nav>
現在,由於我的nav php文件具有通用性,因此我希望能夠在我的網站的子文件夾(如foo.php)中的php文件中使用它。 問題是,在foo.php中包含nav.php不會給我例外的結果,因為php代碼只是復制粘貼到foo中,URL鏈接是相對的,服務器找不到文件index.php和other.php。
我不能在$ _SERVER [“ DOCUMENT_ROOT”]中使用絕對路徑,因為我的網站存儲在大學服務器上,每個學生的網站都位於個人文件夾中,並帶有從實際服務器根目錄到學生文件夾的符號鏈接。 因此,如果我嘗試獲取真實的絕對路徑,則服務器會嘗試使用符號鏈接來訪問它,而不理解它。
我試圖使用一種不同的方法,即計算網站URL的基數(從任何文件夾中),然后顯式地要求使用雙斜杠語法('//'+ base +'index.php')進行絕對鏈接。 這種方法的問題雖然有效,但被迫讓每個php文件定義一個存儲此基本url的全局變量,或者使單個php文件具有如此大的定義並將其包含在任何php文件中。
我發現最后一個解決方案很臟,很亂,在任何情況下都不可靠。 所以我問是否有一種php本機的方法(即在包含文件時處理相對路徑)。
對於尋求快速修復的人,您可以:遞歸搜索索引文件,然后在URL中添加該深度。
<?php
$level = "";
while (file_exists("..") && !file_exists($level . "index.php")) {
$level = $level . "../";
}
?>
<nav class="col-3">
<ul>
<li><a href="<?php echo $level . 'index.php'; ?>">HOME</a></li>
<li><a href="<?php echo $level . 'query.php'; ?>">REQUÊTE</a></li>
<li><a href="<?php echo $level . 'view.php'; ?>">VISUALISATION</a></li>
</ul>
</nav>
此替代方法的主要優點是,它只需要三行代碼,並且如果您要查找位於網站層次結構頂部的文件,則可以很好地工作。 但是不幸的是,它不能滿足所有需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.