You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地正常的PHP CURL Telegram机器人代码,远程服务器报curl_error #26

PHP Telegram机器人sendPhoto接口部署后触发Curl错误26排查

问题描述

本地环境运行正常的Telegram机器人发送图片代码,部署到远程服务器后触发Curl错误26。已尝试设置CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER为false,问题仍未解决。

代码片段:

$img_path = "https://www.example.com/path/to/file.jpg";
$method = "sendPhoto";
$arrayQuery = array(
    "chat_id" => CHAT_ID,
    "photo" => curl_file_create($img_path, $img_mime, $img_name),
    "caption" => $caption,
    "parse_mode" => "HTML",
    "show_caption_above_media" => true,
);
try {
    $ch = curl_init('https://api.telegram.org/bot'.BOT_TOKEN.'/'.$method);
    if ($ch === false) {
        throw new Exception('failed to initialize');
    }
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $arrayQuery);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    $res = curl_exec($ch);
    if ($res === false) {
        throw new Exception(curl_error($ch), curl_errno($ch));
    }
} catch(Exception $e) {
    trigger_error(sprintf(
    'Curl failed with error #%d: %s', $e->getCode(), $e->getMessage()),
    E_USER_ERROR);
} finally {
    if (is_resource($ch)) {
        curl_close($ch);
    }
}

问题分析与解决方案

Curl错误26对应的是CURLE_READ_ERROR,本质是程序尝试读取要上传的文件时失败。结合代码和场景,核心问题出在**curl_file_create的用法错误**:

  • curl_file_create函数用于封装本地文件为CURLFile对象,专门处理本地文件上传。但你的$img_path是远程HTTPS URL,服务器环境下curl无法将远程URL当作本地文件读取,这就是触发错误26的直接原因。
  • 本地环境可能因特殊配置(如curl允许从URL读取文件、本地网络无障碍访问目标图片URL)暂时掩盖了问题,但服务器环境的限制会暴露这个错误。

修复代码

Telegram Bot API的sendPhoto接口本身支持直接传入远程图片URL作为photo参数,无需用curl_file_create处理。修改代码如下:

$img_path = "https://www.example.com/path/to/file.jpg";
$method = "sendPhoto";
$arrayQuery = array(
    "chat_id" => CHAT_ID,
    "photo" => $img_path, // 直接传入远程URL
    "caption" => $caption,
    "parse_mode" => "HTML",
    "show_caption_above_media" => true,
);
// 后续curl逻辑保持不变

额外排查点(若需上传本地文件)

如果需求是上传本地图片而非远程URL,需检查:

  1. 服务器上图片文件的绝对路径是否正确,避免用相对路径导致找不到文件
  2. PHP进程是否有读取该文件的权限(建议文件权限设为644,目录权限设为755)
  3. 确认文件确实存在于服务器的对应路径下

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:31:14