我有一个值,可能是图像URL或图像Base64字符串。确定哪个是哪个最好的方法是什么?如果是图像URL,则图像将已驻留在我的服务器上。
我尝试过做一个preg_match,但我认为在一个可能很大的base64字符串上运行preg_match将是服务器密集的。
编辑:迄今为止最好的两种方法。
// if not base64 URL
if (substr($str, 0, 5) !== 'data:') {}
// if file exists
if (file_exists($str)) {}
答案 0 :(得分:4)
你的意思是你要区分
<img src="http://example.com/kittens.jpg" />
and
<img src="data:image/png;base64,...." />
你只需要查看src属性的前5个字符就可以确定它是否是数据uri,例如。
if (substr($src, 0, 5) == 'data:')) {
... got a data uri ...
}
如果它看起来不像数据uri,那么可以安全地假设它是一个URL并将其视为一个URL。
答案 1 :(得分:0)
如果这只是两种可能性,你可以这样做:
$string = 'xxx';
$part = substr($string, 0, 6); //if an image, it will extract upto http(s):
if(strstr($part, ':')) {
//image
} else {
//not an image
}
说明:以上代码假定输入是base64
字符串或图像。如果它是图像,它将并且应该包含协议信息(包括:
)。在base64编码的字符串中不允许这样做。
答案 2 :(得分:0)
您可以使用preg_match()
执行此操作。当preg_match看不到d
时,代码将停止。如果发现d
后面没有a
,它将会停止,依此类推。这样你就不会做多余的数学和字符串解析:
if(!preg_match('!^data\:!',$str) {
//image
} else {
//stream
}
您也可以使用is_file()
,它不会在目录中返回true。
// if file exists and is a file and not a directory
if (is_file($str)) {}