如何保证PHP中函数调用的顺序?

时间:2016-09-12 21:31:25

标签: php multithreading asynchronous

我想实现一个php服务,其中涉及2个C#应用程序,每个应用程序读取其先前应用程序的输出并生成另一个输出。我想知道这是否可以逐行实现,而不是需要线程或其他异步机制。

用户可以在this webpage上传文本文件,该文件文件通向uploadFile.php,目前的文字如下:

<?php
copy($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]);
$n1 = "uploads/" . $_FILES["file"]["name"];
echo "Uploaded: " . $n1 . "<br>";
exec("mono c1.exe $n1");
echo "After running c1.exe";
$n2 ="uploads/c1_" . $_FILES["file"]["name"];
exec("mono c2.exe $n2");
echo "After running c2.exe";
?>

假设用户在网页中上传test.txtc1.exe使用test.txt的内容并生成c1_test.txt,然后c2.exe使用c1_test.txt的内容1}}并生成c2_test.txt

我的测试(仅由1位用户)显示当前uploadFile.php可以逐步执行此任务。

但我不知道这是否是许多用户可以推出的网络服务的正确实现。

有人可以帮忙吗?

编辑1:如果可以遵守执行顺序,另一个问题是用户是否必须等到他之前用户的所有任务完成?在c1.exec2.exe需要几分钟才能运行的情况下,这种没有任何反馈的等待令人讨厌。

当前的方法是否允许多个用户同时运行他们的任务(但每个用户的顺序良好)?否则,我是否必须自己实现多线程?

1 个答案:

答案 0 :(得分:0)

您可以使用uniqueid

<?php
$name = uniqid();
copy($_FILES["file"]["tmp_name"], "uploads/" . $name);
$n1 = "uploads/" . $name;
echo "Uploaded: " . $n1 . "<br>";
exec("mono c1.exe $n1");
echo "After running c1.exe";
$n2 ="uploads/c1_" . $name;
exec("mono c2.exe $n2");
echo "After running c2.exe";
?>