我正在尝试找出特定 url 的扩展名,这是我想要做的:
$pathinfo = pathinfo('http://imgur.com/9P54j');
$extension = $pathinfo['extension'];
echo $extension;
url 'http://imgur.com/9P54j' 实际上是一个具有 9P54j.gif 图像的 url,它在 url 中并不明显,如何提取文件 '9P54j' 的扩展名 .gif ?
我正在尝试找出特定 url 的扩展名,这是我想要做的:
$pathinfo = pathinfo('http://imgur.com/9P54j');
$extension = $pathinfo['extension'];
echo $extension;
url 'http://imgur.com/9P54j' 实际上是一个具有 9P54j.gif 图像的 url,它在 url 中并不明显,如何提取文件 '9P54j' 的扩展名 .gif ?
该 URL 不是 .gf 图像的 URL,而是在其 HTML 中包含该图像的页面。您将需要解析图像 URL 的 HTML。尝试:右键单击您上面提供的链接中的图像,然后单击“打开图像”或“查看图像”以查看完整的 URL。
甚至该 URL 也可能没有扩展名,因为数据可能会流式传输给用户 bia PHP。如果是这种情况,只需检查 Content-Type 标头即可了解扩展名是什么。
您可以使用正则表达式来提取它,如下所示:
$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'
我的回答假设想要从 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;
}