0

Facebook SDKを使用して、タイムラインにいくつかのことを投稿しています。問題は、APIリクエストに通常2〜3秒かかり、特にajaxリクエストがたくさんあるため、Webサイトの速度が低下することです。

PHPコードの一部をバックグラウンドにフォークする方法はありますか?すべてのグローバル、セッションなどを同じままにしてほしい。

4

5 に答える 5

2

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;
}
于 2012-06-16T09:07:08.807 に答える
1

可能であれば、そのためのキューを作成し、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 で発生する可能性のあるレート制限、ロギング、測定なども可能です。良い点は、投稿の作成と実際の処理を外部の当事者と分離し、制御とコードの分離の中心点を提供することです。

于 2012-06-16T09:03:12.170 に答える
0

スタンドアロンのSymfony2コンポーネントプロセスを試すことができます

于 2012-06-16T11:22:09.680 に答える
0

親切に使用してください、それは私のために働きます。それはすばらしく働いています。

$pid = pcntl_fork();
if($pid === -1) die('error: unable to fork.');
else if($pid) exit(0);

posix_setsid();
sleep(1);

ob_start();
于 2015-09-16T14:35:32.913 に答える
0

あなたは非同期PHPを求めているようです。この記事では、テクニックを非常によく説明しています: http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

于 2012-06-16T09:13:45.497 に答える