我可以传递多个指向 fopen、fread 和 feof 的链接吗?

Can I pass multiple links to fopen, fread and feof?

提问人:unique_programmer 提问时间:5/8/2013 更新时间:5/8/2013 访问量:261

问:

我有以下功能:

    function doParse($parser_object) {
    $links=file("./fullsoccer.TXT", "r");
    $i=0;
    while(!empty($links[$i]))
    {
        set_time_limit(0);
        if (!($fp = fopen($links[$i], "r")));
        {
            //loop through data
            while ($data = fread($fp, 4096)) {
                //parse the fragment
                xml_parse($parser_object, $data, feof($fp));
            }
        }
        $i++;
    }
}

此代码将 fullsocce.txt 的 507 个 XML 数据链接列表保存到$links然后我使用 fread 读取每个文件的内容(链接:在线链接),并将$data传递给我的 main 函数,该函数xml_parse使用 SAX 解析器解析和保存数据。 我的问题是: 只是数组的最后一个文件$links传递给函数并解析数据,我想让你知道为什么它只对一个文件起作用?请 这是一个紧急情况

PHP 面包

评论


答:

0赞 Useless Intern 5/8/2013 #1
!($fp = fopen($links[$i], "r")

fopen 在出错时返回 FALSE,因此此检查仅在 eof 或 invild 行处为 true。也许把它改成

 if (($fp = fopen($links[$i], "r") != FALSE)

我还注意到一个额外的;和 ) in if (!($fp = fopen($links[$i], “r”)));也许我只是没有正确匹配。

评论

0赞 unique_programmer 5/9/2013
我尝试进行一些调试。首先,代码是打印所有链接,这意味着它正在打开它们,当我使用“xml_parse”时,它只是解析链接数组中的最后一个文件,这是为什么??你有什么想法吗??
0赞 Fabrizio 5/8/2013 #2

你丢失了,但除此之外,我认为你需要做一些调试,尝试注释掉“xml_parse”功能并添加fcloseecho $links[$i]."<br />\n";

function doParse($parser_object) {
  $links=file("./fullsoccer.TXT", "r");
  $i=0;
  foreach($links as $link)
  {
      set_time_limit(0);
      echo 'reading '.$link."\n";
      $fp = fopen($link, "r");
      if ($fp!==false)
      {
          //loop through data
          while ($data = fread($fp, 4096)) {
              //parse the fragment
              //xml_parse($parser_object, $data, feof($fp));
              echo $data;
          }
          echo "\n";
          fclose($fp);
      } else {
          echo 'Cannot Open Link '.$link."\n";
      }
      $i++;
  }
}

评论

0赞 unique_programmer 5/9/2013
我尝试进行一些调试。首先,代码是打印所有链接,这意味着它正在打开它们,当我使用“xml_parse”时,它只是解析链接数组中的最后一个文件,这是为什么??你有什么想法吗??
0赞 Fabrizio 5/9/2013
你看到每个文件的返回吗?如果是这样,可能是您的函数有问题,如果没有,则意味着文件可能是空的$dataxml_parse
0赞 Fabrizio 5/9/2013
实际上,我确实认为问题可能出在您的身上,我只假设您打开/关闭一个文件,可能是每次打开时都将其擦除干净,导致它只显示最后一个文件?xml_parse