我尝试通过 Telegram 机器人发送照片,所以我编写了代码(其中一部分):
$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。 有人可以帮我解决这个问题吗?
我尝试添加 CURLOPT_SSL_VERIFYHOST false, CURLOPT_SSL_VERIFYPEER false 但没有结果
这里的部分问题是,当不支持(并且您不需要)时,您尝试将远程图像作为curl资源打开。
sendPhoto 的 Telegraph 文档说
您可以只传递图像 URL,而不是提供本地路径和文件名
所以你需要的是:
$arrayQuery = array(
"chat_id" => CHAT_ID,
"photo" => $img_path,
"caption" => $caption,
"parse_mode" => "HTML",
"show_caption_above_media" => True,
);