PHP zip 存档进度条

发布于 2024-12-05 15:20:29 字数 126 浏览 1 评论 0原文

我已经用 google 搜索过这个问题,但没有找到任何解决方案 - 有没有办法创建一个进度栏,用于在 PHP 中向 zip 存档添加/提取文件? 我能否获得某种状态消息(可以通过 AJAX 请求获得并更新进度栏)?

谢谢。

I've googled for this but didn't find any solution - is there a way to create a progessbar for adding/extracting files to/from zip archive in PHP?
Can I get some kind of status message which I can than get with an AJAX request and update the progress bar?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晨敛清荷 2024-12-12 15:20:29

我现在正在尝试做同样的事情;它基本上*完整(*参见下面的问题部分)。

我使用的基本概念是有 2 个文件/进程:

  1. 调度程序(启动任务并可以调用以获取更新)
  2. 任务(实际上完成压缩任务)

调度程序将:

  1. 创建一个唯一的更新令牌并保存到缓存(APC)
  2. 使用异步的curl_multi_exec调用Task页面,传递update_token
  3. 以JSON格式返回token
    或者
  4. 以 JSON 形式返回 update_token 下的 APC 内容(在我的例子中,这是一个简单的状态数组)

任务将:

  1. 使用更新令牌更新 APC 的状态
  2. 执行实际工作:)

客户端

您需要一些 JavaScript 来调用调度程序,获取返回的令牌,然后调用调度程序,传递 update_token,以获取更新,然后使用这些返回的值来更新 HTML。

** 潜在的陷阱**

会话可能是一个问题。如果您有相同的会话,您会注意到您的浏览器(或者这是 Apache?)等待会话中的第一个请求完成,然后再返回其他请求。这就是我存储在 APC 中的原因。

当前问题

ZipArchive 类的问题在于,它似乎在 ->close() 方法中完成所有繁重的工作,而 addFile 方法似乎只需要很少的时间甚至不需要时间即可完成。

作为解决方法,您可以关闭并以特定字节或文件间隔重新打开存档。这实际上会稍微减慢压缩的过程,但就我而言,这是可以接受的,因为视觉进度条比只是等待而不指示正在发生的事情要好。

I am trying to do the same thing at the moment; it is mostly* complete (*see issues section below).

The basic concept I use is to have 2 files/processes:

  1. Scheduler (starts task and can be called to get updates)
  2. Task (actually completes the task of zipping)

The Scheduler will:

  1. Create a unique update token and save to cache (APC)
  2. Call the Task page using curl_multi_exec which is asynchronous, passing update_token
  3. Return the token in JSON format
    OR
  4. Return the contents of the APC under the update_token (in my case this is a simple status array) as JSON

The Task will:

  1. Update the APC with status, using the update token
  2. Do the actual work :)

Client-side

You'll need some JavaScript to call the Scheduler, get the token in return, then call the Scheduler, passing update_token, to get updates, and then use these returned values to update the HTML.

** Potential pitfalls**

Sessions can be a problem. If you have the same session you will notice that your browser (or is this Apache?) waits for the first request in the session to complete before returning others. This is why I store in the APC.

Current Issues

The problem with the ZipArchive class is that it appears to all the grunt work in the ->close() method, whilst the addFile method appears to take little to no time to complete.

As a workaround you can close and then reopen the archive at specific byte or file intervals. This actually slows the process of zipping down a little, but in my case this is acceptable, as the visual progress bar is better than just waiting with no indication of what is happening.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文