如何使用 php5-fpm 池套接字执行 php 文件?

2022-08-31 01:01:36

我需要从命令行执行php脚本,但是如果我直接调用“php5 myfile.php”,我会有一些安全问题(主要是openbasedir限制和user&group权限)。

因此,我想从与fpm进程相同的约束中执行该php文件()。这个过程有一个袜子文件,我相信,它会像conf文件一样受到限制(相同的user&group,一些php_admin_value等)。/etc/php5/fpm/pool.d/specific_process.conf/var/run/php5-fpm-specific.sock

但是我看不出我怎么能从命令行做到这一点,并通过给出一些论据。

我尝试了类似的东西:

php5 --bindpath /var/run/php5-fpm-specific.sock -f /path/to/my/file.php param1 param2

但是,它当然不起作用。我该怎么办?

注意:我调用的文件需要一些参数(此处和)。param1param2

感谢您的帮助。


答案 1

您将需要可执行文件(在软件包的 Debian 部分中),然后您可以通过执行此命令来执行此操作(这是转义换行符的一行,您应该能够像这样将其粘贴到您的 shell 中):cgi-fcgilibfcgi0ldbl\

SCRIPT_NAME=/file.php \
SCRIPT_FILENAME=/path/to/my/file.php \
REQUEST_METHOD=GET \
QUERY_STRING=param1=x\&param2=y \
cgi-fcgi -bind -connect /var/run/php5-fpm-specific.sock

然后,您将收到输出,因为它将被发送到HTTP服务器,因此它将包含HTTP标头,例如对于包含以下内容的脚本:<?php echo "The time is ", date("H:i:s");

Content-type: text/html

The time is 13:46:35

还有几个参数,但这些是最基本的参数(看看它们如何映射到数组,这就是后台发生的事情):$_SERVER

  • SCRIPT_NAME这是从HTTP端看到的脚本名称。在我的示例中,该文件可以通过以下方式访问http://localhost/file.php
  • SCRIPT_FILENAME这是脚本的本地路径 - 这是HTTP服务器通常从URL中确定的内容,在这里您需要自己指定它
  • QUERY_STRING如果您还想传入 URL 中的内容,则可以使用,请注意,我们在 shell 中,因此您需要像这样转义 & 符号:?\&

另请参阅:


答案 2

推荐