You need to enable JavaScript to run this app. PHP基于Telegram Bot API发送图片:file_get_contents非curl调用失效排查
优惠活动
大模型
产品
解决方案
定价
更多

PHP基于Telegram Bot API发送图片:file_get_contents非curl调用失效排查

该PHP代码无法成功发送Telegram图片消息的原因排查

核心问题点

  • 接口端点选择错误
    当前代码拼接的请求地址是$TELEGRAM/sendMessage,这是Telegram Bot专为纯文本消息设计的接口,参数列表中完全没有photo相关的入参校验逻辑,就算填了图片参数,服务端也会直接判定参数非法,不会触发图片发送流程。发送公网链接类图片必须调用sendPhoto专属端点。
  • 参数名和接口场景不匹配
    在sendPhoto接口的规则中,图片附带的说明文字对应参数名是caption,而非当前代码使用的text。text是sendMessage接口独有的入参名,传错参数名会导致就算调用接口成功,图片附带的文字内容也无法正常展示。
  • 变量初始化存在运行隐患
    代码中使用$url .= "图片地址"做拼接赋值,但$url在首次使用拼接操作符前没有做初始定义,在PHP 7.2+及以上版本会抛出未定义变量的警告,部分开启严格错误拦截的运行环境会直接中断脚本执行,根本无法走到调用Telegram接口的步骤。
  • 非核心但需要注意的兼容问题
    直接通过GET方式拼接请求参数调用接口,虽然可以满足短内容的发送需求,但如果后续发送的图片说明文字较长、包含特殊转义字符,要注意Telegram对GET请求的URL长度限制;同时要确保填写的图片链接是公网可无权限访问的直链,不然Telegram服务端拉取不到图片资源也会发送失败。

修正后的无cURL版本代码

function suspendido($chat_id, $foo) 
{
  $TOKEN = "你的实际Bot Token";
  $TELEGRAM = "https://api.telegram.org:443/bot$TOKEN"; 
  $photo_url = "https://zrabogados-pruebas.xyz/bot/404.png";
  $query = http_build_query(array(
    'chat_id' => $chat_id,
    'photo' => $photo_url,
    'caption' => $foo,
    'parse_mode' => "HTML",
  ));
  $response = file_get_contents("$TELEGRAM/sendPhoto?$query");
  return $response;
}

调试提示:调用接口后建议直接打印返回值内容,Telegram服务端会在返回的JSON结构中明确标注具体的错误原因,包括权限不足、Token错误、图片链接不可访问等常见问题,可直接根据返回值定位问题,不用反复修改代码排查。
补充说明:sendPhoto接口的caption参数最大支持1024字符,如果需要发送的文字内容过长,需要拆分消息发送。

内容的提问来源于stack exchange,提问作者JuanFernandoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 00:45:03