首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 計算兩個檔案相對路徑的函數實作

     編輯:PHP 綜合知識

在建立動態連結、資源引用時,常需根據兩個絕對路徑計算相對路徑。以下為可直接使用的函數實作。

<?php
/**
 * 計算 $targetPath 相對於 $basePath 的相對路徑
 * @param string $basePath   基準路徑(如 /var/www/project/a.js)
 * @param string $targetPath 目標路徑(如 /var/www/project/js/b.js)
 * @return string 相對路徑(如 ../js/b.js)
 */
function getRelativePath($basePath, $targetPath)
{
    // 統一路徑分隔符並移除檔名
    $baseDir   = rtrim(dirname($basePath), '/') . '/';
    $targetDir = rtrim(dirname($targetPath), '/') . '/';
    $targetFile = basename($targetPath);

    // 分割成陣列
    $baseParts   = explode('/', $baseDir);
    $targetParts = explode('/', $targetDir);

    // 找出共同前綴
    $commonLen = 0;
    while (
        isset($baseParts[$commonLen]) &&
        isset($targetParts[$commonLen]) &&
        $baseParts[$commonLen] === $targetParts[$commonLen]
    ) {
        $commonLen++;
    }

    // 建構相對路徑:../ 回到共同祖先
    $relative = '';
    for ($i = $commonLen; $i < count($baseParts); $i++) {
        $relative .= '../';
    }

    // 加上目標路徑剩餘部分
    for ($i = $commonLen; $i < count($targetParts); $i++) {
        $relative .= $targetParts[$i] . '/';
    }

    return $relative . $targetFile;
}

// 使用範例
$file1 = 'aaa/ddd/ccc/ddd/test/a.js';
$file2 = 'aaa/ddd/ccc/ddd/test/b.js';
echo getRelativePath($file1, $file2); // 輸出:b.js(同目錄)

$file3 = 'aaa/bbb/ccc/d.php';
$file4 = 'aaa/eee/fff/g.php';
echo getRelativePath($file3, $file4); // 輸出:../../eee/fff/g.php
?>

函數特點

  • 支援任意深度目錄結構。
  • 自動處理同目錄、父目錄、跨分支等情況。
  • 回傳標準相對路徑,可直接用於 HTML src、href、CSS url() 等。

進階建議

專案中建議封裝為工具類,並加入單元測試覆蓋邊界情況(根目錄、同檔名不同目錄、含符號連結等)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved