这非常重要,因为我在 Google 中找不到任何我想要的东西。
我如何知道由命令行执行的应用程序(或者将其称为任务更合适?)何时完成?如果我这样做,PHP如何知道复制多个文件的任务是否完成:
exec("cp -R /test/ /var/test/test");
即使命令仍在后台运行以进行复制,PHP 脚本是否继续转到下一个代码?还是 PHP 脚本等到复制完成?以及命令行应用程序在完成时如何通知脚本(如果有的话)?一定有某种互动正在发生。
这非常重要,因为我在 Google 中找不到任何我想要的东西。
我如何知道由命令行执行的应用程序(或者将其称为任务更合适?)何时完成?如果我这样做,PHP如何知道复制多个文件的任务是否完成:
exec("cp -R /test/ /var/test/test");
即使命令仍在后台运行以进行复制,PHP 脚本是否继续转到下一个代码?还是 PHP 脚本等到复制完成?以及命令行应用程序在完成时如何通知脚本(如果有的话)?一定有某种互动正在发生。
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
}
?>
它一直等到 exec 调用返回,无论它返回什么。
然而,退出调用可能会返回,尽管它已启动的命令尚未完成。如果您从控件中分离出来,例如通过在命令末尾显式指定“&”,则可能会出现这种情况。