PbootCMS 附件上传报错 “UNKNOW: Code: 8192” 解决教程

在使用 PbootCMS 时,很多用户在上传附件或文件时可能会遇到如下报错:
上传失败:UNKNOW: Code: 8192; Desc: stripos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior; File: /www/wwwroot/网站域名/core/function/file.php; Line: 176;
这个错误通常出现在 PHP 8.1 及以上版本中,是因为 stripos() 函数在未来版本中会严格要求第二个参数为字符串类型,而 PbootCMS 原有的代码中可能传入了非字符串类型(如整数),导致了警告或上传失败。
家兴网络将详细讲解解决方法,帮助你快速修复附件上传问题。
错误原因分析
stripos() 是 PHP 用于查找字符串的函数,其原型如下:
stripos(string $haystack, string $needle, int $offset = 0): int|false
$haystack:要搜索的字符串$needle:要查找的子字符串
在 PbootCMS 的源码中,附件上传类型检查是这样写的:
if (stripos($types, $ext) !== false)
这里的 $ext 是文件扩展名,某些情况下它可能被处理为整数类型,PHP 8.1 会提示警告,未来版本将严格要求为字符串,从而导致上传失败。
解决方法
打开 PbootCMS 根目录下的
core/function/file.php文件。找到第 176 行左右的以下代码:
if (stripos($types, $ext) !== false)
修改为:
if (stripos($types, chr($ext)) !== false)
这里使用 chr() 函数将整数转换为对应字符,从而保证 stripos() 接收的参数类型正确,避免 PHP 报错。
保存文件后,刷新后台上传页面,测试附件上传是否正常。
注意事项
建议在修改前备份
file.php文件,以防止操作失误导致系统异常。该修改适用于 PHP 8.1 及以上版本,如果你使用的是低版本 PHP,可能不需要此操作。
若修改后仍有报错,可在上传类型检查处打印
$ext和$types变量,确认类型是否正确。
示例:
var_dump($ext, $types); exit;
总结
PbootCMS 附件上传报错 Code: 8192 是 PHP 版本升级导致的兼容性问题。通过将 stripos() 的第二个参数改为字符串类型(使用 chr() 转换),即可彻底解决上传失败问题。
这种修改方式简单高效,适合广大 PbootCMS 用户在 PHP 8+ 环境下使用。
✅ 解决关键点:
错误原因:PHP 8.1 对
stripos()参数类型要求严格修改文件:
core/function/file.php修改方法:
if (stripos($types, $ext) !== false)→if (stripos($types, chr($ext)) !== false