删除文件中的最后3个字符(文件扩展名)

问题描述:

我的文件名正在存储在一个变量中$ file_name ...我怎样才能删除扩展名,只有名称而已?有没有比其他的strcmp,我可以使用的东西...这似乎并没有做到这一点删除文件中的最后3个字符(文件扩展名)

使用pathinfo

<?php 
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php'); 

echo $path_parts['dirname'], "\n"; 
echo $path_parts['basename'], "\n"; 
echo $path_parts['extension'], "\n"; 
echo $path_parts['filename'], "\n"; // since PHP 5.2.0 
?> 

注意:如果你不是在PHP> = 5.2使用此来组成

$path_parts['filename'] = substr($path_parts['basename'], 0, -1*strlen($path_parts['extension'])-1); 
+0

+1为内置功能,而不是更复杂和容易出错的替代方案 – 2010-12-13 09:35:49

我用:

$file_name = current(explode(".", $file_name)); 
+0

是更好地使用这种 – 2010-12-13 09:32:18

+0

那么什么用,如文件名的' foo.bar.txt'? – Joey 2010-12-13 09:33:18

+0

这会给你任何东西,直到第一个'.'。 “my.strange.path/i.like.dots.php”会发生什么? – 2010-12-13 09:34:19

你应该看看pathinfo()功能。

+0

@Salman答:究竟是什么对我发布的链接这么无礼?哪个镜像链接是否真的很重要? – AgentConundrum 2010-12-13 09:36:01

+0

我已经恢复了更改。 – 2010-12-13 09:45:02

+0

@Salman:我自己可以做到这一点。我只是想知道*为什么*你认为有必要。 – AgentConundrum 2010-12-13 09:57:23

substr($file_name, 0, -4); 
+0

'archive.tar.gz'怎么样? – Gordon 2010-12-13 09:49:25

+0

你是对的!唯一安全的方法是不使用pathinfo() – 2010-12-13 10:21:37

+0

。本网站其他地方给出的pathinfo解决方案将在这种情况下返回“archive.tar”。 Afaik没有可靠的解决方案来处理双重扩展;) – Gordon 2010-12-13 23:26:35

您可以使用正则表达式。 Regular expression to remove a file's extension

你可以这样做:

$file_name_no_ext = pathinfo($file_name , PATHINFO_FILENAME); 

类似@fire,但更强大的面对多重点:

$comps = explode('.', $filename); 
unset($comps[count($comps) - 1]); 
$ext = implode('.', $comps);