1

PHP の pcntl_fork() を使用していましたが、CLI から実行すると正しい結果が得られることに気付きましたが、Apache から実行すると、「Undefined function pcntl_fork()」という例外が発生します。

はい、Apache経由で実行するのは安全ではないことを読みました!!

私の質問:

apache 経由で pcntl_fork() 実装を持つ php スクリプトを実行できる回避策はありますか?

そもそも、apache 経由で fork を実行するのは安全ではなく、CLI からは十分に安全なのはなぜですか?

4

1 に答える 1

0

たとえば、ユーザーがページ要求をキャンセルした後 (ブラウザの「停止」、「戻る」、「更新」などを押した後) にもスクリプトを実行し続けたい場合は、ignore_user_abort http://wwwを検討することをお勧めします。 .php.net/manual/en/function.ignore-user-abort.php .

Apache からのフォークが許可されていない理由は、PHP が Apache とどのように接続されているかです。この分野について詳しく説明できるほどの深い知識はありませんが、おそらく次のようになります。

mod_php を使用すると、Apache はリクエストごとに新しい PHP プロセスを生成します。これは、apache が各プロセスを追跡し、リクエストが終了したらプロセスを強制終了する必要があることを意味します。

ただし、mod_fcgi およびその他 (私が思うに) では、1 つの PHP プロセスが複数のリクエストに対して生成されます。これは、プロセスが実行され続け、新しいリクエストを受け入れることを意味します。ただし、メモリ リークを制御するために、これらの子 PHP プロセスは定期的に強制終了されます。

そして今、これらの PHP プロセスの子プロセス内で新しいプロセスを生成しようとすると、率直に言って、何が起こるかわかりません。生成されたプロセスが強制終了されず、リソースを占有し続ける可能性が最も高くなります。

于 2013-10-16T10:18:39.437 に答える