1

这非常重要,因为我在 Google 中找不到任何我想要的东西。

我如何知道由命令行执行的应用程序(或者将其称为任务更合适?)何时完成?如果我这样做,PHP如何知道复制多个文件的任务是否完成:

 exec("cp -R /test/ /var/test/test");

即使命令仍在后台运行以进行复制,PHP 脚本是否继续转到下一个代码?还是 PHP 脚本等到复制完成?以及命令行应用程序在完成时如何通知脚本(如果有的话)?一定有某种互动正在发生。

4

2 回答 2

1

php 的 exec 返回一个字符串,所以是的。您的网页将冻结,直到命令完成。例如这个简单的代码

<?PHP
echo exec("sleep 5; echo HI;");
?>

执行时会在页面加载 5 秒时出现,然后显示:

 HI;

如果我这样做,PHP如何知道复制多个文件的任务是否完成?

Php 不知道,它只是简单地运行命令,并不关心它是否有效,而是返回从该命令生成的字符串。这就是为什么最好使用 PHP 的复制命令,因为它在统计时返回 TRUE/FALSE。或者创建一个 bash/sh 脚本,该脚本将返回 0/FALSE 或 1/TRUE 以确定如果您要走这条路线,命令是否成功。然后你可以这样 PHP:

<?PHP
$answer = exec("yourScript folder folder2");
if ($answer=="1") {
//Plan A Worked
} else {
//Plan A FAILED try PlanB
}
?>
于 2012-10-22T21:30:45.883 回答
0

它一直等到 exec 调用返回,无论它返回什么。

然而,退出调用可能会返回,尽管它已启动的命令尚未完成。如果您从控件中分离出来,例如通过在命令末尾显式指定“&”,则可能会出现这种情况。

于 2012-10-22T21:23:13.647 回答