2016-09-12 7 views
-1

2つのC#アプリケーションが関係するphpサービスを実装したい場合、各アプリケーションは以前のアプリケーションの出力を読み込み、別の出力を生成します。スレッドやその他の非同期メカニズムを必要とするのではなく、これを行単位で実装できるかどうかは疑問です。PHPで関数呼び出しの順序を保証するには?

ユーザーは次のように現在書かれ、uploadFile.phpにつながる、this webpageでテキストファイルをアップロードすることができます

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

そして、c1.exetest.txtの内容を使用し、c1_test.txtを生成し、ユーザーのアップロードにWebページでtest.txtを想定c2.exec1_test.txtの内容を使用し、c2_test.txtを生成します。

私のテスト(1人のユーザーのみ)は、現在のuploadFile.phpがこのタスクを段階的に実行できることを示しています。

しかし、多くのユーザーが起動できるWebサービスに適しているかどうかはわかりません。

助けてもらえますか?

編集1:実行の順序が尊重される場合、別の懸念事項は、以前のユーザーのすべてのタスクが完了するまでユーザーが待機する必要があるかどうかです。 c1.exeまたはc2.exeが実行に数分かかる場合は、フィードバックなしでこの待機が厄介です。

現在のアプローチでは、複数のユーザーが同時にタスクを実行できます(ユーザーごとに順調に実行できます)。それ以外の場合は、自分でマルチスレッドを実装する必要がありますか?

+1

を私は上記のアプローチで何の問題を見ません。 – nogad

+0

'c1.exe'を実行するのに5分かかるとしましょう。別のユーザーがユーザーの直後にファイルをアップロードするとどうなりますか?そこには「キュー」がありますか? – SoftTimur

+1

出力がリダイレクトされない限り、execはブロックしています – nogad

答えて

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"; 
?> 
+1

キューがないので、すべてのファイルが異なるパスを持つ必要があります。 – christophe

+0

デフォルトでは、サーバーは異なるユーザーからの同時要求をうまく管理していますか? – SoftTimur

+1

いいえ、同時に実行されるuploadFile.phpへの呼び出しごとに1つのプロセスがあります。しかし、ファイルの名前が異なる場合は問題ありません。 – christophe

関連する問題