4

次のようにwgetを実行したい

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

私が望むのは、残りのコードを続行する前に、shell_exec wget ファイルのダウンロードが完了するまで PHP を待機させることです。一定の秒数待ちたくありません。

shell_exec wget を実行すると、ファイルのダウンロードが開始され、バックグラウンドで実行され、PHP が続行されるため、これを行うにはどうすればよいでしょうか。

4

2 に答える 2

3

URL に & 文字が含まれていますか? その場合、wget がバックグラウンドに移行し、shell_exec() がすぐに返される可能性があります。

たとえば、$url が "http://www.example.com/?foo=1&bar=2" の場合、コマンド ラインで渡すときに単一引用符で囲む必要があります。

shell_exec("wget '$url'");

そうしないと、シェルが & を誤って解釈してしまいます。

コマンド ライン パラメータをエスケープすることは、一般的には良い考えです。これを行う最も包括的な方法は、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 に答える