你遇到的错误是在 SMF 安装完成后的清理阶段(DeleteInstall()) 触发的,核心问题仍然是:
Call to undefined function idna_maps_not_std3()
同时伴随一个次要警告:
session_destroy(): Trying to destroy uninitialized session
🔍 错误链分析
SMF 安装快结束时,调用 DeleteInstall()(删除安装文件前做一些清理)
其中会执行计划任务:scheduled_fetchSMfiles() → 尝试从 https://www.simplemachines.org/ 获取更新信息
该过程需要处理国际化域名(IDN),调用 idn_to_ascii('www.simplemachines.org')
SMF 使用自己的 Class-Punycode.php 实现 IDN 转换
但 Class-Punycode.php 依赖 Subs-Charset.php 中定义的函数 idna_maps_not_std3()
问题:Subs-Charset.php 没有被加载!
因为安装脚本 install.php 没有像正常论坛那样完整初始化 SMF 环境
所以函数未定义 → Fatal Error
💡 这本质上是一个 SMF 安装程序的 bug 或设计缺陷:在未完全加载核心函数的情况下,尝试执行需要完整环境的操作。
✅ 解决方案(推荐顺序)
✅ 方法 1:跳过"获取远程文件"步骤(最安全、最快)
在安装最后一步,不要勾选"删除 install.php"或"检查更新"之类的选项(如果界面还有)。
或者更直接:
在运行安装前,临时禁用远程请求
编辑 install.php,找到函数 scheduled_fetchSMfiles() 的调用位置(大约在 DeleteInstall() 中),注释掉它。
具体操作:
打开 C:\inetpub\wwwroot\smf\install.php
搜索:
php
编辑
scheduled_fetchSMfiles();
将其注释掉:
php
编辑
// scheduled_fetchSMfiles(); // 临时禁用,避免 IDN 错误
重新运行安装(确保 Settings.php 已删除)
安装完成后,手动删除 install.php
✅ 这不会影响论坛功能,只是跳过了安装时的一次性更新检查。
✅ 方法 2:手动加载缺失的函数(修复环境)
在 Class-Punycode.php 顶部强制包含 Subs-Charset.php。
编辑 C:\inetpub\wwwroot\smf\Sources\Class-Punycode.php,在 <?php 后添加:
php
编辑
// Fix for missing idna_maps_not_std3 during install
if (!function_exists('idna_maps_not_std3') && file_exists(dirname(__FILE__) . '/Subs-Charset.php')) {
require_once dirname(__FILE__) . '/Subs-Charset.php';
}
保存后重试安装。
⚠️ 注意:确保 Subs-Charset.php 文件确实存在且完整(从官方包重新上传一次更保险)。
✅ 方法 3:安装完成后手动处理
如果你已经卡在错误页面:
手动创建 Settings.php(如果还没生成)
可从其他成功安装的 SMF 站点复制模板,或等下提供内容
手动删除 install.php
cmd
编辑
del C:\inetpub\wwwroot\smf\install.php
访问论坛首页 index.php,应该能正常进入
进入 管理中心 → 通知和邮件 → 获取支持信息,此时环境已完整,不会再报错
🧹 附带警告:session_destroy() 问题
text
编辑
PHP Warning: session_destroy(): Trying to destroy uninitialized session
这是因为在 install.php 中调用了 session_destroy(),但之前没调用 session_start()。
无需担心:这只是警告,不影响功能。SMF 安装程序在某些路径下会尝试清理会话,但会话可能根本没启动。
如果你想消除它,可以在 Sources/Subs-Auth.php 第 127 行附近加判断:
php
编辑
if (session_status() === PHP_SESSION_ACTIVE) {
session_destroy();
}
但不建议修改核心文件,除非你长期维护此站点。
📌 根本预防措施
表格
问题 建议
idna_maps_not_std3() 未定义 确保 Sources/Subs-Charset.php 完整存在
安装时调用远程 HTTPS 国内服务器常因网络/证书问题失败,建议跳过
临时目录权限问题 设置 sys_temp_dir 并授权(你已处理)
IIS + PHP 环境 使用 PHP 8.2 TS,启用 openssl、mbstring 等
✅ 最终推荐操作流程
备份当前 install.php
编辑 install.php,注释掉 scheduled_fetchSMfiles();
删除已存在的 Settings.php(如果安装中断)
重新访问 install.php 完成安装
安装成功后,手动删除 install.php
进入论坛,检查是否正常
如果你希望我提供一个 已修复的 install.php 片段 或 完整的 Settings.php 模板,请告诉我你的数据库配置(DB 名、用户、前缀等),我可以帮你生成。