Jun 26 2013

PHP 中的libcurl增加 CURLOPT_MAXFILESIZE 参数

Category: 技术ssmax @ 10:04:39

编辑一下,php 5.5.0 的发布文档里面已经表示新版php已经增加了此参数,所以如果各位的php是最新的5.5或以上,可以忽略下面的文字啦,呵呵。

libcurl有一个很有用的参数

MAXFILESIZE,可以根据content length来判断是否超过文件下载大小,但是php默认的版本没有编译这个参数进去。

根据libcurl 的 源代码所示

https://github.com/bagder/curl/blob/master/docs/libcurl/symbols-in-versions

CURLOPT_MAXFILESIZE             7.10.8
CURLOPT_MAXFILESIZE_LARGE       7.11.0

CURLOPT_MAXFILESIZE 是从 7.10.8版本开始存在的

修改php源代码:
ext/curl/interface.c

寻找关键字 CURLOPT_IPRESOLVE(该功能也是7.10.8版本开始存在,也是long类型变量)
插入CURLOPT_MAXFILESIZE 的判断,由于同样是long类型,所以不需要做什么特殊处理


#if LIBCURL_VERSION_NUM > 0x070a07 /* CURLOPT_IPRESOLVE is available since curl 7.10.8 */
        REGISTER_CURL_CONSTANT(CURLOPT_IPRESOLVE);
        REGISTER_CURL_CONSTANT(CURL_IPRESOLVE_WHATEVER);
        REGISTER_CURL_CONSTANT(CURL_IPRESOLVE_V4);
        REGISTER_CURL_CONSTANT(CURL_IPRESOLVE_V6);
        REGISTER_CURL_CONSTANT(CURLOPT_MAXFILESIZE);
#endif
......

#if LIBCURL_VERSION_NUM > 0x070a07 /* CURLOPT_IPRESOLVE is available since curl 7.10.8 */
                case CURLOPT_IPRESOLVE:
                case CURLOPT_MAXFILESIZE:
#endif

编辑完成后,重新编译PHP,即可在php的curl_setopt中,使用CURLOPT_MAXFILESIZE参数,指定下载文件的限制大小,单位为bytes。