从php内部访问php状态信息

问题描述 投票:0回答:3

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从本地主机请求状态页面。

php fpm
3个回答
1
投票

不幸的是 FPM 的

server-status
不是 PHP 机制。您无法通过内部 PHP 机制获取它。

达到此目的的唯一方法是使用某种连接机制到 fpm 服务器本身。

  1. 您可以通过使用

    CURL
    file_get_contents()
    或任何其他从 url 获取数据的机制从 url 获取信息来获取它。

  2. 您可以使用以下参数将本地套接字与 shell exec 连接:

(外壳代码)

SCRIPT_NAME=/status \
SCRIPT_FILENAME=/status \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect /var/run/php-fpm/www.sock
  1. 您可以使用某种带参数连接的套接字变体。我还没有尝试过,但是这里是一个很好的起点:https://github.com/wizaplace/php-fpm-status-cli
  2. 如果你非常固执,你可能会找到另一种创造性的方法,但他们中的任何一个都将其作为 PHP-FPM 的内部机制。

0
投票

PHP 7.3+ 现在有一个

fpm_get_status()
,它返回状态信息数组,包括摘要。

参见https://www.php.net/manual/en/function.fpm-get-status.php


-1
投票

在 ubuntu 中我可以通过此访问 PHP-FPM 状态页面

SCRIPT_NAME=/status SCRIPT_FILENAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php/php7.0-fpm.sock

注意: 运行上述命令时,您可能会遇到未找到错误,例如

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

使用 PHP 7 的 ubuntu 17.04 中该配置文件的绝对路径是

/etc/php/7.0/fpm/pool.d/www.conf
,行号是 232

编辑conf文件后,用

service php7.0-fpm restart

重新启动fpm

通过 PHP 脚本获取

您可以通过 php 运行上述命令来获取 php-fpm 状态的输出

exec()

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;
© www.soinside.com 2019 - 2024. All rights reserved.