У меня есть небольшой фрагмент, который захватывает имя файла, включая расширение.
$currURL = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
с учетом URL-адреса ... http://www.somewebsite.com/pretty/url/here/this-is-a-page.php возвращает this-is-a-page.php.Я хотел бы иметь возможность просто вернуться, this-is-a-page.
http://www.somewebsite.com/pretty/url/here/this-is-a-page.php
this-is-a-page.php
this-is-a-page
Я довольно одержим идеей делать подобные вещи в как можно меньшем количестве кода ... как бы вы сделали это простым и элегантным образом?
Попробуйте:
$name = pathinfo($_SERVER['SCRIPT_NAME'], PATHINFO_FILENAME);
Тест:
$arr = array('http://www.example.com/path/to/page.php', 'http://www.example.com/path/to/page.php?a=b&c=d#e', 'http://www.example.com/path/to/page.x.php', 'www.example.com/path/to/page.php', '/path/to/page.php'); foreach ($arr as $str) { $name = pathinfo($str, PATHINFO_FILENAME); echo $name . '<br />'; }
Вывод:
page page page.x page page
$file_no_ext = preg_replace( array('#^.*/#', '#\.[^./]+$#'), '', parse_url($url, PHP_URL_PATH));
, например
http://example.com/fds.php/path/file => file http://example.com/fds.php/path/file.php => file http://example.com/fds.php/path/file.php2.php?abc=a => file.php2
Другое решение -
$file_no_ext = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_FILENAME);
Это работает для файлов .php
rtrim(substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1),".php");
echo substr(strstr($url,'.php',TRUE),strrpos($url,'/')+1)
или
preg_match('/[^\/]+(?=\.php)/',$url,$match); echo $match[0];