我遇到了一个典型的问题。到现在我在做php获取像mysql-5.0.1.tar.gz这样的复杂文件扩展名
strstr($filename,".");
$文件名是我从$ _FILE即拿到了文件上传file.It运行良好,直到我打我所提到的类型的文件名。 即使做
pathinfo($filename);
给我
.gz
我需要看它是否是完全
.tar.gz
我遇到了一个典型的问题。到现在我在做php获取像mysql-5.0.1.tar.gz这样的复杂文件扩展名
strstr($filename,".");
$文件名是我从$ _FILE即拿到了文件上传file.It运行良好,直到我打我所提到的类型的文件名。 即使做
pathinfo($filename);
给我
.gz
我需要看它是否是完全
.tar.gz
最简单的方法是检查文件名的最后7个字符 - 这保证了每个文件与.tar.gz
结束:
if (substr($filename, -7) == '.tar.gz') {
// continue
}
技术上,pathinfo
是正确的:该文件的唯一扩展.gz
。名称中包含.tar
的事实与其中包含5.0.1
的事实一样巧合。
这并不会使您对.tar.gz
文件检查无效感兴趣,但它确实引发了一个问题:您想找到什么具体内容?
最直接的解决您的具体问题是:首先查找扩展(通过pathinfo
或strpos功能),然后,如果它正好是.gz
寻找“扩展名”中剩余的文件名(通过同样的方法)。
$parts = pathinfo($filename);
$extension = $parts['extension'];
if ($extension == '.gz') {
$parts = pathinfo($parts['filename']);
$extension = $parts['extension'] . $extension;
}
我只寻找与EXT文件ension .tar.gz,即它们应该以.tar.gz结尾。所以任何像this.is.a.long.filename.tar.gz这样的文件应该是有效的。 – uday 2010-06-03 13:02:08
如果你需要分析“this.is.a.very.long.file.name.with.lots.of.full.stops”那还有什么部分是文件扩展名?依靠文件名的特定部分来传达语义,关于文件内容的机器可读信息是最危险的。
目前尚不清楚您尝试的问题是什么 - 为什么您需要知道扩展名是什么?
C.
我有一个上传表单,我限制用户只上传.tar.gz文档。没有其他文件类型必须被允许。所以当他上传类似mysql-5.0.1.tar.gz的东西时,我的脚本会说因为上述逻辑而导致无效的文件类型。我需要从该文件名提取“.tar.gz”部分。 :) – uday 2010-06-03 12:59:56
...所以你的解决方案不适合用途 - 因为文件的名称与其内容无关。如果您想验证内容,请检查'tar -tvzf $ uploaded_file'是否返回错误。下载时强制以.tar.gz或tgz结尾的文件名。 – symcbean 2010-06-03 14:53:57
是的,内容验证稍后完成。如果提取失败,我会返回一个错误。我只是检查文件扩展名是.tar.gz。基本上节省了一个步骤。如果不是.tar.gz,甚至不应该提取。不是一个非常健康的方式,但它会做..所以如果用户故意命名一个以tar.gz结尾的文件,那么在提取时会失败。 – uday 2010-06-04 05:26:05
这就是答案:
strstr(pathinfo('asdasd/qweqwe/asdasd.tar.gz')['basename'], '.');
将返回“名为.tar.gz”
这是答案吗? 我不敢相信我的眼睛 – 2014-07-09 09:02:53
你让我的一天,斯蒂芬) – 2014-07-09 09:07:37