【已解决】 php8.0报错:Trying to access array offset on value of type null
七娃博客
3,998人阅读
wp升级了php版本到8.0,发现后台又出现了bug:Trying to access array offset on value of type null,也是醉了!
然后打断点找到问题所在位置:
$attachment_id_sang = media_handle_upload( 'sang', 0 ); //上传图片,返回的是 附件的ID
media_handle_upload方法是用来上传图片,(int|WP_Error) 成功返回附件ID,失败返回wp_error错误对象。
所以升级之后返回的都是wp_error,打印是一个数组array,里面有error信息
换个思路,是不是没用找到input的name导致的,不能捕获到这个name="sang"的内容?
然后测试一下,先判断这个属性input出现的前提条件:
if(!empty( $_POST["sangFlag"] ) && get_option("sangFlag") == 1){ $attachment_id_sang = media_handle_upload( 'sang', 0 ); //上传图片,返回的是 附件的ID
然后再获取上传,保存之后发现报错消失了。卧槽,还真是这个原因!
页面里面的输入框是动态渲染的,当没有渲染时,php直接获取输入框的file文件并上传,会找不到这个输入框。这个时候就会返回一个wp_error对象object。并抛出异常:Trying to access array offset on value of type null。我是爱分享爱折腾的陈小知,感谢你的阅读。
以为就这样解决了问题,可是七娃又没有想到,用户后台切换开关,渲染之后依旧会报同样的错误,看来我并没有从根本上解决问题。
使用isset先判断值不为null,满足条件的话再更新图片。代码如下:
if(isset($_POST['sangwx'])){ $attachment_id_sang1 = media_handle_upload( 'sangwx', 0 ); //上传图片,返回的是 附件的ID if(gettype($attachment_id_sang1)!='object'){ $sang_url1 = wp_get_attachment_url($attachment_id_sang1); //获取 图片的地址 } if(!empty($sang_url1)){ update_option("sangwx_img",$sang_url1); //如果图片地址在在,就将图片的地址写入到数据库 } }
终于解决了!太难了,对于没有php基础了,改这些问题,完全靠猜。
主题开源不易,支持一下作者吧!
使用支付宝打赏
使用微信打赏
评论 | 0 条评论
登录之后才可留言,前往登录