【发布时间】:2013-03-28 09:43:29
【问题描述】:
我想知道,有没有办法检测 cat 函数完成合并文件,所以我可以压缩文件? 例如,如果我有这样的简单案例,则包含多个文件的文件夹如下:
/var/www/testing/file1.iso0
/var/www/testing/file1.iso1
/var/www/testing/file1.iso2
/var/www/testing/file2.xls0
/var/www/testing/file2.xls1
基本上,使用我的网络应用程序,用户将上传 file1.iso 和 file2.xls,使用 html5 我将分割每个文件并部分上传,这将导致上述结构。在每个文件的所有部分完成上传后,我将使用 ajax 调用使用 cat unix 命令合并文件。
$command = '(files=(' . $list_file_copy . '); cat ' . '"${files[@]}" > ' . '"' . $file_name . '"' . '; rm ' . '"${files[@]}")';
类似的东西。
exec($cmd . " > /dev/null &");
我的问题是我怎么知道 file1.iso 和 file2.xls 完成合并,所以我可以发送另一个命令来压缩文件?比如file1.iso和file2.xls变成filexxx.zip。
请注意,文件可以是多个,每个单独的文件可以很大(我会说最多 4GB,这就是为什么将 100MB 分成小部分的原因)
【问题讨论】:
-
cat foo >> bar && baz-&&在运行下一个命令之前等待上一个命令完成。不知道有没有更精细的方法? -
@Emissary 但同时,我不希望上传文件的用户等待文件完成合并和压缩。它必须在后台运行,因此在文件部分完成上传并到达服务器后,用户可以注销或执行其他任何操作。而不是等待合并和压缩
-
可能在合并文件中使用某种命名约定,然后让一些 cron 命令定期扫描与指定名称/模式匹配的文件并压缩它们。可以肯定的是,在 cat 命令完成之前,合并的文件不会被写入文件系统。
-
@Emissary 否,合并文件将在 cat 命令启动后立即写入文件系统。然后只是文件大小会不断增加,直到完成
-
我刚刚测试过——认为你是对的。您是否可以然后
cat foo > bar && echo '[filename]' >> logfile然后让您的 cron 脚本读取已完成合并的日志文件?
标签: php unix file-upload zip