上周马马虎虎搭完网站后一直有俩bug,一是网站所有a
标签全都有target="_black"
属性导致网站不管点哪儿都会新开网页影响用户体验;二是启用附件托管类插件后都会出现附件图片无法正常上传的问题,奇怪的是这个bug只会在上传图片时出现,如果是上传其他类型的文件就没问题。网上搜了搜,发现第一个问题似乎是因为网站不是80/443
端口导致的,当时因为还在处理备案所以就暂时没管。
然而今天,处理备案的工作人员打电话说我id快过期了不能备案,于是我一怒之下就租了个国外的服务器懒得折腾了 。迁移完网站后,申请了个SSL
博客挂在了443
上,第一个bug果然就没了,但图片上传问题还是存在,折腾了一会儿也解决了。
首先先看下控制台报错信息:
Uncaught SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at Function.jQuery.parseJSON (jquery.js?v=17.10.30:25)
at c.Uploader.FileUploaded (write-post.php:1105)
at c.Uploader.dispatchEvent (plupload.js?v=17.10.30:1)
at c.Uploader.trigger (moxie.js?v=17.10.30:1)
at v.L.v.onload (plupload.js?v=17.10.30:1)
at v.<anonymous> (moxie.js?v=17.10.30:1)
at Array.<anonymous> (moxie.js?v=17.10.30:1)
at A (moxie.js?v=17.10.30:1)
at Object.l [as inSeries] (moxie.js?v=17.10.30:1)
emmmm... 似乎并没啥卵用,再看看ajax请求:
<br/><b>Warning</b>: getimagesize(/www/wwwroot/blog/usr/uploads/2021/12/30/1640822659.png): failed to open stream: No such file or directory in<b>/www/wwwroot/blog/usr/plugins/VOID/Plugin.php</b> on line <b>270</b><br/>[
"https:\/\/cdn.cirno.me\/usr/uploads\/2021\/12\/30\/1640822659.png",
{
"cid": "77",
"title": "\u8bfe\u8868.png",
"type": "png",
"size": 104826,
"bytes": "103 Kb",
"isImage": true,
"url": "https:\/\/cdn.cirno.me\/usr/uploads\/2021\/12\/30\/1640822659.png",
"permalink": "https:\/\/cirno.me\/attachment\/77\/"
}
]
这里答案就很显而易见了,尽管我们设置了附件远程储存(比如腾讯云cos),这里的getimgsize()
的参数依旧是老typecho的上传路径,这也说明了为啥只有上传图片会报错,因为非图片文件就不会调用这个方法。所以初步判断,应该是一个插件未做此类适配导致的。找了找,果然在网站自带的Void
插件中发现了问题:
里面方法调用的路径一直是Typecho的根目录开头,解决办法也很简单,把__TYPECHO_ROOT_DIR__
改成你远程图片的根目录就行了