2

だから私は私のphpコードからいくつかのスクリプトを実行しようとしています。それはページblah.phpにあります

<?php
     // ....
     // just basic web site that allows upload of file...
?>

内部ではシステムコールを使用しています

if (system("blah.pl arg1") != 0)
{
   print "error\n";
}
else
{
   print "working on it..you will receive e-mail at completion\n";
}

うまく機能しますが、印刷が完了するまで完了します。タイプミスではなく、phpからperlスクリプトを呼び出していることを認識しています。

プログラムの実行を開始して、バックグラウンドで完了するにはどうすればよいですか。blah.plスクリプトは、電子メール通知を処理します。

誰?

ありがとうございます

4

4 に答える 4

10

システム機能のドキュメントから:

注:プログラムがこの関数で開始された場合、プログラムがバックグラウンドで実行を継続するには、プログラムの出力をファイルまたは別の出力ストリームにリダイレクトする必要があります。そうしないと、プログラムの実行が終了するまでPHPがハングします。

Perlスクリプトの出力をリダイレクトするだけで、スクリプトが終了するのを待たずにPHPを実行できるはずです。

system("blah.pl arg1 > /dev/null 2>&1 &");
于 2009-11-21T19:44:00.510 に答える
2

アンパサンドを追加して、バックグラウンドでプロセスを生成できますか?

if (system("blah.pl arg1 &") != 0)
于 2009-11-21T19:43:17.530 に答える
-1

あなたはおそらくpopen機能を使うことができます

http://www.php.net/manual/en/function.popen.php

于 2009-11-21T19:42:10.683 に答える
-2

すべてのPHPコマンドライン関数は結果を待つため、emailerスクリプトを呼び出すための別のページを用意することをお勧めします。

つまり、cURLまたはファイルラッパーを使用してemail.phpページ(またはその他)にリクエストを送信します。これにより、結果を受信する前に接続を閉じることができます。したがって、プロセスは次のようになります。

        page_running.php
        |
    cURL call to (email.php?arg1=0)
        |           |
final output        email.php
                    |
                    calls system("blah.pl arg1")
于 2009-11-21T20:01:47.693 に答える