在日常開發中,我們經常需要對URL 進行解析,以提取其中的特定部分,例如協議、主機名、路徑或查詢參數等。而在某些場景下,我們可能只關心URL 中路徑部分所包含的“文件名”,比如資源地址中的圖片名稱、文檔名稱等。
在PHP 中,我們可以使用內置的parse_url函數將URL 拆解成各個部分,然後結合basename函數,從路徑中提取出我們想要的文件名。本文將結合示例講解如何實現這一過程。
parse_url是PHP 提供的一個用於解析URL 的函數,它返回一個關聯數組,包含如下幾個可能的鍵:
scheme:如http、https
host:主機名
port:端口號
user:用戶名
pass:密碼
path:路徑部分
query:查詢字符串
fragment:錨點
其基本使用方式如下:
$url = "https://www.gitbox.net/images/photo.jpg?size=large";
$parts = parse_url($url);
print_r($parts);
輸出結果為:
Array
(
[scheme] => https
[host] => www.gitbox.net
[path] => /images/photo.jpg
[query] => size=large
)
PHP 的basename函數可以從路徑中提取出最後一級的文件名。例如:
$path = "/images/photo.jpg";
$filename = basename($path); // 結果為 "photo.jpg"
我們可以先使用parse_url提取出URL 中的path ,再通過basename取得文件名。下面是完整的示例代碼:
function extractFilenameFromUrl($url) {
$parts = parse_url($url);
if (!isset($parts['path'])) {
return null; // 如果沒有 path,無法提取文件名
}
return basename($parts['path']);
}
// 示例
$url = "https://cdn.gitbox.net/assets/docs/manual.pdf?download=true";
$filename = extractFilenameFromUrl($url);
echo "提取到的文件名是:$filename"; // 輸出: 提取到的文件名是:manual.pdf
有時候傳入的URL 可能沒有指定文件名,比如: