Fixed NextGenGallery 0 images were uploaded error

Nggallery 0 images were uploaded
Nggallery 0 images were uploaded

不知从何版本起,NextGenGallery 插件在我的 WordPress 上就不工作了,主要症状是:

  • 后台无法在 Gallery 里上传图片,显示 “Upload complete. 0 images were uploaded.”(WordPress 自身的 Media 上传正常)。
  • 后台无法批量导入图片,服务器的文件夹根本就不显示。
  • 已有的 Gallery 在前台只能显示第一张图,点下一张图就是 404 错误。

这个问题困扰了我约有半年。期间发现把 Permalinks 改为 Default 模式能让 NextGenGallery 恢复正常,但我不可能为了 NextGenGallery 修改 Permalinks 啊,只好任由这个问题存在。所幸迄今为止只有 5 galleries,而且都不怎么重要,所以这个问题不突出。

上个周末突然犟了一下,我觉得不该卡在这个问题无从下手啊,调用 google N 多次,终于在一个角落里给我找到一点端倪,再做了 N 多次试验,得出的结论是此问题在 PHP installed as an Apache module 时不存在,我恰用的是 Nginx,罪魁祸首是 fastcgi_param 没弄好。

出现此类问题是小概率事件,即使是一个不完善的 fastcgi_param 配置,我的 Nginx 也让大部分 PHP 跑了多年没出其他问题。NextGenGallery 也有一定责任,使用了一种不推荐的环境变量,在 PHP installed as an Apache module 下不会激发这个 bug,但在 Ngnix + 不完善的 fastcgi_param 会。而我用的不完善的 fastcgi_param,我相信很多人都在用,所以有一定的普遍性。

言归正传,怎么改?

有人说把 NextGenGallery 的 class.router.php 的 function get_request_uri 的 if (isset($_SERVER[‘PATH_INFO’])) 改为 if (empty($_SERVER[‘PATH_INFO’])),确实能奏效,但我认为不理想。因为:

  • NextGenGallery 虽有错,但大错不在它,而在 Nginx 没配好。
  • 这个问题被反应到 NextGenGallery 开发者很久了,期间 NextGenGallery 升级了无数次,也没见他修正此 bug,可能他认为此 bug 非 bug。

我认为解决问题的根本办法是在 fastcgi_param 文件里,把通常人用的

fastcgi_param  PATH_INFO          $fastcgi_path_info;

改为

fastcgi_param  PATH_INFO          $fastcgi_path_info if_not_empty;

Leave a Reply

Your email address will not be published. Required fields are marked *