PHP 8.3 可通过 Google AI SDK 或 REST API 向 Gemini Pro-Vision 一次性提交多张图片,需将每张图读取为二进制、Base64 编码并指定准确 MIME 类型后嵌入 JSON 请求的 inlineData 中,不支持传统表单上传。

PHP 8.3 本身不直接支持向 Gemini(Google 的 Gemini API)上传多张图片,因为 Gemini API(尤其是 gemini-pro-vision 模型)**不接受传统 multipart 表单上传**,而是要求将图片以 Base64 编码后嵌入 JSON 请求体,并且必须使用 Google 官方推荐的 Google AI SDK(google/ai-vertex 或 google/ai-generative)或 REST API 方式调用。
✅ 关键前提:用 Google AI SDK(推荐)或 REST API
Gemini 不提供类似 “/upload” 的独立图片上传接口。所有图片需在调用 generateContent 时一并提交,且每张图需:
- 读取为二进制内容(
file_get_contents()) - Base64 编码(
base64_encode()) - 指定正确的 MIME 类型(如
image/jpeg,image/png) - 作为
inlineData对象加入parts数组
✅ PHP 8.3 示例:一次性传多张图 + 文字提示
以下使用官方 google/ai-generative SDK(v0.7+ 支持 Gemini 1.5/Pro-Vision):
// 1. 安装 SDK(Composer)
// composer require google/ai-generative
// 2. PHP 代码示例
use Google\AI\GenerativeModels\GenerativeModel;
use Google\AI\GenerativeModels\Content;
use Google\AI\GenerativeModels\Part;
require 'vendor/autoload.php';
// 初始化模型(需设置 GOOGLE_API_KEY 环境变量 或 显式传入)
$model = new GenerativeModel(
'gemini-pro-vision',
['apiKey' => $_ENV['GOOGLE_API_KEY'] ?? 'your-api-key-here']
);
// 多张本地图片路径
$imagePaths = [
'/path/to/photo1.jpg',
'/path/to/diagram.png',
'/path/to/screenshot.webp'
];
$parts = [];
// 添加文字提示(可选,但建议放在最前)
$parts[] = Part::text("请分析这三张图:描述内容、对比差异、总结共同主题。");
// 逐张读取并添加图片
foreach ($imagePaths as $path) {
if (!file_exists($path)) {
throw new Exception("Image not found: {$path}");
}
$binary = file_get_contents($path);
$mimeType = mime_content_type($path); // 自动识别类型,如 image/jpeg
$base64 = base64_encode($binary);
$parts[] = Part::inlineData($mimeType, $base64);
}
// 构建完整内容
$content = Content::make($parts);
// 调用生成(支持多图!)
try {
$response = $model->generateContent($content);
echo $response->text();
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
⚠️ 注意事项(PHP 8.3 实际开发中易踩坑)
-
文件大小限制:Gemini Pro-Vision 单次请求总 payload ≤ 20MB;单图建议 ≤ 2MB,超大会触发
400 Bad Request -
MIME 类型必须准确:不能写成
image/jpg(应为image/jpeg),否则返回INVALID_ARGUMENT -
内存与超时:多张高清图 Base64 后体积翻倍,确保
memory_limit≥ 128M,max_execution_time≥ 60 - API Key 安全:切勿硬编码;用环境变量或 secrets manager 管理
- 不支持 GIF 动画帧:仅解析首帧;如需多帧分析,需先用 Imagick 分解
? 替代方案:用 cURL 直调 REST API(无 SDK 依赖)
若不想引入 SDK,可直接 POST 到:https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=YOUR_API_KEY
请求体为标准 JSON,contents[0].parts 是图片 + 文本数组,结构与 SDK 中的 $parts 一致(inlineData 含 data 和 mimeType)。
立即学习“PHP免费学习笔记(深入)”;
不复杂但容易忽略:多图不是“上传”,而是“打包进一次请求”。只要 Base64 正确、MIME 准确、大小合规,PHP 8.3 完全能稳定处理 3–5 张常见尺寸图片。



















