我有一个合并2个文件的脚本,并上传它
1)小文件 - LITERAL
2)大文件(大小<= 2GB) - 生成
# $file_size is <= 2GB
# generate sparse
$block_size = $file_size / 10;
exec("dd if=/dev/zero of=sparse bs=" . $block_size . " count=0 seek=" . ($file_size - 32768),$tmp_array);
sleep(12);
# merge files
exec("cat temp_file sparse > mergedFile");
# remove temporary files
exec("rm temp_file sparse");
# upload the file now
我的问题是,当它合并文件时,需要花费很多时间。
跳过合并过程并且文件已经上传,在整个稀疏文件和临时文件合并之前不应该这样做。
感谢您的帮助
〜macki
答案 0 :(得分:1)
看一下将稀疏文件附加到temp_file上:
exec("cat sparse >> temp_file");
更新#1:
您正在做的一件事是从另外两个文件生成一个新文件,实际上您正在制作每个文件的副本。要减少磁盘活动量,您可以将sparse
文件附加到temp_file
的末尾。然后,您可以像处理示例中的temp_file
一样处理mergedFile
。另一个好处是你只需要删除sparse
文件。
以下是您可能遇到的一些基本bash命令的simple tutorial。
答案 1 :(得分:1)
exec("cat temp_file sparse > mergedFile");
没有等待命令完成,因为您正在将cat命令的标准输出重定向到文件。如果在exec()
中运行这样的命令,该命令将在后台运行,PHP将立即移动到下一行。两种可能的解决方案:将cat temp_file sparse >mergedFile
包装在另一个shell脚本中,或者在PHP本身内进行文件串联。
答案 2 :(得分:1)
您是否尝试过使用条件运算符?作为一个快速而肮脏的例子:
cat temp_file sparse > mergedFile && rm temp_file sparse
答案 3 :(得分:0)
而是逐个执行每个程序行,编写一个shell脚本并传递变量block_size和seek作为参数。命令行参数或shell sciprt引用为$ 1,$ 2等。例如:
exec("myscript " . $one . " " .$two);
shell脚本:
#!/bin/bash
echo $1
echo $2