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

如何在使用php curl获取之前确定文件大小,php,curl,Php,Curl,我为我的网络用户提供了一个工具,他们可以从url上传他们的个人资料图像,而不是从计算机上传。我在这里看到一个淘气的用户可以提供一个大文件的url,或者可能是某个链接到/dev/random,这很不可能,但也可能发生。是否有一种方法可以在将文件完全提取到我的服务器之前确定文件的大小?检查服务器响应中的头。检查服务器响应中的头。根据抓取远程文件的操作,可以执行不同的操作 而文件\u获取\u内容('http://foobar.com)非常方便,它给了您最少的控制。我看不出你怎么能做一个HEAD请求来

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

检查服务器响应中的头。

检查服务器响应中的头。

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

  • 文件\u获取\u内容('http://foobar.com)
    非常方便,它给了您最少的控制。我看不出你怎么能做一个HEAD请求来获取
    内容长度
    标题
  • fsockopen()
    
  • 卷曲是,嗯,卷曲。它既丑陋又强大。还有其他选项,比如HTTP Pecl(基本上是包装卷曲)

  • 检查资源是否提供内容长度标题。为这个做一个HEAD请求。某些服务器/服务不处理HEAD请求。然后,在获得响应头后,发出GET请求并中止传输
  • 如果(1)产生了一个结果,检查它是否大于您的限制。如果是,中止
  • 使用curl获取资源。查看
    CURLOPT_READFUNCTION
    ,以便在音量超过您的限制时中止下载。如果(1)产生了一个结果,您还应该检查这个,因为这个结果可能是伪造的

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

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

  • 文件\u获取\u内容('http://foobar.com)
    非常方便,它给了您最少的控制。我看不出你怎么能做一个HEAD请求来获取
    内容长度
    标题
  • fsockopen()
    
  • 卷曲是,嗯,卷曲。它既丑陋又强大。还有其他选项,比如HTTP Pecl(基本上是包装卷曲)

  • 检查资源是否提供内容长度标题。为这个做一个HEAD请求。某些服务器/服务不处理HEAD请求。然后,在获得响应头后,发出GET请求并中止传输
  • 如果(1)产生了一个结果,检查它是否大于您的限制。如果是,中止
  • 使用curl获取资源。查看
    CURLOPT_READFUNCTION
    ,以便在音量超过您的限制时中止下载。如果(1)产生了一个结果,您还应该检查这个,因为这个结果可能是伪造的

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

完全重复:@Topener:该主题无助于OP解决原始问题。有时,阅读整个问题是值得的。@Topener我根本不知道应该用什么来搜索。完全重复:@Topener:这个主题无助于解决原始问题。有时,阅读整个问题是值得的。@Topener我根本不知道我应该用什么来搜索。如果响应中没有这样的标题怎么办?如果他们提供了
内容长度:123
,但实际发送了(一整批)怎么办更多?如果响应中没有这样的标题怎么办?如果他们提供了
内容长度:123
,但实际发送了(一整批)更多的内容怎么办?