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

如何在另一PHP文件中调用Telegram API解码后的JSON数据?

问题分析

直接通过include/require主文件无法获取解码后的数据,核心原因有两个:

  1. 当第二个文件引入主文件时,主文件会重新执行所有代码——如果第二个文件并非直接接收Telegram的POST请求,php://input会是空值,导致$update为null。
  2. 即使是同一个请求,php://input只能被读取一次,主文件已经读取后,第二个文件再调用file_get_contents("php://input")会拿不到数据。
解决方案

以下是三种可行的实现方式,按代码规范性排序:

方案一:模块化封装推荐

把Telegram更新的获取、解码逻辑抽成独立文件,通过静态变量缓存结果,避免重复读取和解析:

1. 创建telegram-handler.php

<?php
date_default_timezone_set("Asia/Tehran");

// 静态变量缓存已解析的更新,避免重复读取php://input
static $cachedUpdate = null;
static $cachedApiUrl = null;

if ($cachedUpdate === null) {
    $input = file_get_contents("php://input");
    file_put_contents('result.txt', $input . PHP_EOL . PHP_EOL, FILE_APPEND);
    $cachedUpdate = json_decode($input, true);
    $cachedApiUrl = "https://api.telegram.org/bot" . API_TOKEN . "/";
}

// 提供全局可调用的变量
$update = $cachedUpdate;
$api_url = $cachedApiUrl;

2. 主文件引用

<?php
require 'functions.php';
require 'telegram-handler.php';

// 直接使用$update和$api_url即可

3. 第二个文件引用

<?php
// 注意路径正确性,推荐用绝对路径避免问题
require __DIR__ . '/../telegram-handler.php';

// 直接使用$update变量

方案二:函数返回结果

通过函数封装逻辑,调用时获取解析后的更新:

1. 创建telegram-functions.php

<?php
date_default_timezone_set("Asia/Tehran");

function getTelegramUpdate() {
    static $update = null;
    if ($update === null) {
        $input = file_get_contents("php://input");
        file_put_contents('result.txt', $input . PHP_EOL . PHP_EOL, FILE_APPEND);
        $update = json_decode($input, true);
    }
    return $update;
}

function getTelegramApiUrl() {
    return "https://api.telegram.org/bot" . API_TOKEN . "/";
}

2. 主文件调用

<?php
require 'functions.php';
require 'telegram-functions.php';

$update = getTelegramUpdate();
$api_url = getTelegramApiUrl();

3. 第二个文件调用

<?php
require __DIR__ . '/../telegram-functions.php';

$update = getTelegramUpdate();
// 使用$update处理逻辑

方案三:全局变量快速解决不推荐,耦合性高

在主文件中将$update声明为全局变量,第二个文件引入后直接调用:

1. 修改主文件

<?php
require 'functions.php';
date_default_timezone_set("Asia/Tehran");
$input = file_get_contents("php://input");
file_put_contents('result.txt', $input . PHP_EOL . PHP_EOL, FILE_APPEND);

// 声明全局变量
global $update;
$update = json_decode($input, true);
$api_url = "https://api.telegram.org/bot" . API_TOKEN . "/";

2. 第二个文件调用

<?php
include '../main.php';
// 引入全局变量
global $update;

// 使用$update变量
注意事项
  • 确保API_TOKEN在所有引用的文件中可访问,比如将其定义在functions.php或独立的配置文件中。
  • 引用文件时优先使用绝对路径(如__DIR__拼接路径),避免相对路径导致的文件找不到问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:45:39