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
相关产品推荐
相关产品推荐

