2017-11-01 3 views
0

私は外部クラスからメソッドを呼び出すいくつかのPHPスクリプトを用意しています。私はこのメソッドを非同期に実行したい。私はプログラムの残りの部分をブロックしたくありません。このメソッドはバックグラウンドでいくつかの処理を行い、何も返さないので、処理が完了するまで待つ必要はありません。 PHPでこれを行う方法はありますか?PHPプログラム内でPHPコードの一部を非同期で実行する

# get post data from user 
$postData = $this->f3->get('POST'); 

# start of asynchronous part 
$obj = new asyncClass(); 
$obj->init($postData); 
# end of asynchronous part 

# do some work with post data 
$soc = new someOtherClass($postData); 
$result = $soc->send(); 
# assign result of work to variable 
$this->f3->set('var', $result); 
# show it to user 
$this->f3->set('view', 'view.html'); 

これが助けることができるならば、私は脂肪無料FrameworkとPHP 5.6非スレッドセーフ

答えて

2

あなたは、ブラウザへの出力/応答を送信し、その後、あなたの他のブロッキング機能を処理するために$f3->abort()を使用することができます。それは本当の非同期ソリューションではありませんが、うまくいくでしょう。また、スレッドのサポートを追加するためにphic - icicleのようなものを使用することができますが、おそらく他のPHPモジュールがインストールされている必要があります。

+0

'$ f3-> abort()'がトリックをしました – dabajabaza

0

使用のスレッドを使用しています。

class PostDataHandlerAsync extends Thread 
{ 
    private $postData 
    public function __construct($postData) 
    { 
     $this->postData = $postData; 
    } 

    public function run() 
    { 
     /* 
     Your code goes here 
     */ 
    } 
} 

$postData = $this->f3->get('POST'); 
$obj = new PostDataHandlerAsync($postData); 
$obj->run(); 
+0

返信いただきありがとうございます。私はそれをチェックした。プロダクションサーバー上のPHPバージョンは非スレッドセーフなので、私は推測するスレッドを使用することができません。私はその問題を修正した。 – dabajabaza

関連する問題