forrest79 / phpfpm-request
从命令行运行php-fpm请求。
v0.8.1
2024-01-26 21:50 UTC
Requires
- php: ^8.0
Requires (Dev)
- forrest79/phpcs: ^1.2
- forrest79/phpcs-ignores: ^0.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-strict-rules: ^1.5
README
这是一个简单的工具,可以直接从命令行发送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合并
您可以将cli
和php-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.'; }