php shell_exec wget不在后台运行

时间:2012-07-04 17:04:12

标签: php shell exec wget

我想按如下方式运行wget

shell_exec('wget "'http://somedomain.com/somefile.mp4'"');
sleep(20);
continue my code...

我想要的是让PHP等待shell_exec wget文件下载完成后再继续使用其余的代码。我不想等待一定的秒数。

我该怎么做,因为当我运行shell_exec wget时,该文件将开始下载并在后台运行,PHP将继续。

2 个答案:

答案 0 :(得分:3)

您的网址是否包含&字符?如果是这样,你的wget可能会进入后台,而shell_exec()可能会立即返回。

例如,如果$ url是“http://www.example.com/?foo=1&bar=2”,则需要确保在命令行传递时它是单引号:

shell_exec("wget '$url'");

否则shell会误解&。

一般来说,转义命令行参数是一个好主意。最全面的方法是使用escapeshellarg():

shell_exec("wget ".escapeshellarg($url));

答案 1 :(得分:0)

shell_exec会等待命令完成 - 所以你根本不需要sleep命令:

<?php
shell_exec("sleep 10");
?>

# time php c.php
   10.14s real     0.05s user     0.07s system

我认为你的问题很可能是这一行的引用:

shell_exec('wget "'http://somedomain.com/somefile.mp4'"');

应该是

shell_exec("wget 'http://somedomain.com/somefile.mp4'");