Я пытаюсь вытащить имя файла из каталога без расширения.
Я прокладываю себе путь со следующим:
foreach ($allowed_files as $filename) { $link_filename = substr(basename($filename), 4, strrpos(basename($filename), '.')); $src_filename = substr($link_filename, 0, strrpos($link_filename) - 4); echo $src_filename; }
… Но это не сработает, если длина строки расширения больше 3. Я просмотрел документы PHP безрезультатно.
У PHP есть удобная pathinfo()
, которая работает для вас здесь:
foreach ($allowed_files as $filename) { echo pathinfo($filename, PATHINFO_FILENAME); }
Пример:
$files = array( 'somefile.txt', 'anotherfile.pdf', '/with/path/hello.properties', ); foreach ($files as $file) { $name = pathinfo($file, PATHINFO_FILENAME); echo "$file => $name\n"; }
Вывод:
somefile.txt => somefile anotherfile.pdf => anotherfile /with/path/hello.properties => hello
попробуй это
function file_extension($filename){ $x = explode('.', $filename); $ext=end($x); $filenameSansExt=str_replace('.'.$ext,"",$filename); return array( "filename"=>$filenameSansExt, "extension"=>'.'.$ext, "extension_undotted"=>$ext ); }
Применение:
$filenames=array("file1.php","file2.inc.php","file3..qwe.e-rt.jpg"); foreach($filenames as $filename){ print_r(file_extension($filename)); echo "\n------\n"; }
вывод
Array ( [filename] => file1 [extension] => .php [extension_undotted] => php ) ------ Array ( [filename] => file2.inc [extension] => .php [extension_undotted] => php ) ------ Array ( [filename] => file3..qwe.e-rt [extension] => .jpg [extension_undotted] => jpg ) ------
list ($ file) = explode ('.', $ filename);
Попробуй это:
$noExt = preg_replace("/\\.[^.]*$/", "", $filename);
Редактировать в ответ на комментарий cletus:
Вы можете изменить его одним из нескольких способов:
$noExt = preg_replace("/\\.[^.]*$/", "", basename($filename)); // or $noExt = preg_replace("/\\.[^.\\\\\\/]*$/", "", $filename);
Да, PHP нуждается в регулярных выражениях …