php获取复杂的文件扩展名,如mysql-5.0.1.tar.gz

时间:2010-06-03 12:43:32

标签: php file upload

我遇到了一个典型的问题。直到现在我正在做

strstr($filename,".");

$ filename是我从$ _FILE,即上传的文件获得的文件。它运行正常,直到我点击我提到的类型的文件名。 甚至做

pathinfo($filename);

给了我

.gz 

我需要看看它是否完全

.tar.gz

5 个答案:

答案 0 :(得分:3)

从技术上讲,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;
}

答案 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;