我想使用 PHP 從當前 URL 獲取帶有擴展名的檔案名。對于這個問題,網上有很多可用的代碼,但到目前為止還沒有一個能滿足我的需求。這是最常用的代碼,但仍未滿足我的要求。
好吧,我需要的是作為示例,我在下面共享了一些 URL,并希望得到期望的結果。
網址: https ://www.example.gov.us/directory_1/directory_2/directory_3/index.php
需要的結果: index.php
URL: https://www.example.gov.us/directory_1/directory_2/directory_3/index //通過 .htaccess 洗掉擴展
需要的結果:索引
網址:https ://www.example.gov.us/directory_1/directory_2/directory_3/
需要的結果: [空]
所以為了這個目的,我使用了下面的代碼......
$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$path_parts = pathinfo($actual_link);
echo $path_parts['dirname'];
echo $path_parts['basename'];
echo $path_parts['extension'];
echo $path_parts['filename'];
但是我從上面的代碼中收到了以下輸出。
// Correct Output
$actual_link = "https://www.example.gov.us/directory_1/directory_2/directory_3/index.php";
$path_parts = pathinfo($actual_link);
echo $path_parts['dirname']; //https://www.example.gov.us/directory_1/directory_2/directory_3
echo $path_parts['basename']; //index.php
echo $path_parts['extension']; //php
echo $path_parts['filename']; //index
// Incorrect Output
$actual_link = "https://www.example.gov.us/directory_1/directory_2/directory_3/index";
$path_parts = pathinfo($actual_link);
echo $path_parts['dirname']; //https://www.example.gov.us/directory_1/directory_2/directory_3
echo $path_parts['basename']; //index
echo $path_parts['extension']; //Notice: Undefined index: extension
echo $path_parts['filename']; //index
// Incorrect Output
$actual_link = "https://www.example.gov.us/directory_1/directory_2/directory_3/";
$path_parts = pathinfo($actual_link);
echo $path_parts['dirname']; //https://www.example.gov.us/directory_1/directory_2
echo $path_parts['basename']; //directory_3
echo $path_parts['extension']; //Notice: Undefined index: extension
echo $path_parts['filename']; //directory_3
最后一種情況使此代碼無法使用,因此是否有替代方法可以在所有上 3 種情況下獲取帶有擴展名的檔案名?
uj5u.com熱心網友回復:
問題是目錄的基本名稱是目錄。
我認為你需要一些自定義邏輯來處理第三種情況
$outcome = str_ends_with($actual_link, "/") ? "" : basename($actual_link);
str_ends_with()是一個 PHP 8 函式。如果您需要對舊版本的支持,請使用此 polyfill
if (!function_exists("str_ends_with")) {
function str_ends_with($haystack, $needle) {
return strrpos($haystack, $needle) === strlen($haystack) - strlen($needle);
}
}
演示 ~ https://3v4l.org/qQiOq
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443114.html
上一篇:MySql緩慢的請求時間
