我正在寻找一个压缩上传文件的解决方案。我发现了一段代码,可以帮助对单个文件进行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
<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>