DALL-E 3 API 每次仅支持生成1张图且尺寸上限1024x1024,PHP需用cURL循环调用;必须设Authorization、Content-Type、model="dall-e-3"、英文prompt≤4000字符、size三选一、quality选standard或hd、timeout≥30秒;返回图片URL需校验后下载保存并入库,字段含prompt、image_path等;限流为每分钟10次,应sleep(6)控制节奏,429错误需指数退避重试。

PHP 调用 DALL-E 3 API 的核心限制必须先看清
DALL-E 3 官方 API(https://api.openai.com/v1/images/generations)不支持批量提交多个 prompt 一次请求,每次调用只能生成 1 张图(n=1 是唯一允许值),且最大尺寸为 1024x1024。所谓“批量”,只能靠 PHP 循环发起多次独立请求——这不是接口能力问题,而是 OpenAI 的硬性策略。
用 cURL 发起合规请求的关键参数组合
OpenAI 要求所有请求带 Authorization: Bearer <your_key> 和 Content-Type: application/json,且必须用 POST 方法。PHP 中最稳妥的方式是原生 curl_init(),避免依赖第三方 SDK 带来的隐式重试或超时干扰。
-
model必须显式指定为"dall-e-3"(填"dall-e-2"会静默降级,但返回图质量差、不支持quality参数) -
prompt长度不能超过 4000 字符,含空格;中文描述效果弱于英文,建议用英文写 prompt -
size只能选"1024x1024"、"1792x1024"或"1024x1792";DALL-E 3 不接受"512x512" -
quality目前只有"standard"和"hd"两个值,"hd"生成慢约 2–3 秒,但细节更锐利 - 务必设置
timeout≥ 30 秒(API 响应常在 10–25 秒),并检查curl_error()而非只看 HTTP 状态码
生成后自动保存图片并入库的防错要点
API 返回的是 JSON,其中 data[0].url 是临时 HTTPS 链接(1 小时过期),不能直接存库。必须用 file_get_contents() 或 curl 下载二进制数据,再用 file_put_contents() 写入本地路径,最后才插入数据库。
- 下载前先用
filter_var($url, FILTER_VALIDATE_URL)校验 URL 合法性,防止注入或空值 - 保存路径建议用时间戳+随机字符串生成唯一文件名(如
date('YmdHis') . '_' . bin2hex(random_bytes(4)) . '.png'),避免重复覆盖 - 入库字段至少包含:
prompt(原始提示)、image_path(相对或绝对路径)、created_at(时间戳)、status(成功/失败) - MySQL 插入失败时不要静默跳过——DALL-E 3 返回 200 但图片下载失败很常见,需单独记录错误日志
并发控制与速率限制的实际应对方式
OpenAI 对 DALL-E 3 的默认配额是每分钟 10 次请求(requests per minute),超出会返回 429 Too Many Requests。PHP 单进程循环无法突破此限,强行并发(如 fork 或多线程)反而易触发风控。
立即学习“PHP免费学习笔记(深入)”;
- 最可靠做法:每请求间隔
sleep(6)(即每分钟最多 10 次),比依赖Retry-After头更可控 - 若需加快速度,唯一合法途径是申请提高配额(Dashboard → Usage Limits → Request increase),而非技术绕过
- 记录每次请求的
response_headers,提取X-RateLimit-Remaining和X-RateLimit-Reset,动态调整 sleep 时间 - 失败请求(尤其是 429)必须写入重试队列,避免丢图;重试间隔从 60 秒起,指数退避(60→120→240 秒)
真正麻烦的不是代码怎么写,而是 prompt 工程和失败重试逻辑——90% 的“生成失败”其实来自模糊描述或违反内容政策,而不是 PHP 写错了哪一行。



















