PHP dirname() теряет последнюю папку
Эта проблема
Это очень простой для понимания вопрос.
У меня есть пользователь, отправляющий URL-адрес, например "http://example.com/path/filename.html".
Я использую PHP dirname()
функция, чтобы получить так называемую "базу" этого URL. Для приведенного выше примера это будет "http://example.com/path".
Моя проблема возникает, когда пользователь вводит это:
http://example.com/blog
Если вы наберете вышеупомянутое в своем браузере, вы увидите страницу index.php или.html в папке "blog". Тем не менее, PHP dirname()
вернет только "http://example.com".
Я не уверен, считает ли он, что "блог" - это файл без расширения, если таковой существует, но я не могу действительно найти решение.
Вещи, которые я пробовал
Сначала я попытался получить расширение URL с помощью этого быстрого метода:
$url = 'http://example.com/index.php';
$file_extension = end(explode('.', $filename));
Затем я бы проверил, существует ли расширение с использованием PHP empty()
, Если расширение существует, это означает, что имя файла было введено после папки, например "http://example.com/path/file.html", и dirname()
идеально. Если расширение не существует, файл не был введен, и последний элемент в пути является папкой, поэтому он уже является "базовым".
Тем не менее, в случае просто "http://example.com/path/", приведенное выше вернет ".com / path /" в качестве расширения файла, которое, как мы все знаем, не существует. В этом случае я бы использовал dirname()
Функция и отрезать "/ путь /".
РЕДАКТИРОВАТЬ:
Принимая продление basename($url)
не будет работать, потому что если пользователь вводит "http://example.com" basename()
возвращает "example.com", расширение для которого предположительно ".com"
Надеюсь, у кого-то была такая же проблема, и она знает решение. Я все еще ищу, но любые ответы приветствуются!!
1 ответ
РЕДАКТИРОВАТЬ Хорошо, в прошлый раз, прежде чем я сдаюсь:
function getPath($url){
$parts=explode("/",$url);
$patharray=array(".","http:","https:");
if(!in_array(pathinfo($url,PATHINFO_DIRNAME),$patharray) && strpos($parts[count($parts)-1], ".")!==false)
unset($parts[count($parts)-1]);
$url=implode("/",$parts);
if(substr($url,-1)!='/')
$url.="/";
return $url;
}
echo getPath("http://www.google.com/blog/testing.php")."\n";
echo getPath("www.google.com/blog/testing.php")."\n";
echo getPath("http://www.google.com/blog/")."\n";
echo getPath("http://www.google.com/blog")."\n";
echo getPath("http://www.google.com")."\n";
echo getPath("http://www.google.com/")."\n";
echo getPath("www.google.com/")."\n";
echo getPath("www.google.com")."\n";
Любой URL с последней частью, имеющей "." в нем разбирается, иначе остается один. Оно использует pathinfo()
проверить, является ли это просто доменом ("google.com" или "http://www.google.com"), а затем оставить последнюю часть в покое, так как будет "." в этом. Вот вывод скрипта:
http://www.google.com/blog/
www.google.com/blog/
http://www.google.com/blog/
http://www.google.com/blog/
http://www.google.com/
http://www.google.com/
www.google.com/
www.google.com/