簡體   English   中英

PHP-調整來自外部php文件的URL鏈接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM