aliyunoss php8.*+ null值报错
文章创建于 428 天前, 信息可能已经过时
前言
最近在使用阿里云的 OSS 服务时,发现了一些问题。
当php版本高于8.0的时候 src/OSS/SignerV1.php
中会出现 null
值错误。issue地址
目前已解决。各位更新 2.7.1
版本即可。
问题原因
line 17-20
php
1 | // Credentials information |
php
1 |
|
$token
是一个可选参数,当没有传入时,$token
的值是 null
,所以在 SignerV1.php
中的 strlen($credentials->getSecurityToken())
会报错。
line 25-27
php
1 | $queryString = parse_url($request->request_url, PHP_URL_QUERY); |
这3行代码目的是将url中的参数解析成数组,但是当url中没有参数时,parse_url
返回的是 null
,parse_str
无法解析 null
,所以会报错。
解决方案
只能修改源码,将 null
值的判断加上。
line 17-20
php
1 | // Credentials information |
line 25-27
php
1 | $queryString = parse_url($request->request_url, PHP_URL_QUERY); |
但是我个人比较好奇其他语言的源码是怎么写的,所以我去看了一下 java
的源码,发现 java
的源码中对 null
值的判断是有的。
下面是 java
对于 SecurityToken
的源码部分。
java
1 | public String getSecurityToken() { |
java
1 | public void setSecurityToken(String securityToken) { |
java
1 | public boolean hasSecurityToken() { |
也就是说,在
SignerV1
中,获取 SecurityToken
的时候,会先判断 SecurityToken
是否为 null
,如果不为 null
才会执行后续的操作。但
php
的源码中没有对 null
值的判断,所以会报错。
总结
开猿节流的BUG
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 闲聊茶泡饭!