1

我想在我的服务器上压缩一个 .csv 文件并使用 PHP 将其放入 .gz (gzip) 文件中。

我使用了`file_put_contents(),如下所示:

$input = "test.csv";
$output = $input.".gz";

file_put_contents("compress.zlib://$output", file_get_contents($input));

但是,当我打开 gzip 文件(使用 winrar / 7zip)时,.gz 存档中缺少文件扩展名;它只是“测试”(没有文件扩展名)?

它没有像我想要的那样显示“ test.csv ”。如何解决?

4

5 回答 5

1

让我们试试这个。,

$input = "test.txt";
exec("gzip ".$input);

它将在linux服务器上运行...

于 2012-07-17T10:58:50.157 回答
1

我不确定您要问什么,但 PHP 已经有一个 gzip 压缩功能gzencode

像这样使用它

<?php
    $data = implode("", file("bigfile.txt"));
    $gzdata = gzencode($data, 9);
    $fp = fopen("bigfile.txt.gz", "w");
    fwrite($fp, $gzdata);
    fclose($fp);
?>
于 2012-07-17T10:59:42.433 回答
1

您的示例至少在 PHP 5.3.10 上正常工作:

-rw-rw-r-- 1 mats mats  8 Jul 17 13:05 test.csv
-rw-rw-r-- 1 mats mats 31 Jul 17 13:05 test.csv.gz

您没有在资源管理器/导航器中隐藏已知文件类型的文件扩展名?

于 2012-07-17T11:06:30.113 回答
1

该压缩文件中没有关于任何“文件名”的信息。您只是压缩输入文件的原始二进制数据并将其转储到输出文件中。.gz 文件没有关于其中包含多少文件或它们的名称的元信息。这就是TAR文件格式的用途,提供这种元信息。您应该制作一个 tarball,然后使用 gz 将其压缩为 .tar.gz。

除了通过exec.
您可能希望将ZIP视为具有原生 PHP 支持的替代方案。

于 2012-07-17T11:30:49.617 回答
0

这对我有用:

$input = "test.csv";
$output = $input.".xml.gz";

我知道这很丑,但是当使用 gzopen 和 gzwrite 时,我发现这是在存档中保留 xml 扩展名的唯一方法。这样,当我提取它时,我得到了 xml 文件。

稍后,一旦创建文件,您可以重命名它以删除扩展名 [.gz] 之前的 [.xml]

于 2013-11-07T17:57:22.633 回答