【发布时间】:2013-11-13 02:13:17
【问题描述】:
我想在 Windows Server 上压缩一个包含 50K 文件的大文件夹。我目前正在使用此代码:
include_once("CreateZipFile.inc.php");
$createZipFile=new CreateZipFile;
$directoryToZip="repository";
$outputDir=".";
$zipName="CreateZipFileWithPHP.zip";
define("ZIP_DIR",1); //
if(ZIP_DIR)
{
//Code toZip a directory and all its files/subdirectories
$createZipFile->zipDirectory($directoryToZip,$outputDir);
}else
{
//?
}
$fd=fopen($zipName, "wb");
$out=fwrite($fd,$createZipFile->getZippedfile());
fclose($fd);
$createZipFile->forceDownload($zipName);
@unlink($zipName);
在大约 2K 图像文件之前一切正常。但这不是我想要得到的。我愿意至少处理 50K 图像压缩。同时我的脚本得到这个错误:
致命错误:C:\xampp\htdocs\filemanager\CreateZipFile.inc.php 第 92 行的最大执行时间超过 360 秒
$newOffset = strlen(implode("", $this->compressedData));
我正在寻找任何解决方案来处理如此大量的文件。我目前在 Windows Server 2008 Standard 上使用 XAMPP。是否有可能制作一小部分 zip,使用系统命令和外部工具打包它们,然后将其发送到 header 下载?
http://pastebin.com/iHfT6x69 用于 CreateZipFile.inc.php
【问题讨论】:
-
考虑设置一个作业服务器,使用类似 Gearman 的工具。
-
听起来不错,但设置起来对我来说很难:(
-
为什么?给自己一个 VPS,它可以用几个命令安装。如果你不知道怎么做,那么你可以学习;这是值得学习的技术。
-
好的 clets 认为 Gearman 可以在那里工作吗?
-
嗯,是的,这就是我建议
:)的原因。 Gearman 作为守护进程(后台进程)运行,并且您设置了一组执行后台工作的工作人员。如果你有一个合适的 zip 库,你可以读取一个压缩的百分比,它可以用作工作人员向 Gearman 报告进度,并且在你的在线应用程序中,你可以 (a) 开始工作,(b) 检查状态的工作,以及 (c) 以百分比形式查看工作的完成情况。它很健壮,并且有很多文档。我用它来渲染文档和爬网——任何你不能在在线应用程序中做的事情。
标签: php zip windows-server