4

我想按如下方式运行 wget

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

我想要的是让 PHP 等待 shell_exec wget 文件下载完成,然后再继续执行其余代码。我不想等待设定的秒数。

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

4

2 回答 2

3

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

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

shell_exec("wget '$url'");

否则,shell 会误解 &。

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

shell_exec("wget ".escapeshellarg($url));
于 2012-07-04T17:21:38.747 回答
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'");
于 2012-07-04T17:11:59.160 回答