Facebook SDKを使用して、タイムラインにいくつかのことを投稿しています。問題は、APIリクエストに通常2〜3秒かかり、特にajaxリクエストがたくさんあるため、Webサイトの速度が低下することです。
PHPコードの一部をバックグラウンドにフォークする方法はありますか?すべてのグローバル、セッションなどを同じままにしてほしい。
PHP を使用exec()
して、別の PHP スクリプトを実行できます。
$cmd = "php5 -q /path/to/php/send_fb_request.php";
exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
プロセスがまだ実行されているかどうかを監視する場合は、次のようにします。
function isRunning($pid){
try{
$result = shell_exec(sprintf("ps %d", $pid));
if( count(preg_split("/\n/", $result)) > 2){
return true;
}
}catch(Exception $e){}
return false;
}
可能であれば、そのためのキューを作成し、Web サイトの Web リクエストを生成して処理する http プロセスからではなく、キューからこれらの時間コストの問題を実行します。
そうすれば、完全に制御でき、他のサーバーに分離することもできます。これは、この種の問題の最も一般的な解決策です.
できれば実際のキュー ソリューションを使用する必要がありますが、プロジェクトが小規模な場合に機能する単純な MySQL ソリューションも数多く見てきました。詳細については、こちらをご覧ください: http://www.engineyard.com/blog/2011/5-subtle-ways-youre-using-mysql-as-a-queue-and-why-itll-bite-you/
いくつかのキューもチェックしました。また、いくつかの API で発生する可能性のあるレート制限、ロギング、測定なども可能です。良い点は、投稿の作成と実際の処理を外部の当事者と分離し、制御とコードの分離の中心点を提供することです。
スタンドアロンのSymfony2コンポーネントプロセスを試すことができます
親切に使用してください、それは私のために働きます。それはすばらしく働いています。
$pid = pcntl_fork();
if($pid === -1) die('error: unable to fork.');
else if($pid) exit(0);
posix_setsid();
sleep(1);
ob_start();
あなたは非同期PHPを求めているようです。この記事では、テクニックを非常によく説明しています: http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html