PHP的外壳EXEC wget来在后台不运行(php shell exec wget to run

2019-09-19 02:21发布

我想运行如下的wget

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

我要的是让PHP等待了shell_exec wget的文件下载到继续与代码的其余部分之前完成。 我不想等待几秒钟的定数。

如何做到这一点,因为我跑了shell_exec wget的,该文件将开始下载,并在后台运行,PHP将继续。

Answer 1:

请问您的网址包含&字符? 如果是这样,你的wget可能会进入的背景和了shell_exec()可能会立即返回。

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

shell_exec("wget '$url'");

否则,外壳会曲解和。

转义命令行参数是在一般一个好主意。 最全面的方式做到这一点是escapeshellarg():

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


Answer 2:

没有了shell_exec等待命令完成 - 所以你不需要睡眠命令不惜一切:

<?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'");


文章来源: php shell exec wget to run not in background