HUNYING / GET STARTED

上传文件,和队友见面。

魂影聊天室 · PHP 8.2 无数据库版
版权归魂影技术论坛。

一、上传和打开

  1. 在电脑解压源码包,打开里面的 hunying 文件夹。
  2. 使用主机面板的“文件管理”上传里面的全部文件和文件夹,包括 assets、storage、.htaccess。放到网站根目录,或单独的 chat 子目录。没有数据库配置,也不需要安装软件依赖。
  3. 在虚拟主机面板把 PHP 版本设为 8.2,为域名申请并开启 SSL / HTTPS。
  4. 访问 https://你的域名/。如果放在 chat 子目录,就访问 https://你的域名/chat/。
  5. 访问同目录下的 check.php 环境检查页,确认 PHP、HTTPS、写入和上传条件。建议让服务商设置 upload_max_filesize 至少 3M、post_max_size 至少 4M。
  6. 先用同一网络的两台设备测试,再用 Wi-Fi 和手机流量分别测试。务必实际听到双方声音,连接状态数字不能代替听音验收。

首次访问会自动准备文件存储,无需安装向导。需要 PHP 能写入 storage 目录。正常使用不需要编辑源码。

二、创建频道和邀请朋友

点击“创建频道”,填写频道名称和自己的用户名称。公开频道直接从大厅加入;私密频道使用 4–12 位数字私密码。密码留空时会随机生成,并在创建后显示一次,请保存好。

点击“复制邀请”发给朋友。私密频道的密码请单独发送,邀请链接不包含密码。朋友必须填写自己的用户名称和私密码;同频道不能重名。

无需账号,房主身份保存在当前浏览器 Cookie。不要清除它;更换设备或浏览器不会自动找回房主身份。同一浏览器身份在一个频道只允许一个页面在线,新页面加入会取代旧页面。不要在同一个浏览器里打开多个页面冒充不同队友,请用不同浏览器或设备测试。

三、开麦、按键说话和录音

  1. 进频道后默认“仅收听”。点击“开启麦克风”,在浏览器提示中选择允许。
  2. 点击声音设置,选择耳机麦克风。避免选择“立体声混音”、虚拟回环或系统输出设备。
  3. 默认自由麦,也可切换为按键说话。点击设置按键,再按自己想用的单键。默认 V。
  4. 按键仅在当前网页获得焦点时有效。切换到游戏后请用自由麦;纯网页不能注册系统全局热键。松键、切后台或失去焦点后会关闭按键发声,避免卡住一直说话。
  5. 手机使用按键模式时,可按住页面下方的“按住说话”。手机锁屏或切后台会受浏览器和系统限制,可能断开。
  6. 点击“录制语音”开始留言,再点击“停止并发送”。最长 60 秒、2 MB。录音时不会把同一麦克风同时送到实时通话。录音需要麦位及语音、文字权限,发送失败可重试。

名字后的小点会在实际收到声音时变绿,静音时为灰色。这是音量活动指示,不是声纹识别,噪声或共享音乐也可能点亮。文字与录音发送都由服务器限制为至少间隔 5 秒。

四、游戏音效和音乐分享

本程序默认只请求麦克风,不会主动采集电脑系统声音。开启回声消除、降噪和自动增益,并佩戴耳机,可以减少游戏外放串入麦克风。物理环境嘈杂、设备回环、声卡驱动混音时,网页不能保证完全分离人声。

浏览器无法列出并采集任意桌面软件进程。可选的“选择音乐标签页音频”适用于支持该能力的桌面 Chrome / Edge:先在另一个标签页打开音乐,再选择那个标签页,并勾选“共享标签页音频”。不要选择整个屏幕。代码不会发送视频画面;浏览器仍会显示共享授权提示。

自己讲话时,程序会自动降低自己所共享的音乐音量。浏览器或系统不提供标签页音频时,这个可选功能不可用。其他人的共享音乐不会由你的设备远程调整。

五、房主和管理员

能力房主二级管理员
语音 / 文字禁言、解除禁言普通成员及管理员仅普通成员
删除公屏文字 / 录音、上下麦位可管理全部成员仅普通成员及本人消息
踢出频道有房主单独授权,默认有
永久封禁频道身份有,二次确认房主单独授权,默认无
任命 / 撤销管理员、分配踢人和封禁权限有无
转让房主、公开 / 私密切换、锁定麦位、解封有无
查看最近 200 次操作日志有有

点击队友右侧“⋯”管理。永久封禁和转让房主都会再次确认。日志记录操作者、时间、对象和原因。被踢者 60 秒内不能重进;禁言会在同一身份重新加入后保留。

锁定麦位会阻止普通成员新上麦,已在麦位的人保留麦位。管理员可单独让成员下麦或抱上麦。转让房主后,原房主变为普通成员。

永久封禁针对匿名 Cookie 身份,在频道销毁或房主解除前持续有效。没有登录体系就无法可靠阻止清除 Cookie 后换身份绕过。点对点语音由标准客户端执行收发两端静音;若要抵抗恶意改造客户端并强制隔离媒体,需要额外的账号体系和中心媒体服务,普通 PHP 文件方案不具备这些条件。

六、实时语音跨网络为什么可能接不通

网页实时语音使用 WebRTC。PHP 负责频道和连接协商,实际声音通过浏览器点对点传输,不经 PHP 服务器持续转发。默认 STUN 只帮助寻找直连地址,不能保证所有 NAT、防火墙、企业网络或运营商之间互通。

若文字正常、录音能播放,但实时语音一直连不上,请让主机服务商配置 TURN 中继。普通 PHP 虚拟主机通常不能自己运行 TURN 服务。需要额外的 TURN 服务或具备相应条件的服务器,可能产生费用。本源码不能承诺只上传到任意虚拟主机就能跨所有网络通话。

你可以把下面这段交给服务商:

请提供并验证可用的 WebRTC TURN 服务,在 config.php 填写 turn_urls、turn_username 和 turn_credential。如果支持 coturn REST 临时凭证,则填写 turn_secret,固定账号可留空。支持 UDP / TCP 的 turn: 地址及 TLS 的 turns: 地址更便于跨受限网络连接。必要时测试 relay_only=true。不要把管理密钥填写到前端 JavaScript。

程序仅将所需的 ICE 凭证交给浏览器,TURN 服务端密钥保留在 PHP。公开站点优先使用短期凭证;固定 TURN 账号会被浏览器用户看到,需设置配额和来源限制。默认 STUN 服务是否能在你的所在地访问,也要实际验证。

七、清理、容量与性能

八、常见问题

现象处理方法
打开网页显示 PHP 源码立即停止使用,让主机服务商开启 PHP 解析。不要在未解析 PHP 的目录存放本程序。
500 错误或无法写入确认 PHP 8.2、storage 目录可写、主机空间未满。让服务商查看 PHP 错误日志。若 Apache 不支持随包的 .htaccess 指令,让服务商修改兼容配置;不要取消 storage 的访问保护。
麦克风按钮不工作用 HTTPS 打开,在地址栏允许麦克风。内嵌浏览器可改用系统浏览器;检查系统麦克风权限。
实时语音没有声音确认双方已上麦、开启麦克风、未被禁言;检查收听音量,点击“恢复声音”和“重新连接语音”。不同网络仍失败时配置 TURN。
录音不能上传 / 播放检查 file_uploads、upload_max_filesize 和 post_max_size。WebM、Ogg、MP4 支持由浏览器决定,旧 Safari 可能无法播放其他浏览器录制的格式;请升级浏览器。文件过期或被删除后不可播放。
游戏声音盖住人声选择真实的耳机麦克风而非回环设备,佩戴耳机、降低外放,开启降噪。音乐分享只选音乐标签页。
手机切后台就断线这是系统对后台网页的限制。保持页面前台;回到页面后重新加入。纯网页不能保证锁屏持续通话。
提示另一页面已加入关闭同浏览器中这个频道的重复页面,再重新加入。每个真实用户用自己的设备或浏览器。
更新后样式不一致上传完整 assets 目录和 PHP 文件;让服务商同时提升 config.php 的 version,刷新页面。不要只上传部分文件。

九、备份和升级

备份整个程序目录。升级时保留 storage 里的已有数据及 secret.php,这个密钥决定浏览器身份。请保护 storage 和备份,不要把运行中的数据重新打包公开分享。源码包不含运行数据、测试文件或升级日志。

本版本具备基础访问校验、CSRF 防护、内容转义、文件锁、上传格式与大小限制、角色授权和限流。匿名公开站点仍需服务商提供 HTTPS、主机安全和网络层防刷;没有账号的匿名身份和小队直连架构有上述边界。

返回魂影聊天室 ↗