You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用file_get_contents()获取文件扩展名的方法

获取Google Places API返回二进制文件的扩展名

嘿,我来帮你搞定这个问题!从Google Places API拿到的二进制资源,要确定它的扩展名,核心思路是从响应头的Content-Type字段入手(这是最准确的方式),或者直接检测二进制内容的MIME类型。下面给你两种靠谱的实现方案:

方案一:解析响应头的Content-Type(推荐)

如果是用CURL请求API,我们可以让它返回响应头,然后从中提取Content-Type,再映射成对应的扩展名。代码示例如下:

// 替换成你的Google Places API资源请求URL
$apiUrl = 'https://maps.googleapis.com/maps/api/place/photo?parameters...';

// 初始化CURL会话
$ch = curl_init($apiUrl);
// 设置返回响应内容而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 要求同时返回响应头
curl_setopt($ch, CURLOPT_HEADER, true);

// 执行请求,拿到包含头和体的完整响应
$fullResponse = curl_exec($ch);
curl_close($ch);

// 分离响应头和二进制响应体($response就是你原来的变量)
list($headerContent, $response) = explode("\r\n\r\n", $fullResponse, 2);

// 正则匹配Content-Type字段
preg_match('/Content-Type: (.*?)\r\n/', $headerContent, $matches);
if (isset($matches[1])) {
    $mimeType = trim($matches[1]);
    // 定义MIME类型到扩展名的映射表
    $mimeExtensionMap = [
        'image/jpeg' => 'jpg',
        'image/png' => 'png',
        'image/gif' => 'gif',
        // 可根据API可能返回的类型补充其他映射
    ];
    // 获取扩展名,默认用bin兜底
    $extension = $mimeExtensionMap[$mimeType] ?? 'bin';
    echo "文件扩展名:{$extension}";
}

这个方法的优势在于直接利用API返回的官方类型标识,准确率最高,毕竟Google Places API会在响应头里明确告诉我们资源的类型。

方案二:用finfo检测二进制内容(备选方案)

如果你因为某些原因没法获取响应头(比如已经只拿到了$response的二进制数据),可以用PHP内置的finfo扩展来分析二进制内容的特征,从而判断MIME类型:

// 初始化finfo对象,用于检测MIME类型
$finfo = new finfo(FILEINFO_MIME_TYPE);
// 从二进制内容中获取MIME类型
$mimeType = $finfo->buffer($response);

// 同样用映射表转换扩展名
$mimeExtensionMap = [
    'image/jpeg' => 'jpg',
    'image/png' => 'png',
    'image/gif' => 'gif',
];
$extension = $mimeExtensionMap[$mimeType] ?? 'bin';
echo "文件扩展名:{$extension}";

补充说明

Google Places API的照片资源绝大多数情况下返回的是image/jpeg类型,也就是jpg扩展名,但用上面的动态方法能覆盖所有可能的特殊情况,避免出错。

内容的提问来源于stack exchange,提问作者nebula186

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:03:22