PHP, получить имя файла без расширения файла

У меня есть этот код 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]); } } 

Если у меня есть файл с именем my.zip , эта функция возвращает .zip .

Я хочу сделать обратное, я хочу, чтобы функция возвращала my без расширения.

Файл представляет собой просто строку в переменной.

Не нужно этого. Проверьте pathinfo () , он дает вам все компоненты вашего пути.

Пример из руководства:

 $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 

Вывод кода:

 /www/htdocs index.html html index 

И, альтернативно, вы можете получить только определенные части, такие как:

 echo pathinfo('/www/htdocs/index.html', PATHINFO_EXTENSION); // outputs html 

В качестве альтернативы pathinfo() вы можете использовать

  • basename() – возвращает компонент имени файла пути

Пример из руководства 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" 

Вы должны знать расширение, чтобы удалить его заранее.

Однако, поскольку ваш вопрос подсказывает, что вам нужно получить расширение и базовое имя, я бы проголосовал за ответ Пекки как самый полезный, потому что он предоставит вам любую информацию, которую вы хотите о пути и файле, с одним родным функция.

http://php.net/manual/en/function.pathinfo.php

 pathinfo($path, PATHINFO_FILENAME); 

Простой функциональный тест: http://ideone.com/POhIDC

Другой подход – использование регулярных выражений.

 $fileName = basename($filePath); $fileNameNoExtension = preg_replace("/\.[^.]+$/", "", $fileName); 

Это удаляется с последнего периода . до конца строки.

@Gordon basename будет работать нормально, если вы знаете расширение, если вы не можете использовать explode:

 $filename = end(explode(".", $file)); 

Если расширение неизвестно, используйте это решение

  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" 

PHP MAN function pathinfo

@fire, если имя файла использует точки, вы можете получить неправильный вывод. Я бы использовал метод @Gordon, но также получил расширение, поэтому функция basename работает со всеми расширениями, например:

 $path = "/home/httpd/html/index.php"; $ext = pathinfo($path, PATHINFO_EXTENSION); $file = basename($path, ".".$ext); // $file is set to "index" 

в моем случае, я использую ниже. Меня не волнует, каково его расширение. : D Я думаю, это поможет вам

 $exploded_filepath = explode(".", $filepath_or_URL); $extension = end($exploded_filepath); echo basename($filepath_or_URL, ".".$extension ); //will print out the the name without extension. 

Почти все вышеупомянутое решение имеет отображаемое получение имени файла из переменной $ path

Ниже фрагмента будет отображаться текущее имя исполняемого файла без расширения

 echo pathinfo(basename($_SERVER['SCRIPT_NAME']), PATHINFO_FILENAME); 

объяснение

$ _SERVER ['SCRIPT_NAME'] содержит путь к текущему скрипту.

короткий

 echo pathinfo(__FILE__)['filename']; // since php 5.2 

Имя файла без расширения файла, если вы не знаете это расширение:

$basename = substr($filename, 0, strrpos($filename, "."));

Если вы не знаете, какое расширение у вас есть, вы можете попробовать следующее:

 $ext = strtolower(substr('yourFileName.ext', strrpos('yourFileName.ext', '.') + 1)); echo basename('yourFileName.ext','.'.$ext); // output: "youFileName" only 

Работа со всеми возможностями:

 image.jpg // output: "image" filename.image.png // output: "filename.image" index.php // output: "index" 

Вы можете написать это

 $filename = current(explode(".", $file)); 

Они возвращают текущий элемент массива, если он не используется ранее.

Ваш ответ ниже идеального решения, чтобы скрыть расширение файла в php.

 <?php $path = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; echo basename($path, ".php"); ?> 

Это возвращает только имя файла без расширения в 1 строке:

 $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"