xiebruce / PicUploader

一个还不错的图床工具,支持Mac/Win/Linux服务器、支持压缩后上传、添加图片或文字水印、多文件同时上传、同时上传到多个云、右击任意文件上传、快捷键上传剪贴板截图、Web版上传、支持作为Mweb/Typora发布图片接口、作为PicGo/ShareX/uPic等的自定义图床,支持在服务器上部署作为图床接口,支持上传任意格式文件。
https://www.xiebruce.top/17.html
MIT License
1.19k stars 169 forks source link

Update SettingController.php #42

Closed tt-sevth closed 4 years ago

tt-sevth commented 4 years ago

fix bug on php 7.4

在我的 Mac 10.14.6上,通过brew安装php默认为最新版本,上传文件时,会触发 php 的一个 notice

Notice: Trying to access array offset on value of type bool

定位文件位置 /PicUploader/settings/SettingController.php Line 33

改动如下:

if(is_array($settings)) {
    $this->storageTypes = $settings['storageTypes'];
}

其实就本身这个提示来说不是什么大问题,但是在自动粘贴的时候会附带两条这样的提示信息,影响使用。

xiebruce commented 4 years ago

我这边是没有这个bug的,是不是你的配置有什么问题?建议更新最新代码,再备份一下config-local.php,然后使用最新代码的config.php文件复制一份为config-local.php,再把前面备份的老config-local.php手动搬到新config-local.php上。

如果你是用web版配置的,可以试试去config/.settings里删除一下配置再重新配置(删除前先备份一下,以防要找参数)。

因为$settings['storageTypes']中,很明显storageTypes是字符串,它报错是说使用了布尔类型的值作为键去访问数组,可是storageTypes不可能是布尔型呀,我也是用brew能安装到的最新的php7.4.3测,没有问题呀,我用了error_reporting(E_ALL);设置都不报这个notice。

tt-sevth commented 4 years ago

我也觉得这个问题很奇怪,在今天凌晨的时候拉取的最新代码,然后是直接修改的config-local.php文件。

经过我的一些简单测试,这个存在于右键上传和AIfred上传的时候会出现这个问题。如果直接搭配typora 是不会出现这个提示的。(有空我再排查一下)

image

tips: 感谢作者大大的付出, star 为敬。

xiebruce commented 4 years ago

@sevth-developer 感谢star!那就麻烦你有空排查一下出现这个问题的原因,因为你加个is_array()判断只是让错误不发生,但为什么会有这个错误还是不清楚。

xiebruce commented 4 years ago

@sevth-developer 我可能知道原因了,你用的图床是不是google drive / dropbox / onedrive / imgur 中的一种?有没有试过其它图床?

tt-sevth commented 4 years ago

@xiebruce 没有呀,我用的是 Ucloud的对象存储。

tt-sevth commented 4 years ago

@xiebruce 而且是只配置了这一个,其他的都没有动过。

xiebruce commented 4 years ago

@sevth-developer 可以麻烦帮忙调试一下吗?或者如果你调试不出来,我可以远程调一下,因为我这边没报这个错,如果需要远程帮助的话,我现在刚好有空,可以把Teamviewer账号密码直接在这里回复我,我连接上后,马上删除掉就行。

tt-sevth commented 4 years ago

@xiebruce 最近在写别的东西,没注意看消息,因为暂时只有我这有问题,但是不影响使用,不急的。我自己会尝试调试一下叭,查不出来问题我再联系您。感谢!

xiebruce commented 4 years ago

@sevth-developer 好的!

tt-sevth commented 4 years ago

我想我可能找到问题的原因了,今天用 phpstorm 断点调试了一下,结果如下: image image

查看图片 查看图片

其中 SettingController控制器被多次调用,第一次为读取配置文件,使用 require_once 取到了文件,后面进行历史记录存储读取配置时,此时require_once 返回值为 true,所以在$this->storageTypes = $settings['storageTypes'] 这里会出现提示。

解决办法:

不知道这个情况在其他的PHP版本是否存在 :D

xiebruce commented 4 years ago

感谢帮忙找出问题,确实是像你说的这样,在其它版本php应该也会有这个问题,比如我7.3,我用if($settings===true)来判断,确实有两次进入了if,打印出来是true。

那我就把require_once改为require吧,否则当不使用网页版时,数据库配置就会获取不到(使用网页版配置时会读json配置文件所以不会有问题),所以我就不用你这个pr了,你更新一下代码即可!

tt-sevth commented 4 years ago

好的!