编辑一下,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。