2011-08-01 4 views
1

私は受け入れられた答えを行うPHPスクリプトをhereと記述しています。非同期リクエストがfsock-php-Nginxを使用して動作していません

私は上記の代わりに仕事をするだろうfclose($fp)

while (!feof($fp)) { 
     $httpResponse .= fgets($fp, 128); 
    } 
でも

ループの場合は空白の前に以下を追加しない限り、それは動作しません!

しかし、何がポイントですか?私は、非同期呼び出し:(

同じコードは、Apache駆動の環境で上記のコードなしで細かい実行されている、私の痛みに追加するには望んでいた。

nginxのやPHP-FPMは、このようなに問題があれば誰でも知っています?。リクエスト

+0

私はphpが非同期サポートを持っているのか分かりません。 – Zaffy

+0

いいえ、そうではありません。スクリプトの応答や完了を待つことなく、スクリプトを開始したい。 – Shrinath

+0

要求を送信しようとしましたが、終了せず、その応答を読み取っていません – Zaffy

答えて

0

あなたが唯一のプロセス制御関数に(PCNTLライブラリ)が含まれPHPのビルドでのLinuxの風味システム上で行うことができます探している

あなたは見つけることは、ドキュメントがここにあります: http://php.net/manual/en/book.pcntl.php

具体的には、プロセスを「フォーク」することです。これにより、すべてのメモリ参照を含む現在のPHPスクリプトのプロセスと同一のコピーが作成され、両方のスクリプトが同時に実行を継続できるようになります。

"親"スクリプトはそれがまだプライマリスクリプトであることを認識しています。そして、 "子供"のスクリプト(またはスクリプトは、あなたが望むようにこれを何度でもやることができます)が子供であることを認識しています。これにより、親と子に対して別のアクションを選択することができます。子プロセスがデーモンになったら、別のアクションを選択することができます。

$pid = pcntl_fork(); //store the process ID of the child when the script forks 
if ($pid == -1) { 
    die('could not fork'); // -1 return value means the process could not fork properly 
} else if ($pid) { 
    // a process ID will only be set in the parent script. this is the main script that can output to the user's browser 
} else { 
    // this is the child script executing. Any output from this script will NOT reach the user's browser 
} 

側(あるいは長い後)に沿って実行を続けることができ、子プロセスをスピンオフするためのスクリプトを可能にする親スクリプトの出力:これを行うには

、あなたはこれらの線に沿って何かを使用したいですそれは内容であり、終了します。

これらの関数はPHPビルドにコンパイルする必要があり、大多数のホスティング企業は自分のサーバー上でこれらの関数にアクセスすることができないことに注意してください。これらの機能を使用するには、通常、仮想プライベートサーバ(VPS)または専用サーバが必要です。クラウドホスティングの設定でさえ、通常、これらの機能を誤って(または悪意のある)使用した場合、サーバを簡単に持ち運ぶことができるようになります。

関連する問題