2010-06-03 29 views
0

我遇到了一个典型的问题。到现在我在做php获取像mysql-5.0.1.tar.gz这样的复杂文件扩展名

strstr($filename,"."); 

$文件名是我从$ _FILE即拿到了文件上传file.It运行良好,直到我打我所提到的类型的文件名。 即使做

pathinfo($filename); 

给我

.gz 

我需要看它是否是完全

.tar.gz 

回答

3

最简单的方法是检查文件名的最后7个字符 - 这保证了每个文件与.tar.gz结束:

if (substr($filename, -7) == '.tar.gz') { 
    // continue 
} 
+1

这是答案吗? 我不敢相信我的眼睛 – 2014-07-09 09:02:53

+0

你让我的一天,斯蒂芬) – 2014-07-09 09:07:37

2

技术上,pathinfo是正确的:该文件的唯一扩展.gz 。名称中包含.tar的事实与其中包含5.0.1的事实一样巧合。

这并不会使您对.tar.gz文件检查无效感兴趣,但它确实引发了一个问题:您想找到什么具体内容?

最直接的解决您的具体问题是:首先查找扩展(通过pathinfostrpos功能),然后,如果它正好是.gz寻找“扩展名”中剩余的文件名(通过同样的方法)。

$parts = pathinfo($filename); 
$extension = $parts['extension']; 
if ($extension == '.gz') { 
    $parts = pathinfo($parts['filename']); 
    $extension = $parts['extension'] . $extension; 
} 
+0

我只寻找与EXT文件ension .tar.gz,即它们应该以.tar.gz结尾。所以任何像this.is.a.long.filename.tar.gz这样的文件应该是有效的。 – uday 2010-06-03 13:02:08

0

如果你需要分析“this.is.a.very.long.file.name.with.lots.of.full.stops”那还有什么部分是文件扩展名?依靠文件名的特定部分来传达语义,关于文件内容的机器可读信息是最危险的。

目前尚不清楚您尝试的问题是什么 - 为什么您需要知道扩展名是什么?

C.

+0

我有一个上传表单,我限制用户只上传.tar.gz文档。没有其他文件类型必须被允许。所以当他上传类似mysql-5.0.1.tar.gz的东西时,我的脚本会说因为上述逻辑而导致无效的文件类型。我需要从该文件名提取“.tar.gz”部分。 :) – uday 2010-06-03 12:59:56

+0

...所以你的解决方案不适合用途 - 因为文件的名称与其内容无关。如果您想验证内容,请检查'tar -tvzf $ uploaded_file'是否返回错误。下载时强制以.tar.gz或tgz结尾的文件名。 – symcbean 2010-06-03 14:53:57

+0

是的,内容验证稍后完成。如果提取失败,我会返回一个错误。我只是检查文件扩展名是.tar.gz。基本上节省了一个步骤。如果不是.tar.gz,甚至不应该提取。不是一个非常健康的方式,但它会做..所以如果用户故意命名一个以tar.gz结尾的文件,那么在提取时会失败。 – uday 2010-06-04 05:26:05

-2

这就是答案:

strstr(pathinfo('asdasd/qweqwe/asdasd.tar.gz')['basename'], '.'); 

将返回“名为.tar.gz”