如何在使用php curl获取之前确定文件大小

时间:2012-02-29 09:24:32

标签: php curl

我正在为我的网络用户提供一个工具,他们可以从网址上传他们的个人资料图片,而不是从计算机上传。我在这里看到一个恶作剧的用户可以提供一个巨大的文件的网址,或者可能是一些标记为/dev/random的网址,非常不可能,但可能会发生。有没有办法在将文件完全提取到服务器之前确定文件的大小?

2 个答案:

答案 0 :(得分:1)

根据您抓取远程文件的操作,您可以执行不同的操作。

  • 虽然file_get_contents('http://foobar.com')非常方便,但它可以为您提供最少的控制权。我不知道你怎么能做一个HEAD请求来获取前面的Content-Length标题。
  • 处理HTTPS时,
  • fsockopen()会让你哭泣。
  • 卷曲,好吧,卷曲。它和强大的一样丑陋。还有其他选项,比如HTTP Pecl(基本上包裹curl)。

    1. 检查资源是否提供Content-Length标头。做一个HEAD请求。某些服务器/服务不处理HEAD请求。然后,您可以在获得响应标头后发出GET请求并中止传输。
    2. 如果(1)产生了结果,请检查它是否大于限制。如果是,请中止。
    3. 使用curl获取资源。如果音量超出限制,请查看CURLOPT_READFUNCTION以便能够中止下载。如果(1)得出结果,你也应该检查一下,因为这个结果可能是欺骗性的。

在最糟糕的情况下,您将获得1个HEAD和1个GET请求以获取Content-Length,以及另一个下载$ yourLimit字节的GET请求。

答案 1 :(得分:0)

检查服务器响应中的Content-Length标头。