1

私には2つの機能があります。mysql接続を使用してバックグラウンドで実行し、ブラウザにエラーや何も返さずに実行したい関数の1つ。そして、ブラウザにデータを返す実行したい別の関数。

次のように php pcntl_fork を使用しました。

$pid = pcntl_fork();
switch ($pid) {
  case -1:
    $this->function_background();
    $this->function_return();
    exit();
  case 0:
    $this->function_background();
    break;
  default:
    $this->function_return();
}

この場合、 でのみ発生するデータベース エラー番号 2006 が返されますfunction_background()

私はfunction_background()、mysql接続を使用してバックグラウンドで関数を完全かつ独立して実行し、エラーなどでブラウザを妨害することなく実行したいと考えています。そしてfunction_return()、ブラウザへのメッセージ。

どんな助けにも感謝します。誰かが私に詳細な情報を教えてくれれば素晴らしいです。

ありがとう。

4

1 に答える 1

2

コメントのように、pcnt_fork() は既存のプロセスを fork するために使用されます。バックグラウンドで実行するには、次を使用して何かを実装するだけです。

$pid = shell_exec(sprintf('%s > /dev/null 2>&1 &', $command));

どこ:

  • > /dev/null は、stdout が破棄されることを意味します。
  • 2>&1 は、stderr が stdout にあることを意味します (破棄されます)。
  • & を使用すると、このコマンドをバックグラウンド タスクとして実行できます。

プロセスが実行されていることを確認するため

$procResult = shell_exec(sprintf('ps %d', $pid));
if (count(preg_split("/\n/", $procResult)) > 2) {

    return true;
}
于 2015-03-14T13:13:43.213 に答える