我遇到了一个典型的问题。直到现在我正在做
strstr($filename,".");
$ filename是我从$ _FILE,即上传的文件获得的文件。它运行正常,直到我点击我提到的类型的文件名。 甚至做
pathinfo($filename);
给了我
.gz
我需要看看它是否完全
.tar.gz
答案 0 :(得分:3)
从技术上讲,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;
}
答案 1 :(得分:3)
最简单的方法是检查文件名的最后7个字符 - 这可以确保每个文件以.tar.gz
结尾:
if (substr($filename, -7) == '.tar.gz') {
// continue
}
答案 2 :(得分:0)
如果你需要解析'this.is.a.very.long.file.name.with.lots.of.full.stops'那么那个部分是文件扩展名?依靠文件名的特定部分来传达有关文件内容的语义,机器可读信息,最好是危险的。
目前尚不清楚您正在尝试的问题是什么 - 为什么您需要知道扩展名是什么?
下进行。
答案 3 :(得分:0)
我刚刚在PHP.net的评论中发布了$html = file_get_contents('http://www.example.com');
$dom = new DOMDocument();
@$dom->loadHTML($html);
// grab all the on the page
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
echo $url.'-'. statusCode($url) .'<br />';
}
function statusCode($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $httpCode;
}
的以下增强版本。此版本将文件扩展名的所有部分归为扩展名(例如,“ tar.gz”而不是“ gz”),其余部分作为文件名:
pathinfo()
以下是一些可以运行以显示其如何处理不同情况的示例:
<?php
function pathinfo_enhanced($file_path) {
$core_path_info = pathinfo($file_path);
$filename = $core_path_info['filename'];
if (isset($core_path_info['extension'])) {
$extension = $core_path_info['extension'];
} else {
$extension = '';
}
$extension_parts = array();
while (!empty($extension)) {
array_unshift($extension_parts, $extension);
$remaining_path_info = pathinfo($filename);
$filename = $remaining_path_info['filename'];
if (isset($remaining_path_info['extension'])) {
$extension = $remaining_path_info['extension'];
} else {
$extension = '';
}
}
$revised_path_info = array(
'filename' => $filename,
'extension' => implode('.', $extension_parts),
);
return array_merge($core_path_info, $revised_path_info);
}
答案 4 :(得分:-2)
这就是答案:
strstr(pathinfo('asdasd/qweqwe/asdasd.tar.gz')['basename'], '.');
将返回给你.tar.gz&#39;