在之前已经发过了一篇关于修改大尺寸图片的文章:[WordPress]大尺寸/大文件图片附件上传失败
但是今天上传大尺寸遇到了新的问题,报的不是413错误,也没有任何错误提示。但是在两周前用户发现上传过相同尺寸的图片,并且正常上传;遂跟踪了一下最近的改动;
发现大概是两周前,为了实现图片相关的功能引入了GD的扩展,就猜测大概是调用到GD的函数时出现错误了,便开始继续追查下去。
从wp-admin/async-upload.php
跟踪到调用_wp_image_editor_choose
的方法时,发现会进行尺寸调整,并且可选两个编辑类分别是WP_Image_Editor_Imagick
和WP_Image_Editor_GD
但是在上一篇的文章内已经表明根本就不想要WP去帮我编辑尺寸,因为在PHP内调整尺寸需要引入图片到内存里,如果是大尺寸图片会导致单个用户线程内存变大,所以我只是喜欢它帮我上传到服务器,后续有需要再通过CDN的调整大小就好了。
好在这个位置,WP提供了fitler
让我们修改编辑类,这种需求情况下我就不需要图片编辑类了,所以在我的插件加上以下代码:
add_filter('wp_image_editors', '__return_empty_array');
保存后上传就没问题了~
但是还是有一个问题困扰着我就是为什么没有报错信息可以查看到,点进到编辑类里面看
在WP_Image_Editor_GD->load()
的函数里面看到,在调用imagecreatefromstring
的方式时前面加上了@
了禁止异常报错。
这就怪不得一直记录不到报错信息了,去掉符号后再上传调用,发现报了内存溢出的错误,看来是内存不够用,但是不想分配了,按上面的解决方法处理了,把上传问题解决了。