forrest79/phpfpm-request

从命令行运行php-fpm请求。

v0.8.1 2024-01-26 21:50 UTC

This package is auto-updated.

Last update: 2024-09-13 20:26:59 UTC


README

Latest Stable Version Monthly Downloads License Build

这是一个简单的工具,可以直接从命令行发送php-fpm请求,无需设置您的Web服务器来处理这些请求。

安装

推荐通过Composer安装Forrest79/PhpFpmRequest。

composer require forrest79/phpfpm-request

这还需要在您的系统上安装cgi-fcgi。在Debian(Ubuntu...)等Linux系统上,您可以这样做

sudo apt install libfcgi0ldbl

您可以使用此功能清除需要通过HTTP请求调用的cli缓存(opcache、apcu...),或者在新版本部署后、在Web服务器开始指向新源代码之前预热缓存。

如何使用

我们只需要知道php-fpm在哪里监听。它是配置指令listen,可能是socket。在nginx中是指令fastcgi_pass。如果您不知道,或者您计划在不同的系统上运行此程序,您可以尝试自动检测

$requester = Forrest79\PhpFpmRequest\Requester::autodetect();

或者,如果您知道php-fpm在哪里监听,您可以使用这个值

$requester = Forrest79\PhpFpmRequest\Requester::create('/var/run/php/php7.4-fpm.sock');

现在只需简单地设置要处理的PHP文件

$requester->setPhpFile('/var/www/index.php');

并发送请求

$response = $requester->send();

现在我们有一个Response对象,可以返回一个包含HTTP头和文本体的array

echo $reponse->getBody() . PHP_EOL;

foreach ($response->getHeaders() as $header) {
    echo $header . PHP_EOL;
}

如果您需要向php-fpm传递更多选项,请使用setOption(string $name, string $value)方法。只有REQUEST_METHOD自动设置为GET,而SCRIPT_FILENAME会被传递。但您可以添加任何您想要的选项

$requester
    ->setOption('QUERY_STRING', '?param=1')
    ->setOption('SERVER_NAME', 'my-server.com')
    ->setOption('REQUEST_URI', '/show-detail/');

如果您需要更好的API,通过扩展Requester类并创建更好的公共API来实现,并在每个方法中只调用parent::setOption('...', '...')

在单个文件中将cli和php-fpm合并

您可以将cliphp-fpm源代码放在同一个文件中

if (PHP_SAPI === 'cli') {
    echo Forrest79\PhpFpmRequest\Requester::autodetect()
        ->setPhpFile(__FILE__)
        ->send()
        ->getBody() . PHP_EOL;
} else {
    echo 'This code is processed with php-fpm. You can warm up your cache here, clean cache, etc.';
}