PHP调用Discord Webhook发送附件报错50006解决求助
错误原因
- 核心问题出在请求体的编码逻辑上:你使用了
http_build_query()处理包含curl_file_create对象的POST数组,这个函数会将所有参数序列化为application/x-www-form-urlencoded格式的字符串,直接把文件对象转为无效的文本,导致Discord无法识别你提交的content、file等字段,才会返回「无法发送空消息」的报错。 - 其次你手动指定了
multipart/form-data的请求头但没有配套的边界(boundary)标识,cURL在发送包含文件的表单时会自动生成带正确boundary的Content-Type头,手动写这个头反而会让服务端无法正确拆分表单字段。
修复后代码
<?php $url = "WEBHOOK URL HERE"; $POST = [ // 消息内容 "content" => "Hello World!", // 机器人用户名 "username" => "testuser", // 上传的文件,第三个参数建议和实际文件名保持一致 "file" => curl_file_create("image.gif", 'image/gif', 'image.gif') ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 直接传POST数组即可,不要用http_build_query处理 curl_setopt($ch, CURLOPT_POSTFIELDS, $POST); $response = curl_exec($ch); // 可选新增错误排查逻辑 if(curl_errno($ch)) { var_dump(curl_error($ch)); } else { var_dump($response); } curl_close($ch);
补充注意事项
请确保image.gif的路径正确,优先使用绝对路径避免脚本读取不到文件的问题。
内容的提问来源于stack exchange,提问作者Zoey Malkov
相关产品推荐
相关产品推荐

