PHP, Pobierz nazwę pliku bez rozszerzenia pliku
Mam ten kod PHP:
function ShowFileExtension($filepath)
{
preg_match('/[^?]*/', $filepath, $matches);
$string = $matches[0];
$pattern = preg_split('/\./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);
if(count($pattern) > 1)
{
$filenamepart = $pattern[count($pattern)-1][0];
preg_match('/[^?]*/', $filenamepart, $matches);
return strtolower($matches[0]);
}
}
Jeśli mam plik o nazwie my.zip
, funkcja zwraca .zip
.
Chcę zrobić odwrotnie, chcę, aby funkcja zwracała my
bez rozszerzenia.
Plik jest tylko łańcuchem znaków w zmiennej.
17 answers
Nie ma takiej potrzeby. Zobacz też pathinfo(), daje wam wszystkie składniki waszej ścieżki.
Przykład z podręcznika:
$path_parts = pathinfo('/www/htdocs/index.html');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // filename is only since PHP 5.2.0
Wyjście kodu:
/www/htdocs
index.html
html
index
I alternatywnie można uzyskać tylko niektóre części, takie jak:
echo pathinfo('/www/htdocs/index.html', PATHINFO_EXTENSION); // outputs html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-30 18:39:41
Jako alternatywa dla pathinfo()
, możesz użyć
-
basename()
- zwraca komponent filename of path
Przykład z podręcznika PHP
$path = "/home/httpd/html/index.php";
$file = basename($path); // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"
Musisz znać rozszerzenie, aby je wcześniej usunąć.
Jednak, ponieważ twoje pytanie sugeruje, że masz potrzebę uzyskania rozszerzenia i nazwy bazowej, zagłosowałbym na odpowiedź Pekki jako najbardziej przydatną, ponieważ da ci ona wszelkie potrzebne informacje o ścieżce i Plik z jedną natywną funkcją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:54
Http://php.net/manual/en/function.pathinfo.php
pathinfo($path, PATHINFO_FILENAME);
Prosty test funkcjonalny: http://ideone.com/POhIDC
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-06 08:31:37
Innym podejściem jest użycie wyrażeń regularnych.
$fileName = basename($filePath);
$fileNameNoExtension = preg_replace("/\.[^.]+$/", "", $fileName);
Usuwa z ostatniego okresu .
aż do końca łańcucha.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-21 02:13:06
Jeśli rozszerzenie nie jest znane, użyj tego rozwiązania
pathinfo('D:/dir1/dir2/fname', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.php', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_FILENAME); // return "fname"
pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_DIRNAME) . '/' . pathinfo('D:/dir1/dir2/fname.jpg', PATHINFO_FILENAME); // return "D:/dir1/dir2/fname"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-24 21:46:24
@ Gordon basename będzie działać dobrze, jeśli znasz rozszerzenie, jeśli nie możesz użyć explode:
$filename = end(explode(".", $file));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-21 14:13:40
Prawie wszystkie powyższe rozwiązania mają pokazaną nazwę pliku ze zmiennej $path
Poniżej urywek pobierze bieżącą wykonaną nazwę pliku bez rozszerzenia
echo pathinfo(basename($_SERVER['SCRIPT_NAME']), PATHINFO_FILENAME);
Explanation
$_SERVER ['SCRIPT_NAME'] zawiera ścieżkę do bieżącego skryptu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-12 06:07:41
@fire incase nazwa pliku używa kropek, możesz dostać złe wyjście. Użyłbym metody @ Gordon, ale get the extension too, więc funkcja basename działa ze wszystkimi rozszerzeniami, jak to:
$path = "/home/httpd/html/index.php";
$ext = pathinfo($path, PATHINFO_EXTENSION);
$file = basename($path, ".".$ext); // $file is set to "index"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 12:15:32
W moim przypadku używam poniżej. Nie obchodzi mnie, jaka jest jego rozbudowa. :D myślę, że to ci pomoże
$exploded_filepath = explode(".", $filepath_or_URL);
$extension = end($exploded_filepath);
echo basename($filepath_or_URL, ".".$extension ); //will print out the the name without extension.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-13 19:46:39
Nie ma potrzeby, aby pisać dużo kodu. Nawet można to zrobić tylko za pomocą jednej linii kodu. Zobacz TUTAJ
Poniżej znajduje się kod w jednej linii, który zwraca tylko nazwę pliku i usuwa nazwę rozszerzenia:
<?php
echo pathinfo('logo.png')['filename'];
?>
Wydrukuje
logo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-10 19:12:15
Krótki
echo pathinfo(__FILE__)['filename']; // since php 5.2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-28 12:35:38
Nazwa pliku bez rozszerzenia, gdy nie znasz tego rozszerzenia:
$basename = substr($filename, 0, strrpos($filename, "."));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 07:37:00
Jeśli nie wiesz, które rozszerzenie masz, możesz spróbować tego:
$ext = strtolower(substr('yourFileName.ext', strrpos('yourFileName.ext', '.') + 1));
echo basename('yourFileName.ext','.'.$ext); // output: "youFileName" only
Praca ze wszystkimi możliwościami:
image.jpg // output: "image"
filename.image.png // output: "filename.image"
index.php // output: "index"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 17:53:38
Możesz to napisać
$filename = current(explode(".", $file));
Zwróci bieżący element tablicy, jeśli nie zostanie użyty wcześniej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-06 11:59:33
Twoja odpowiedź znajduje się poniżej idealne rozwiązanie do ukrycia rozszerzenia pliku w php.
<?php
$path = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
echo basename($path, ".php");
?>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 13:35:51
Zwraca tylko nazwę pliku bez rozszerzenia w 1 wierszu:
$path = "/etc/sudoers.php";
print array_shift(explode(".", basename($path)));
// will print "sudoers"
$file = "file_name.php";
print array_shift(explode(".", basename($file)));
// will print "file_name"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-27 15:20:22
Istniejące rozwiązania zawodzą, gdy istnieje wiele części rozszerzenia. Poniższa funkcja działa dla wielu części, pełnej ścieżki lub tylko nazwy pliku:
function removeExt($path)
{
$basename = basename($path);
return strpos($basename, '.') === false ? $path : substr($path, 0, - strlen($basename) + strlen(explode('.', $basename)[0]));
}
echo removeExt('https://example.com/file.php');
// https://example.com/file
echo removeExt('https://example.com/file.tar.gz');
// https://example.com/file
echo removeExt('file.tar.gz');
// file
echo removeExt('file');
// file
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-05 15:21:37