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

时间:2014-07-26 21:27:08

标签: php

我的目标是从第三方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. 如何逐行遍历内容以将其放入数组?
  4. 非常感谢!

2 个答案:

答案 0 :(得分:0)

在搜索之后我找到了解决方案::

 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;
}

答案 1 :(得分:0)

fgetcsv函数需要文件句柄。因此,而不是file_get_contents使用fopen

$fh = fopen("zip://$temp#$internal_file", "r");

while( ($line = fgetcsv($fh)) !== false) {
    ...
}