【问题标题】:PHP - file_put_contents() doesn't preserve filenames in outputPHP - file_put_contents() 不在输出中保留文件名
【发布时间】:2012-07-17 10:53:35
【问题描述】:

我想在我的服务器上压缩一个 .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”(没有文件扩展名)?

它没有按我的意愿显示“test.csv”。如何解决?

【问题讨论】:

  • 不确定你在问什么。这是否意味着创建的文件只是称为“测试”?
  • 它不是创建的文件,它是我压缩的文件,当我使用 winrar / 7z 打开 gzip 文件时,test.csv 没有扩展名,它只是“测试”而不是“ test.csv"

标签: php file compression gzip


【解决方案1】:

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

除了通过exec 运行 shell 命令之外,我不知道如何使用 PHP 执行此操作。
您可能希望将 ZIP 作为原生 PHP 支持的替代方案。

【讨论】:

    【解决方案2】:

    让我们试试这个。,

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

    它可以在 linux 服务器上运行...

    【讨论】:

      【解决方案3】:

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

      这样使用

      <?php
          $data = implode("", file("bigfile.txt"));
          $gzdata = gzencode($data, 9);
          $fp = fopen("bigfile.txt.gz", "w");
          fwrite($fp, $gzdata);
          fclose($fp);
      ?>
      

      【讨论】:

      • 对不起,我的英语不好,我必须使用 php 压缩一个 .csv 文件,我尝试了很多代码,它可以创建 gzip 文件,但是,在 .gz 文件中,只有“我的文件名”不是“我的文件名.csv”
      • 试试我发布的代码。将bigfile.txt 替换为您的文件myFileName.csv。它应该可以正常工作。
      【解决方案4】:

      您的示例至少可以在 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
      

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

      【讨论】:

      • 不,文件没有隐藏,当我打开 gzip 文件时,它只在 .gz 文件上显示“test”而不是“test.csv”。
      • 这听起来像是您用来打开 gzip 压缩文件的程序的问题。 gzip 压缩的文件不包含有关文件名的任何信息,它只是去除名称的“.gz”部分并保持其余部分不变的约定(这就是为什么档案通常先包装在 .tar 文件中,然后再压缩) .
      【解决方案5】:

      这对我有用:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        • 2012-02-24
        • 2021-01-10
        • 2014-06-19
        相关资源
        最近更新 更多