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

SMF论坛jQuery.post请求无法调用已加载全局变量的问题咨询

解决SMF论坛AJAX请求中无法使用全局变量及函数的问题

问题核心在于你通过jQuery.post调用的update.php是独立的PHP脚本,没有加载SMF论坛的核心运行环境,因此$txt、$modSettings、$smcFunc这些全局变量以及allowedTo()这类SMF内置函数都无法直接使用。

解决步骤:

  • 在update.php的最开头引入SMF提供的SSI.php文件,这是SMF专门用于外部脚本集成的核心初始化文件,引入后会自动加载SMF的配置、会话、数据库连接、语言文件等所有核心环境。
    // 根据update.php的实际位置调整路径,如果和SMF根目录同级,直接写文件名即可
    require_once('SSI.php');
    
  • 引入后,你原来的代码就能正常运行了,比如全局变量声明、权限检查、数据库查询都能直接使用:
    global $txt, $modSettings, $scripturl, $user_info,$smcFunc;
    
    loadLanguage('xx');
    
    if (allowedTo('view_attachments') || $modSettings['magnet_guest'])
    {
        $request = $smcFunc['db_query']('', '
            SELECT
                a.id_attach, a.id_msg, a.fileext, a.downloads
            FROM {db_prefix}attachments AS a
            WHERE a.id_msg = {int:message_id}
                AND a.fileext = {string:torrent_ext}
            ORDER BY a.downloads',
            array(
                'message_id' => $cache_msg_id,
                'torrent_ext' => 'torrent',
            )
        );
        // 后续处理逻辑...
    }
    

额外注意事项:

  • 如果不需要SSI.php默认输出的页面头部内容,可以在引入前添加定义:
    define('SMF_SSI_CALLED', true);
    require_once('SSI.php');
    
  • 确保SSI.php的路径正确,避免出现"文件找不到"的错误。如果update.php在SMF子目录下,路径需要写成../SSI.php这类相对路径,或者使用绝对路径。
  • SSI.php会自动维护用户的会话状态,所以$user_info里的用户权限、身份信息都是正确的,无需额外处理会话验证。

内容的提问来源于stack exchange,提问作者TryHackX.org

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:35:17