2016-03-19 10 views
0

セットアップは、PHP-FPMを使用して同じサーバで実行される2つの別々のPHPプロジェクトです。現在、彼らはcURLでHTTPリクエストを行うことで、JSON上でお互いに「話す」。PHPプロセス内でのPHP-FPMの使用

ここで問題となるのは、cURLとWebサーバーのオーバーヘッドは時間の無駄です。すべての他のプログラムは、現在のフォルダのすぐ上のフォルダにあります。それでは、なぜcURLとHTTPを使用するのですか?トリックは、オートローダが衝突して大きな混乱を招くため、他のプロジェクトのファイル形式だけを含めることはできません。そのためには、別々のプロセスが必要であり、あまり共有しないことが必要です。

私が問題を解決するために提案したのは、PHPプロセスが接続できるソケットをリッスンし、node-phpfpmモジュールを使用して直接PHP-FPMにリクエストを行うことができるNode.jsサーバーを作成することです。これで問題は解決しますが、Node.jsプロキシが必要な理由は何ですか?

新しいFPMリクエストをPHPから直接作成する方法が必要ですが、見つけられません。

私はexec()でも実行可能なCLIを使用することができますが、それは全くありません。具体的には、exec()でリクエストデータを渡すことはほとんど不可能です。

+0

HTTP要求を作成する作業が一番効率的になるでしょう。ノードプロキシを追加することはそれほど効果的ではありません。PHP-FPMを使用している場合、おそらく既にNginxのようなリバースプロキシに直面しているでしょう。 – doublesharp

答えて

1

あなたは、例えば、このライブラリを使用して、直接UNIXまたはTCP/IPのソケットを介してPHPスクリプトからPHP-FPMインスタンスにリクエストを行うことができます。READMEに基づいてhttps://github.com/ebernhardson/fastcgi

コード例、:

<?php 

use EBernhardson\FastCGI\Client as FastCGIClient; 
use EBernhardson\FastCGI\CommunicationException; 

$client = new FastCGIClient('/var/run/php5-fpm.sock'); 

try { 
    $client->request([ 
     'REQUEST_METHOD' => 'POST', 
     'SCRIPT_FILENAME' => '/full/path/to/script.php', 
    ], $postBody); 
    $response = $client->response(); 
} catch (CommunicationException $e) { 
    // Handle exception 
} 

あなたが考えることができる他のライブラリがあります:https://packagist.org/search/?q=fastcgi

+0

ありがとう!私は実際にあなたが投稿した直後に述べた図書館のクローンを発見しました。しかし、拡張機能ははるかに良いだろう。私は接続方法を指定するというアイデアは嫌いです。これはWebサーバー側で行われます。構成を複製すると常に問題が発生します。 – rinu

+0

PHP-FPM SAPIはApacheモジュールのように多くのAPI関数を公開していないため、このオプションは唯一のオプションです。たとえば、mod_phpで実行されているスクリプトは、この関数を使用して内部サブリクエストを作成できます。http://php.net/manual/en/function.virtual.php。 –

関連する問題