You need to enable JavaScript to run this app. 使用MadelineProto下载Telegram频道照片未生成文件问题排查与解决
优惠活动
大模型
产品
解决方案
定价
更多

使用MadelineProto下载Telegram频道照片未生成文件问题排查与解决

MadelineProto 频道照片下载问题排查与实现

核心问题原因

  • 传入downloadToFile的参数不符合接口要求:你当前传入的$message是messageMediaPhoto结构,并非MadelineProto可直接识别的照片对象或完整消息对象。getHistory返回的messages[0]为完整message对象,照片资源嵌套在media字段下,此处属于取数层级错误,直接传messageMediaPhoto会导致方法无法识别嵌套的照片资源,出现静默失败,不生成文件也无明显报错。
  • 未指定照片下载尺寸:Telegram照片存在多档分辨率(你返回的元数据包含i/m/x三种类型),MadelineProto下载照片时必须明确指定尺寸类型,否则无法匹配对应文件分片。
  • 次要排查点:如果输出路径/tmp.png未给PHP进程开放写入权限,也会导致文件无法生成。

修正后的实现代码

<?php
if (!file_exists('madeline.php')) {
    copy('https://phar.madelineproto.xyz/madeline.php', 'madeline.php');
}
include 'madeline.php';

$MadelineProto = new \danog\MadelineProto\API('session.madeline');
$MadelineProto->start();

$channel = '@example';
$offset_id = 0;
$limit = 1;

$messages_Messages = $MadelineProto->messages->getHistory([
    'peer' => $channel,
    'offset_id' => $offset_id,
    'offset_date' => 0,
    'add_offset' => 0,
    'limit' => $limit,
    'max_id' => 0,
    'min_id' => 0,
    'hash' => 0
]);

$latestMessage = $messages_Messages['messages'][0];

// 校验最新消息是否为带照片的媒体消息
if (!isset($latestMessage['media']['_']) || $latestMessage['media']['_'] !== 'messageMediaPhoto') {
    die('频道最新消息不是照片类型');
}

// 下载方式1:传入完整消息对象,自动识别照片资源
$MadelineProto->downloadToFile(
    $latestMessage,
    '/tmp.png',
    // 指定要下载的尺寸,可选值对应元数据中的type字段:i(缩略图)/m(中等尺寸)/x(高清尺寸)
    ['photo_size' => 'x']
);

// 下载方式2:单独提取照片对象下载,效果与方式1完全一致
// $photo = $latestMessage['media']['photo'];
// $MadelineProto->downloadToFile($photo, '/tmp.png', ['photo_size' => 'x']);

额外排查建议

  • 可先将输出路径改为当前PHP运行目录下的文件(如./test.png),排除系统路径权限不足的问题
  • 下载完成后可通过var_dump(file_exists('/tmp.png'));验证文件是否成功生成
  • 可通过遍历$latestMessage['media']['photo']['sizes']获取当前照片所有可用的尺寸类型,按需选择下载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 03:36:05