PHP不能自动生成文章,只能调用ChatGPT API;需用curl构造合规请求:带Bearer认证头、JSON格式、指定model和messages,注意密钥管理、错误处理与内容优化。

PHP 无法直接“自动生成文章”,它只能调用外部 API(比如 ChatGPT)并处理响应;真正生成内容的是 OpenAI 模型,PHP 只是调度器和格式 glue。
怎么用 PHP 调用 ChatGPT 的 /v1/chat/completions 接口
OpenAI 官方不提供 PHP SDK,但你可以用原生 curl 或 file_get_contents(需启用 allow_url_fopen)发 POST 请求。关键不是“怎么发”,而是怎么构造合规请求:
- 必须带
Authorization: Bearer sk-xxx请求头(API key 要严格保密,绝不能硬编码在 PHP 文件里,应从环境变量读取,如$_ENV['OPENAI_API_KEY']) - 必须设
Content-Type: application/json - 请求体必须是 JSON,且
messages是数组,至少包含一个{"role": "user", "content": "..."} - 别漏掉
model字段,例如"gpt-4-turbo"或"gpt-3.5-turbo",否则会报错Invalid request: model is required
示例片段(不依赖第三方库):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'model' => 'gpt-3.5-turbo',
'messages' => [['role' => 'user', 'content' => '写一篇关于 Laravel 队列原理的 300 字技术短文']],
'temperature' => 0.7
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $_ENV['OPENAI_API_KEY']
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if (isset($data['choices'][0]['message']['content'])) {
echo $data['choices'][0]['message']['content'];
}
为什么你收到的响应是空、乱码或 401 Unauthorized
这不是 PHP 的锅,而是鉴权或协议细节没对齐。常见断点:
立即学习“PHP免费学习笔记(深入)”;
-
401 Unauthorized:API key 错误、过期,或用了组织限制 key(检查 OpenAI 后台的Organization是否匹配) - 空响应或
NULL:没检查curl_exec返回值是否为false,也没用curl_error($ch)看底层错误(比如 SSL 证书验证失败,可临时加CURLOPT_SSL_VERIFYPEER => false排查,但生产环境必须关掉) - 中文乱码:响应是 UTF-8,但你的 PHP 输出没声明
header('Content-Type: text/html; charset=utf-8'),或 HTML 页面没写<meta charset="utf-8"> - 返回
"error": {"message": "Rate limit reached"}:免费 tier QPM(每分钟请求数)极低,别在循环里狂刷;加sleep(1)或用队列异步处理
怎么避免生成内容被判定为 AI 垃圾或 SEO 惩罚
OpenAI 默认输出偏“教科书风”,直接发布容易触发 Google 的 helpful content update 过滤。PHP 层能做的有限,但至少可以:
- 在 prompt 里明确约束风格:加上“用口语化中文,带 1–2 个真实开发场景例子,禁用‘首先’‘其次’‘最后’等模板词”
- 用
str_replace或正则粗筛明显 AI 味句式(如“综上所述”“值得注意的是”),但别过度清洗——语义可能被破坏 - 绝不让
temperature=1.0直接上线,建议控制在0.3–0.6区间,平衡稳定性与自然度 - 生成后必须人工抽检:随机选 3–5 篇,看事实准确性(比如 PHP 版本特性、函数参数顺序)、有无幻觉(虚构不存在的函数如
array_filter_recursive())
真正难的不是调通接口,而是把 prompt 工程、内容校验、失败重试、成本监控(usage.total_tokens 要记日志)全链路串起来——这些 PHP 都得自己兜底,OpenAI 不管。



















