php-fpm为感兴趣的人提供状态页面。它看起来像这样:
curl http://localhost/server-status
pool: default
process manager: dynamic
start time: 11/Dec/2014:17:51:33 -0500
start since: 61383
accepted conn: 4682
listen queue: 0
max listen queue: 0
listen queue len: 0
idle processes: 11
active processes: 1
total processes: 12
max active processes: 2
max children reached: 0
slow requests: 3
如何从php访问此信息?请不要告诉我使用curl从localhost请求状态页面。
答案 0 :(得分:1)
不幸的是,来自FPM的server-status
不是PHP机制。你无法通过内部PHP机制获得它。
达到此目的的唯一方法是使用某种连接机制来fpm服务器本身。
您可以通过使用CURL
或file_get_contents()
或从网址获取数据的任何其他机制从网址获取信息来获取该信息。
您可以使用以下参数连接本地套接字和shell exec:
(shell代码)
SCRIPT_NAME=/status \
SCRIPT_FILENAME=/status \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect /var/run/php-fpm/www.sock
答案 1 :(得分:0)
在ubuntu中,我能够通过此
访问PHP-FPM状态页面Primary script unknown
Status: 404 Not Found
Content-type: text/html; charset=UTF-8
File not found.
注意:运行上述命令时可能会发现错误,例如
pm.status_path = /status
如果您收到此错误,请确保在pool.d/www.conf
中取消注释/etc/php/7.0/fpm/pool.d/www.conf
。
使用PHP 7的ubuntu 17.04中该配置文件的绝对路径为service php7.0-fpm restart
,行号为232
编辑conf文件后,使用exec( 'SCRIPT_NAME=/status SCRIPT_FILENAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php/php7.0-fpm.sock', $php_fpm_status );
// Above statement will assign an array to $php_fpm_status filled with every line of output from the command, make it as whole string
$php_fpm_status = implode(PHP_EOL, $php_fpm_status);
// You can try printing php-fpm status
echo $php_fpm_status;
通过PHP SCRIPT获取
您可以通过使用exec()
[Route("api/[controller]")]
public class PasswordController : Controller
{
private readonly AppSettings _options;
public PasswordController(IOptions<AppSettings> optionsAccessor)
{
_options = optionsAccessor.Value;
}
[HttpGet]
//this isnt returning anything...
public IActionResult Get([FromQuery]string emp)
{
var x = HttpContext.Request.Query["emp"].ToString();
Response.Headers.Add("x-emp-name", x);
return Json(_options.ClientSettings);
}