﻿喧喧 Windows 一键安装包 PHP2Shell 手动补丁说明（r2）

一、适用范围
本包适用于喧喧 7.3、9.6 Windows x64 ZBox 一键安装包。
官方 7.3 与 9.6 安装包的 bin\php 运行时完全相同，原 PHP 均为 7.4.30 ZTS；
本包将其替换为带 PHP2Shell 缓解补丁的 PHP 7.4.33-pl1 ZTS（VC15）。

二、包内文件
php\php.exe                  PHP 命令行程序
php\php-win.exe              PHP 无窗口命令行程序
php\php7ts.dll               PHP 7.4 ZTS 核心运行时（含修复）
php\php7apache2_4.dll        Apache 2.4 的 PHP 模块（与核心配套）

本包只包含以上 4 个文件，不包含 php.ini，也不会覆盖 php.ini、ionCube、
mbstring、curl、gd、ldap、sockets、OPcache 等其他文件或扩展。

三、安装前准备
1. 在 ZBox 面板中点击“停止服务”，确认 Apache 已停止。
2. 找到喧喧安装目录下的 bin\php 文件夹。
   默认可能是 D:\zbox\bin\php；如果安装在其他盘，以实际路径为准。
3. 先备份整个 php 文件夹：
   在 bin 目录中复制 php，粘贴后改名为 php_bak_20261026。
   例如：D:\zbox\bin\php_bak_20261026
4. 确认备份中有原来的 php.exe、php7ts.dll、php7apache2_4.dll。

四、手动替换步骤
1. 解压本补丁包，进入解压后的文件夹。
2. 复制包内的 php 文件夹。
3. 打开喧喧安装目录下的 bin 文件夹，例如 D:\zbox\bin。
4. 粘贴 php 文件夹。Windows 询问是否替换目标中的文件时，选择“替换目标中的文件”。
   注意：这是合并覆盖，只替换本包内的 4 个同名文件；不要删除整个 php 文件夹，
   也不要删除或改名 php.ini。
5. 确认以下 4 个文件已经更新：
   bin\php\php.exe
   bin\php\php-win.exe
   bin\php\php7ts.dll
   bin\php\php7apache2_4.dll
6. 回到 ZBox 面板，点击“启动服务”。

五、安装后验证
1. 打开浏览器访问：
   http://127.0.0.1/xxb/
   或使用原来的访问地址。
2. 确认页面可以打开，管理员可以登录。
3. 打开首页、个人资料、用户管理、参数设置等页面。
4. 上传一个文件并下载，确认文件功能正常。
5. 使用喧喧客户端登录并发送消息，确认客户端正常。

技术支持可选复核（普通用户可跳过）：
在命令提示符中进入 bin\php，执行：
   php.exe -n -v
应显示 PHP 7.4.33 ... ( ZTS )。-n 表示不加载 php.ini，避免现场配置路径干扰。

再执行：
   php.exe -n -r "echo ini_get('max_multipart_body_parts'), PHP_EOL;"
应输出 -1。

如需确认 ionCube、OPcache 等扩展仍能加载，执行：
   php.exe -m
输出中应包含 ionCube Loader 和 Zend OPcache（如果现场启用了 OPcache）。

说明：max_multipart_body_parts 为 -1 时，实际上限是
max_input_vars + max_file_uploads（默认 1000 + 20 = 1020），不是“无限制”。
这是本次 PHP2Shell 缓解的一部分。若业务确实需要更多分片，再由技术支持评估调整。

六、回滚方法
1. 在 ZBox 面板停止服务。
2. 进入 bin 目录。
3. 将当前 php 文件夹改名为 php_new_bak。
4. 将 php_bak_20261026 改名为 php。
5. 在 ZBox 面板启动服务。
6. 访问 http://127.0.0.1/xxb/，确认页面和客户端恢复正常。

七、常见问题
1. 替换时提示“文件正在使用”：
   说明 Apache/PHP 仍在运行。停止服务后重试；仍被占用可重启 Windows 后再替换。
2. 启动后页面打不开：
   先按第六节回滚，再把以下日志发给技术支持：
   ZBox 安装目录\tmp\logs\apache\error_日期.log
   ZBox 安装目录\tmp\logs\php\php_error
3. 页面能打开但部分功能异常：
   确认 php.ini 没有被覆盖；确认 ext 目录中的其他扩展仍在；
   确认 4 个文件是成套替换，没有只替换其中一个。
4. 提示缺少 VCRUNTIME140.dll：
   安装 Microsoft Visual C++ 2015-2022 Redistributable x64 后重试；
   ZBox 的 bin\vc 目录中也带有 VC_redist.x64.exe。

八、注意事项
1. 必须在停止 ZBox/Apache 后替换文件，否则文件可能被占用，替换不完整。
2. 不要只替换其中一个核心文件。php7ts.dll 与 php7apache2_4.dll 必须成套替换；
   php.exe、php-win.exe 用于保持命令行版本一致。
3. 不要删除 php.ini。ZBox 的实际配置在 bin\php\php.ini，本包不包含该文件。
   安装包内自带的 bin\php\php.ini 是构建产物，含构建机路径，不能拿来覆盖现场配置。
4. 本包仅适用于 Windows x64 ZBox 的喧喧 7.3、9.6；不适用于 Linux、XAMPP 或源码包部署。
5. 本包是 PHP 7.4 的过渡缓解方案，不等同于 PHP 官方恢复对 7.4 的长期支持。
   条件允许时应升级到喧喧 11.1。

九、文件 SHA256
php\php.exe                f776d222b1695aab85153ec7ecc8558e865754f36b1e73678e4d6b49515b89b9
php\php-win.exe            b7fe5905ae7683f8223ed36f85cfc4550fce366d564ea4416d0d45898c6a947c
php\php7ts.dll             455a92eb5aea6c50d7a26081121f5d722f274e316a597a483ed7617a5e0ed4d1
php\php7apache2_4.dll      7a0d26b9f2cdab5d7149e86c1eec848e1012c9a553498783fdfa06fd1ac41737

如果技术支持要求校验，可在命令提示符中执行：
   certutil -hashfile php7ts.dll SHA256
其他文件同样处理。
