今天在查抄博客附件的时候发现有以前上传的一个注册表导入脚本reg文件丢了,重新上传的时候竟然报错了。
仔细看了才发现是之前安装的Watermark_Reloaded插件致使的毛病,没多想,打开插件源代码看看原因,因为小博不是专注PHP的(不过今天发现PHP的语法跟Java很是相似啊),所以没那么快找到原因,后来阐发多是因为上传了非图片文件,而Watermark_Reloaded又针对所以上传的附件进行查抄并加水印,所以会致使法度出错。
毛病提示
知道原因解决起来就很简单了,通篇看下来,发现毛病的本源是出在doWatermark这个函数里面,这里在对附件进行加水印的操作前底子没有判断是不是图片附件,也许国外人就只上传图片附件,不传其他的吧,这里也不再深究了。
修改体例也很简单,函数默认获得了文件的mime_type,函数如下
public function doWatermark($filepath) {$mime_type = wp_check_filetype($filepath);$mime_type = $mime_type['type'];$options = $this->get_options();$image = $this->getImageResource($filepath, $mime_type);$this->imageAddText($image, $options);return $this->saveImageFile($image, $mime_type, $filepath);}
文件类型的具体返回值不年夜清楚,于是在$mime_type = $mime_type['type'];这一句获得文件类型后面打印了下,发现是imagejpeg2822之类的,这样就好办了,图片文件必定都包含image字样,于是我就在$options = $this->get_options();前面插手if判断语句,小博是好久没碰php了,还只是停留在根本的体会阶段,因此对php函数不是很熟悉,查了w3c的手册,一起头用了substr截取mime前五个字符与字符串image进行比较,发现不克不及正确加水印,可能mime返回值不是字符串或有空格什么的,总之和image不是相等的,无奈这里就直接不消这个了,换个思路,查抄mime里面是否包含image,依然查手册,最后使用了strstr函数,修改函数如下
public function doWatermark($filepath) {$mime_type = wp_check_filetype($filepath);$mime_type = $mime_type['type'];if(strstr($mime_type,"image")){$options = $this->get_options();$image = $this->getImageResource($filepath, $mime_type);$this->imageAddText($image, $options);return $this->saveImageFile($image, $mime_type, $filepath);}}
为了便于读者查看,我将原法度复制过来删除作者的注释,这里其实只用添加一句,在"$options = $this->get_options();"这句前面插手"if(strstr($mime_type,"image")){",在最后再多加一个"}"便可。
其实插件已经很火了,呈现这个毛病也不是致命的,虽然报错但传文件不受影响,不知道是因为其他网友都不传图片文件之外的文件,仍是怎么,在百度、谷歌无果后只有自己修改了,小小经验,希望年夜家批评指教!
固定链接:.poorren/auto-watermark-reloaded-error/