-1

我正在尝试找出特定 url 的扩展名,这是我想要做的:

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

url 'http://imgur.com/9P54j' 实际上是一个具有 9P54j.gif 图像的 url,它在 url 中并不明显,如何提取文件 '9P54j' 的扩展名 .gif ?

4

3 回答 3

2

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

甚至该 URL 也可能没有扩展名,因为数据可能会流式传输给用户 bia PHP。如果是这种情况,只需检查 Content-Type 标头即可了解扩展名是什么。

于 2012-12-18T23:06:52.737 回答
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'
于 2012-12-18T23:11:35.007 回答
0

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

Usingpathinfo()将不起作用,因为它使用文本队列检索扩展名,并且在 url 中没有扩展名。

一种方法是使用较低级别的 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;
}
于 2012-12-18T23:24:54.347 回答