PbootCMS 附件上传时出现报错 UNKNOW: Code: 8192; Desc: stripos(),通常是因为 PHP 的 stripos() 函数在处理非字符串参数时的行为改变所导致的。从 PHP 7.4 开始,stripos() 函数对非字符串参数的处理方式有所改变,这可能导致旧代码出现问题。

解决方法

  1. 定位问题代码

    • 打开 PbootCMS 的核心功能文件 /core/function/file.php
  2. 查找问题代码

    • 在文件中找到包含 stripos() 函数调用的代码段:
      php
       
      if(stripos($types, $ext) !== false)
  3. 修改代码

    • 将上述代码修改为:
      php
       
      if (is_string($types) && is_string($ext)) {
      if (stripos($types, $ext) !== false) {
      // 继续原有的逻辑
      }
      } else {
      // 处理非字符串的情况,例如转换为字符串
      if (stripos((string)$types, (string)$ext) !== false) {
      // 继续原有的逻辑
      }
      }

    或者简化一点,直接确保 $types 和 $ext 是字符串:

    php
     
    if (stripos((string)$types, (string)$ext) !== false) {
    // 继续原有的逻辑
    }

修改示例

假设原始代码如下:

php
 
if(stripos($types, $ext) !== false) {
// 附件类型匹配,允许上传
}

修改后的代码可以是:

php
 
if (stripos((string)$types, (string)$ext) !== false) {
// 附件类型匹配,允许上传
}

具体步骤

  1. 打开文件

    • 使用文本编辑器打开 /core/function/file.php 文件。
  2. 查找并修改代码

    • 搜索 stripos($types, $ext),找到相关代码段,并进行修改。
  3. 保存文件

    • 保存修改后的文件。
  4. 测试上传

    • 重启 Web 服务器(如 Apache 或 Nginx),然后尝试上传附件,确认问题是否解决。

注意事项

  • 备份文件:在修改任何文件之前,请先备份 /core/function/file.php 文件。
  • 测试环境:建议首先在测试环境中进行修改和测试,确保一切正常后再部署到生产环境。
  • 版本兼容性:如果你的 PHP 版本低于 7.4,这个问题可能不会出现。但是,为了向前兼容,建议还是进行上述修改。

通过以上步骤,你应该能够解决 PbootCMS 附件上传时出现的 UNKNOW: Code: 8192; Desc: stripos() 报错问题。如果问题仍然存在,可以进一步检查其他相关代码或寻求技术支持。