如何通过其URL查找文件的扩展名?

时间:2012-12-18 23:01:39

标签: php

我试图找出特定网址的扩展名,以下是我要做的事情:

$pathinfo = pathinfo('http://imgur.com/9P54j');
$extension = $pathinfo['extension'];
echo $extension;

网址'http://imgur.com/9P54j'实际上是一个包含9P54j.gif图片的网址,并且在网址中不明显,如何提取文件'9P54j'的扩展名.gif?

3 个答案:

答案 0 :(得分:2)

该URL不是.gf图像的URL,而是包含HTML中图像的页面。您将需要解析HTML到图像的URL。尝试:右键单击上面提供的链接中的图像,然后单击“打开图像”或“查看图像”以查看完整的URL。

即使该URL可能没有扩展名,因为数据可能会流式传输给用户bia PHP。如果是这种情况,只需检查Content-Type标题以找出扩展名是什么。

答案 1 :(得分:0)

您可以使用正则表达式来提取它,如下所示:

$url = 'http://imgur.com/9P54j';
$content = file_get_contents($url);
$explode = explode('/', $url);
preg_match('/http:\/\/i\.imgur\.com\/' . array_pop($explode) . '(\.[A-z]{1,4})/', $content, $matches);
$ext = $matches[1]; // '.gif'

答案 2 :(得分:0)

我的回答是假设想要从网址本身没有扩展名的网址中获取文件的扩展名。

使用pathinfo()将无法正常工作,因为它使用文本处理检索扩展名,并且在网址中没有扩展名。

一种方法是使用较低级别的http功能,允许向URL发送http请求并获取响应头。响应标头应定期包含“Content-Type:”标头,该标头向我们显示内容的mimetype。

一旦拥有'Content-Type'标题,您就可以使用翻译表和翻译mimetype来扩展文件。这个受支持的扩展名列当然是有限的,并且有mimetypes可以转换为多个扩展名。在这种情况下,您必须对文件内容本身进行进一步调查。

由于真正的php程序对于这个答案来说太大了,我只会给出一个伪代码:

<?php

function get_extension_from_mimetype($url) {
    // static translation table. to be extended
    static $translationTable = array (
        'image/jpeg' => 'jpg',
        'text/xml' => 'xml',
        'text/html' => 'html'
    );

    $defaultExtension = 'dat';

    // you'll have to write this method 
    $mimetype = get_mimetype_by_url($url);

    if(isset($translationTable[$mimetype])) {
        $extension = $translationTable[$mimetype];
    } else {
        $extension = $defaultExtension;
    }

    return $extension;
}