2016-03-19 39 views
0

该设置是使用PHP-FPM在同一服务器上运行的两个单独的PHP项目。目前,他们通过使用cURL发出HTTP请求而通过JSON彼此“说话”。在PHP进程中使用PHP-FPM

这里的问题是cURL和web服务器开销是浪费时间。毕竟其他程序就在那里,在当前文件夹的正上方。那么为什么要用cURL和HTTP来解决这个问题呢?诀窍是我不能只包含一个文件形式的另一个项目,因为自动加载器发生冲突并造成大混乱。出于这个原因,他们需要单独的流程,而不是分享太多。

我建议解决这个问题的方法是创建一个Node.js服务器,它侦听我的PHP进程可以连接的套接字,并且能够使用node-phpfpm模块直接向PHP-FPM发出请求。虽然这解决了问题,但我在问自己为什么需要Node.js代理?

必须有办法直接从PHP创建一个新的FPM请求,但我还没有找到它。

我知道我也可以在exec()上使用CLI可执行文件,但这根本不是很好。更具体地说,使用exec()传递请求数据几乎是不可能的。

+0

没有一堆工作,使HTTP请求将是最有效的。添加一个Node代理对你来说并没有多大的作用,毕竟如果你使用的是PHP-FPM,它可能已经有了像Nginx这样的反向代理。 – doublesharp

回答

1

您可以直接通过UNIX或TCP/IP插座中使用,例如,该库使从PHP脚本到PHP-FPM实例的请求: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不会公开许多API函数,就像Apache模块一样。例如,运行在mod_php中的脚本可以使用这个函数http://php.net/manual/en/function.virtual.php进行内部子请求。 –

相关问题