通过curl的CURLFILE类来实现有分割线的Content-Type为form-data的传输,并且可以不用把文件读入内存,也就不会出现超出内存限制的问题,但是项目需要通过没有分割线的Content-Type为x-www-form-urlencoded的方式传输文件内容,直接设置CURLOPT_POSTFIELDS的变量为文件的数据即可,但是需要把文件读入内存在保存到变量.导致无法传输大的文件,有没有一种方法能不把整个文件读入内存又能通过CURLOPT_POSTFIELDS传输过的方法

解决方案 »

  1.   

    Content-Type:x-www-form-urlencoded 是标准的 post 类型声明,但不能传输文件
    Content-Type:form-data 是扩展的 post 类型,是为上传文件而扩展的
    你不能只想着自己,而把文件内容当作普通字段传输,而不去考虑对方由足够的空间将其转换成文件
      

  2.   

    正是由于接收方设置的是通过Content-Type:x-www-form-urlencoded 传输二进制,实际上也是可以传输的,才会有这个问题,如果按照浏览器表单方式传输文件,php的curl反而很容易做到.现在好像只能考虑用fsocketopen来实现分段传输了
      

  3.   

    curl 提供有 CURLOPT_INFILE 和 CURLOPT_READFUNCTION 回调