使用php上传gzip多个文件



我正在寻找一个压缩上传文件的解决方案。我发现了一段代码,可以帮助对单个文件进行gzip(此处)。在多个文件的情况下,据我所知,我们首先需要tar这些文件,然后再对它们进行gzip封装。

我怎么能用PHP做到这一点?

在PHP 5.3+中,您可以使用PharData类创建tar:

// list of file paths to add
$files = glob('/docs/*.pdf');
$tar = new PharData(__DIR__ . '/myfiles.tar');
foreach ($files as $f) {
    $tar->addFile($f, basename($f));
}

如果tar不是很大(或者你有很多RAM),你可以用压缩

$tar->compress(Phar::GZ);

对于使用上述方法可能引发内存限制错误的大文件,一种替代方法是:

// you might want to adjust the time limit
set_time_limit(0);
$source = fopen($pathToTar, 'rb');
$target = __DIR__ . '/myfiles.tar.gz';
$destination = fopen('compress.zlib://' . $target, 'wb');
stream_copy_to_stream($source, $destination);

参考:http://www.binarytides.com/how-to-create-tar-archives-in-php/

以下是上传zip文件的代码。

<?php
if(isset($_POST['btnsubmitzip'])){
$file=  $_FILES['txt_zip']['name'];
        $image_path = "../images/zip/".$file;
         $copy= copy($_FILES['txt_zip']['tmp_name'] ,$image_path);
            if($copy)
            {
             $message="Your Images successfully uploaded";
            }
            else
            {
              $message="Error in Image Uploading";
            }
            $zip = zip_open($image_path);
            if ($zip) {
              while ($zip_entry = zip_read($zip)) {
                $fp = fopen(DIR_FS_CATALOG."/images/".zip_entry_name($zip_entry), "w");
                if (zip_entry_open($zip, $zip_entry, "r")) {
                  $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                  fwrite($fp,"$buf");
                  zip_entry_close($zip_entry);
                  fclose($fp);
                }
              }
              zip_close($zip);
            }
}
?>
        <form action="" name="frm" method="post" enctype="multipart/form-data">
          <table>
              <tr>
                <td style="padding-top:30px;">Import Images Zip File &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="file" name="txt_zip" size="40"/>
                (size 300 x 300)
                </td>
            </tr>
          <tr><td style="padding-left:30px " class="smallText"><font color="#990000"><strong><?php echo $message; ?></strong></font></td></tr>
          <tr><td style="padding:20px;"><input type="submit" name="btnsubmitzip" value="Submit"></td></tr>
          </table>
        </form>

相关内容

  • 没有找到相关文章

最新更新