乐趣区

Nginx-Tips-Php-Uploading-Progress-Bar-0001

PHP 官方的进度支持不适用于 Nginx+PHP via FastCGI。相关文章请参考使用 Session 来跟踪上传进度。该文最后的 Warning 表示 Nginx 会自己处理上传,而 PHP 就只能得到一个最终结果,不能跟踪过程。最后一个跟帖(来自 s.zarges)也给出相同的警告。这样,就不得不找别的办法,比如 APC 之类。另一个选择就是 nginx-upload-module。

关于 nginx-upload-module

这个模块由 vkholodkov 于 5 年前开发,现在已经不更新 N 久了。其源代码地址。这是文档。直接下载源代码。
下载完成后,解压:

tar xvfz nginx_upload_module-2.0.11.tar.gz

需要打补丁

代码恒久远,BUG 永流传。多少年过去了,许多代码变得面目全非,许多 Bug 失去了本来面目,只剩下那一砣砣的 Bug,提醒我们曾经辉煌的过往。现在的 Nginx 相对 5 年前,已经修改了很多东西,比如 ngx_http_read_request_body_t 已经删除了 to_write 成员,而该成员被 nginx-upload-module 所需要。其结果就是 nginx-upload-module 无法编译。关于该问题的讨论请参考这个链接。我们要感谢这个哥们:davromaniak,他修改了 nginx-upload-module,修正了错误,使之可以通过编译。这是他的关于该问题修正的博文。我们要做的就是下载他的修改,给 nginx-upload-module 打补丁。
下载的 Patch 文件名为 davromaniak.txt

打补丁

使用以下命令:

cp darvromaniak.txt [nginx_upload_module 所在目录]
patch ngx_http_upload_module.c davromaniak.txt

将模块编译进 Nginx

先从这个链接下载 Nginx 源码。然后编译:

cd nginx-1.5.8
./configure --add-module=[nginx_upload_module 所在目录]
make
make install

在短暂的等待后,编译和安装就完成了,可以重启 Nginx。


注意


我使用了比较旧的 nginx-upload-module(2.0),如果你使用的是新的 2.2,遇到什么问题,请自行解决。

退出移动版