在PHP进程中使用PHP-FPM


Using PHP-FPM inside a PHP process

设置是使用PHP-FPM在同一服务器上运行的两个独立的PHP项目。目前,它们通过使用cURL发出HTTP请求,通过JSON相互"交谈"。

这里的问题是 cURL 和 Web 服务器开销是浪费时间。在所有其他程序就在那里之后,在当前程序正上方的文件夹中。那么,为什么要在cURL和HTTP上走很长的路呢?诀窍是我不能只在另一个项目中包含一个文件,因为自动加载器会发生冲突并造成一团糟。出于这个原因,他们需要单独的流程,而不是分享太多。

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

一定有一种方法可以直接从 PHP 发出新的 FPM 请求,但我还没有找到它。

我知道我也可以将 CLI 可执行文件与 exec() 一起使用,但这根本不漂亮。更具体地说,使用 exec() 传递请求数据几乎是不可能的。

您可以使用以下

库直接通过 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