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
相关产品推荐
相关产品推荐

