是否有任何方式限制数量的数据卷将取?我屏幕上刮数据页50kb,但是据我所需要的是在顶端的1/4页面,所以我真的只需要检索第10kb的网页。

我问是因为有大量的数据,我需要监测其结果在我转接近60GB的数据,每个月,当时只有大约5GB这个带宽是相关的。

我使用PHP来处理数据,然而我是灵活的,在我的数据检索方法,我可以使用的卷曲,WGET,fopen等。

一种方法我考虑的是

$fp = fopen("http://www.website.com","r");
fseek($fp,5000);
$data_to_parse = fread($fp,6000);

不会上面的意思是,我只会转移6kb从www.website.com或将fopen负荷www.website.com 进入存储器我的意思仍会转移的全50kb?

有帮助吗?

解决方案

您可能能够完成还你要寻找的使用curl为好。

如果你看一下 CURLOPT_WRITEFUNCTION 您的文档可以注册一个名为每当数据可从CURL读回调。然后,您可以指望收到的字节,而当你已经收到超过6000个字节你可以返回0中止转让的其余部分。

的libcurl 文档描述回调多一点:

  

此功能得到由作为libcurl的有接收的数据立即调用需要被   保存。返回的字节数   实际上照顾。如果量   从传递给金额不同的   功能,它会发出错误信号的   图书馆,它将中止传送   并返回CURLE_WRITE_ERROR。

     

回调函数将被传递   尽可能多的数据可能在所有   调用,但你不可能让   任何假设。它可以是一个字节,   它可以是数千。

其他提示

这更是一个HTTP,实际上卷曲问题。

如你猜到了,整个页面将被下载,如果你使用的fopen。无论那么如果你寻求在偏移5000或没有。

要实现你想要的是使用部分HTTP GET请求,如HTML RFC规定(最佳的方法的 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html ):

  

GET方法变化的语义   采用“部分GET”请求是否   消息包括一个Range报头字段。   部分GET请求,只有部分   实体的传送,如   在节14.35中描述。该   部分GET方法的目的是   减少由不必要的网络使用   允许局部检索实体   不转移完成   数据已经由客户端。

使用范围部分GET请求的细节描述如下: http://www.w3.org/Protocols/rfc2616/ RFC2616-sec14.html#sec14.35.2

尝试 HTTP RANGE申请

GET /largefile.html HTTP/1.1
Range: bytes=0-6000

如果该服务器支持范围请求,它会返回一个206部分内容响应代码与内容范围头和你的请求的字节范围(如果没有,它会返回200和整个文件)。看到 http://benramsey.com/archives/206-partial-内容和工作范围变换请求/ 获得范围请求的一个很好的解释。

也参见可恢复下载使用PHP发送文件时?

它将载整个页面 fopen 呼叫,但随后它将只读6kb从该网页上。

从PHP手册:

阅读停止,尽快为下列条件之一得到满足:

  • 字节已经阅读
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top