gpt4 book ai didi

php - 确定 URL 是否是 PHP 中的图像的最佳方法

转载 作者:IT王子 更新时间:2023-10-28 23:55:45 26 4
gpt4 key购买 nike

使用 PHP,给定一个 URL,我如何判断它是否是一个图像?

URL 没有上下文 - 它只是在纯文本文件的中间,或者可能只是一个字符串。

我不想要高开销(例如读取 URL 的内容),因为页面上的许多 URL 可能会调用它。鉴于此限制,并非必须识别所有图像,但我想要一个相当不错的猜测。

目前我只是在看文件扩展名,但感觉应该有比这更好的方法。

这是我目前拥有的:

  function isImage( $url )
{
$pos = strrpos( $url, ".");
if ($pos === false)
return false;
$ext = strtolower(trim(substr( $url, $pos)));
$imgExts = array(".gif", ".jpg", ".jpeg", ".png", ".tiff", ".tif"); // this is far from complete but that's always going to be the case...
if ( in_array($ext, $imgExts) )
return true;
return false;
}

编辑:如果它对其他人有用,这里是使用 Emil H 的回答中的技术的最终函数:

  function isImage($url)
{
$params = array('http' => array(
'method' => 'HEAD'
));
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp)
return false; // Problem with url

$meta = stream_get_meta_data($fp);
if ($meta === false)
{
fclose($fp);
return false; // Problem reading data from url
}

$wrapper_data = $meta["wrapper_data"];
if(is_array($wrapper_data)){
foreach(array_keys($wrapper_data) as $hh){
if (substr($wrapper_data[$hh], 0, 19) == "Content-Type: image") // strlen("Content-Type: image") == 19
{
fclose($fp);
return true;
}
}
}

fclose($fp);
return false;
}

最佳答案

你可以使用 HTTP HEAD请求并检查内容类型。这可能是一个很好的妥协。可以使用 PHP Streams 来完成. Wez Furlong 有一个 article这展示了如何使用这种方法发送 post 请求,但它可以很容易地适应发送 HEAD 请求。您可以使用 stream_get_meta_data() 从 http 响应中检索 header .

当然这不是真正的 100%。某些服务器发送不正确的 header 。但是,它会处理图像通过脚本传送并且正确的文件扩展名不可用的情况。真正确定的唯一方法是实际检索图像 - 全部图像或前几个字节,如 thomasrutter 所建议的那样。

关于php - 确定 URL 是否是 PHP 中的图像的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/676949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com