首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:希望fsockopen仅检索远程xml文件的一部分

问PHP:希望fsockopen仅检索远程xml文件的一部分
EN

Stack Overflow用户
提问于 2009-12-27 23:33:44
回答 2查看 828关注 0票数 1

我需要从一个非常大的、通过http访问的远程XML文件中检索少量数据。开始时我只需要文件的一部分,但我访问的文件通常非常大,下载所有文件都会导致超时。似乎可以使用fsockopen在关闭连接之前只拉取所需的量,但我尝试过的都不起作用。

下面是我一直在尝试的一个简化版本。有没有人能告诉我我需要做些什么呢?

代码语言:javascript
复制
<?php

 $k = 0;

 function socketopen($funcsite, $funcheader){

 $fp = fsockopen ($funcsite, 80, $errno, $errstr, 5);

 $buffer = NULL;

 if ($fp) {

    fwrite($fp, "GET " . $funcheader . " HTTP/1.0\r\nHost: " . $funcsite. "\r\n\r\n");


 while (!feof($fp)) {
    $buffer = fgets($fp, 4096);
    echo $buffer;

    if($k == 200){
        break;
    }
    $k++;
  }

    fclose ($fp);
  } else {
    print "No Response:";
 }
 return ( html_entity_decode($buffer));
}

$site = "www.remotesite.com";
$header = "/bigdatafile.xml";
$data = socketopen($site, $header);
?>

这可以很好地工作,但始终打开和下载整个远程文件。(我实际上使用了与if($k = x)不同的条件,但这无关紧要)。

非常感谢您的帮助。-Jim

EN

回答 2

Stack Overflow用户

发布于 2009-12-28 00:23:55

是否有理由不使用 file_get_contents() ?

代码语言:javascript
复制
$buffer = html_entity_decode(file_get_contents('http://www.remotesite.com/bigdatafile.xml', 0, null, $offsetBytes, $maxlenBytes));

对于$offsetBytes $maxlenBytes**.**,只需指定

试试这个:

代码语言:javascript
复制
set_time_limit(0);

echo $buffer = html_entity_decode(file_get_contents('http://www.remotesite.com/bigdatafile.xml', 0, null, 1024, 4096));
票数 4
EN

Stack Overflow用户

发布于 2009-12-28 00:04:52

使用此代码,您可以下载整个rss

代码语言:javascript
复制
  if (!$xml = simplexml_load_file("http://remotesite.com/bigrss.rss))
    {
       throw new RuntimeException('Unable to load or parse  feed');
    }

  else
  {
    file_put_contents($xml,'mybigrss.rss'); 
  }

但是,如果您只想获得一些部分,那么请执行以下操作;

代码语言:javascript
复制
$limit = 512000; // set here a limit 
$sourceData = fread($s_handle,$limit); 

// your code ect..

或者使用eof

代码语言:javascript
复制
$source='';
while (!feof($s_handle))
$source.=fread($s_handle,1024); // set limit 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1966217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档