PHP在特定时间移动文件

时间:2014-06-12 07:27:13

标签: php pipe

我正在尝试在特定时间将文件从一个文件夹移动到另一个文件夹。为了实现这一点,我试图使用带有管道的Linux at命令:

`mv file /to/dest | at h:m d.m.y`

这就是我所写的:

$move = "mv $filename /destination/folder";
$at = "at $my_datetime";
$res = execute_pipe($move,$at);

其中execute_pipe函数定义如下:

function execute_pipe($cmd1 , $cmd2)
 {
        $proc_cmd1 = proc_open($cmd1,
          array(
            array("pipe","r"), //stdin
            array("pipe","w"), //stdout
            array("pipe","w")  //stderr
          ),
          $pipes);

        $output_cmd1 = stream_get_contents($pipes[1]);
        fclose($pipes[0]);
        fclose($pipes[1]);
        fclose($pipes[2]);
        $return_value_cmd1 = proc_close($proc_cmd1);


        $proc_cmd2 = proc_open($cmd2,
          array(
            array("pipe","r"), //stdin
            array("pipe","w"), //stdout
            array("pipe","w")  //stderr
          ),
          $pipes);

        fwrite($pipes[0], $output_cmd1);
        fclose($pipes[0]);  
        $output_cmd2 = stream_get_contents($pipes[1]);

        fclose($pipes[1]);
        fclose($pipes[2]);
        $return_value_cmd2 = proc_close($proc_cmd2);


        return $output_cmd2;
 }

问题是文件立即被移动,忽略了at命令。我错过了什么?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

对我来说,似乎你的问题与PHP无关。您只是错误地使用了Shell。 at的手册页读取:

at and batch read commands from standard  input  or  a  specified  file
  which are to be executed at a later time, using /bin/sh.

但是你对shell的使用会执行你的" mv文件/目的地"命令,然后将该命令的OUTPUT传递给at。在成功的移动操作中,输出将一无所获。因此,通过使用管道,您实际上会立即移动文件并告诉at在指定时间不执行任何操作。

通过在终端中键入at来阅读man at的手册页以解决问题。提示:如果你想使用STD INPUT,回复你的命令可能会有所帮助;)