我的目标是从第三方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行。
非常感谢!
答案 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) {
...
}