2012-12-18 52 views
-1

我试图找出哪些扩展特定URL都有,这就是我想要做的事:如何通过它的url找到文件的扩展名?

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

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

+1

http://imgur.com/9P54j不是图像。这是一个网页。 – esqew

+0

的确如此,它是一个网页,而不是一个图像文件,该图像位于http://i.imgur.com/9P54j.gif中,您可以从中轻松获得扩展名 – Vultour

+0

我用什么函数获取扩展名? –

回答

2

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

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

+0

我只是想提取文件的扩展名,我用什么函数? –

+0

那么,我想你可以使用preg_match()来找到它周围的HTML中的图像。 – teh1

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' 
0

我的回答假设想抓住从那些在URL本身没有扩展名的URL文件的扩展名。

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

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

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

作为一个真正的PHP PROGRAMM将是这个答案,我会给只是一个伪代码太大:

<?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; 
} 
相关问题