PHP -获取Zip文件并处理其内容


PHP - Fetching Zip File and processing its contents

我的目标是从第三方web服务器获取一个zip文件,获取其中包含的CSV文件并遍历内容,将其逐行放入数组中进行进一步处理。

我正在抓取的文件大约有2000行长。

这是我目前拥有的::

 $zip = URL_TO_FILE;
 $internal_file = 'zipped_file_name.csv';
 $ext = pathinfo($zip, PATHINFO_EXTENSION);
 $temp = tempnam(sys_get_temp_dir(), $ext);
 copy($zip, $temp);
 $file = file_get_contents("zip://$temp#$internal_file");

上述工作,但似乎并不理想。通常,我抓取一个解压缩的CSV文件,并简单地遍历其内容,然后将内容放入一个数组中。

  while ( ($line = fgetcsv($file)) !== false ) {
      if ( array(0 => null) !== $line ) {
          $result[] = $line;
       }
  }

我不确定如何与抓取压缩内容的额外步骤做同样的事情。另外-我只需要文件的最后100行,而不是所有2000行。

  1. 是否有更好的方法来做到这一点?
  2. 我如何只抓取最后100行?
  3. 我如何通过内容逐行迭代将其放入数组?

感谢!

经过一番搜索,我找到了解决方案::

 foreach(preg_split("/(('r?'n)|('r'n?))/", $file) as $line){
      $result[] = $line;
 }

这将遍历从文件中检索到的每一行内容。之后,我所做的就是对数组进行拆分以获得最新信息::

$newArray = array_slice($result, 0, 10); 

对于那些不想把这些拼凑在一起的人来说,下面是一个块中的代码::

$zip    = $object->getUrl();
$file   = '649.csv';
$ext    = pathinfo($zip, PATHINFO_EXTENSION);
$temp   = tempnam(sys_get_temp_dir(), $ext);
copy($zip, $temp);
$file = file_get_contents("zip://$temp#$file");
unlink($temp);
foreach(preg_split("/(('r?'n)|('r'n?))/", $file) as $line)
{
    $result[] = $line;
}

fgetcsv函数需要文件句柄。所以用fopen代替file_get_contents:

$fh = fopen("zip://$temp#$internal_file", "r");
while( ($line = fgetcsv($fh)) !== false) {
    ...
}