【问题标题】:How to get extensions for files with data in paths?如何获取路径中包含数据的文件的扩展名?
【发布时间】:2014-07-14 10:48:29
【问题描述】:

我正在编写一个图片上传脚本,并将常用图片扩展名列入白名单。我需要能够获取文件的扩展名以确定它们是否在白名单中,但是我遇到了一些 URL 的问题。

这是一个例子:

http://pisces.bbystatic.com/image/BestBuy_US/images/products/5512/5512124_ra.jpg;canvasHeight=280;canvasWidth=280

我的代码:

echo pathinfo($url, PATHINFO_EXTENSION);

输出以下内容:

jpg;canvasHeight=280;canvasWidth=280

DEMO

我可以把我的代码改成这样,这样可以解决问题:

$parts = explode(';', pathinfo($url, PATHINFO_EXTENSION));
echo $parts[0];

DEMO

但是,我不知道这是否是最好的方法(一方面,因为其他网站可能使用不同的数据分隔符而不是分号);

有没有更好的办法?

编辑:可能值得注意的是,我尝试在此处上传图片作为测试(使用示例 URL)并且 StackOverflow 上传它没有问题。

【问题讨论】:

    标签: php file-extension pathinfo


    【解决方案1】:

    仅使用 pathinfo() 将匹配 http://google.com -> com 之类的情况。先使用parse_url安全获取URL路径,再使用pathinfo获取文件扩展名。

    如果 URL 使用查询字符串(例如 ?foo=bar),那么该代码就足够了。但是鉴于您的示例,其中 URL 使用一些自定义格式而不是查询字符串,您可以使用 RegEx 仅选择 $ext 的第一个字母数字部分。

    $url = 'http://pisces.bbystatic.com/image/BestBuy_US/images/products/5512/5512124_ra.jpg;canvasHeight=280;canvasWidth=280';
    $ext = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_EXTENSION);
    if (!empty($ext)) {
        preg_match('/[a-zA-Z0-9]+/', $ext, $matches);
        $ext = $matches[0];
    }
    
    echo $ext;
    

    【讨论】:

      猜你喜欢
      • 2022-06-23
      • 1970-01-01
      • 2010-09-27
      • 2010-10-15
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2012-03-03
      • 2011-12-22
      相关资源
      最近更新 更多