PbootCMS附件上传失败报错UNKNOW: Code: 8192; Desc: stripos():

image

问题原因

  1. PHP版本兼容性问题
    错误提示表明,在未来的PHP版本中,stripos()函数的第二个参数(即$ext)如果是一个非字符串值,将被解释为字符串。当前的行为可能会导致隐式类型转换,从而引发警告或错误。

  2. 代码中的问题
    在文件 /core/function/file.php 的第 176 行:

    php
     
    if (stripos($types, $ext) !== false)

    $ext 可能不是一个字符串,而是一个整数或其他类型的值。这在旧版PHP中可能不会报错,但在较新的PHP版本中会触发警告。


解决方法

按照提示,可以通过显式调用 chr() 函数将 $ext 转换为字符,以确保其行为与当前一致。修改后的代码如下:

if (stripos($types, chr($ext)) !== false)

修改步骤

  1. 打开文件 /core/function/file.php
  2. 定位到第 176 行,找到以下代码:
    if (stripos($types, $ext) !== false)
  3. 将其替换为:
    if (stripos($types, chr($ext)) !== false)
  4. 保存文件并重新测试上传功能。

注意事项

  1. 确认 $ext 的数据类型
    如果 $ext 是一个整数(例如 ASCII 值),使用 chr() 是合适的。但如果 $ext 本身应该是字符串,则需要检查其赋值来源,确保逻辑正确。

  2. 代码兼容性
    如果项目需要支持多个PHP版本,建议在代码中添加注释,说明此修改是为了兼容更高版本的PHP。

  3. 单元测试
    修改后,建议对文件上传功能进行充分测试,确保没有引入新的问题。

posted @ 2025-12-02 11:54  Henry王  阅读(5)  评论(0)    收藏  举报