使脚本等待生成稀疏文件

时间:2011-11-18 22:48:00

标签: php linux algorithm

我有一个合并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

4 个答案:

答案 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