如何在使用php-ccurl提取之前确定文件大小


how to determine file size before fetch using php curl

我为我的网络用户提供了一个工具,他们可以从url上传他们的个人资料图像,而不是从计算机上传。我在这里看到,一个恶作剧的用户可以提供一个巨大文件的url,或者可能是一些跟踪到/dev/random的url,这不太可能,但也可能发生。在将文件完全提取到服务器之前,有没有一种方法可以确定文件的大小?

根据您正在做的获取远程文件的操作,您可以做不同的事情。

  • 虽然file_get_contents('http://foobar.com')非常方便,但它给您的控制量最小。我看不出你怎么能做一个HEAD请求来获取前面的Content-Length标题
  • fsockopen()在处理HTTPS时会让你哭
  • 卷曲就是卷曲。它既丑陋又强大。还有其他选项,比如HTTPPecl(基本上是包裹卷曲)。

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

在最坏的情况下,您将发出1个HEAD和1个GET请求来获取内容长度,以及另一个GET请求以下载$yourLimit字节。

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