如何使用 php5-fpm 池套接字执行 php 文件?
How to execute a php file using a php5-fpm pool socket?
我需要从命令行执行一个php脚本,但是如果我直接调用"php5 myfile.php",我会遇到一些安全问题(主要是openbasedir限制和用户和组权限)。
所以我想从与 fpm 进程 (/etc/php5/fpm/pool.d/specific_process.conf
) 相同的约束条件下执行该 php 文件。这个进程在 /var/run/php5-fpm-specific.sock
有一个 sock 文件,我相信它会像在 conf 文件中一样受到限制(相同的用户和组,一些 php_admin_value,等等)。
但我看不出如何从命令行和给出一些参数来做到这一点。
我试过类似的东西:
php5 --bindpath /var/run/php5-fpm-specific.sock -f /path/to/my/file.php param1 param2
当然不行。我该怎么办?
注意:我调用的文件需要一些参数(这里是 param1
和 param2
)。
感谢您的帮助。
您将需要可执行文件 cgi-fcgi
(在 libfcgi0ldbl
软件包的 Debian 部分),然后您可以通过执行此命令来完成它(这是 \
转义的一行换行符,您应该可以像这样将其粘贴到您的 shell):
SCRIPT_NAME=/file.php \
SCRIPT_FILENAME=/path/to/my/file.php \
REQUEST_METHOD=GET \
QUERY_STRING=param1=x\¶m2=y \
cgi-fcgi -bind -connect /var/run/php5-fpm-specific.sock
然后您将收到输出,因为它会被发送到 HTTP 服务器,因此它将包含 HTTP headers,例如对于包含 <?php echo "The time is ", date("H:i:s");
:[=26= 的脚本]
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 中],所以你需要像这样转义符号:\&
另请参阅:
我需要从命令行执行一个php脚本,但是如果我直接调用"php5 myfile.php",我会遇到一些安全问题(主要是openbasedir限制和用户和组权限)。
所以我想从与 fpm 进程 (/etc/php5/fpm/pool.d/specific_process.conf
) 相同的约束条件下执行该 php 文件。这个进程在 /var/run/php5-fpm-specific.sock
有一个 sock 文件,我相信它会像在 conf 文件中一样受到限制(相同的用户和组,一些 php_admin_value,等等)。
但我看不出如何从命令行和给出一些参数来做到这一点。
我试过类似的东西:
php5 --bindpath /var/run/php5-fpm-specific.sock -f /path/to/my/file.php param1 param2
当然不行。我该怎么办?
注意:我调用的文件需要一些参数(这里是 param1
和 param2
)。
感谢您的帮助。
您将需要可执行文件 cgi-fcgi
(在 libfcgi0ldbl
软件包的 Debian 部分),然后您可以通过执行此命令来完成它(这是 \
转义的一行换行符,您应该可以像这样将其粘贴到您的 shell):
SCRIPT_NAME=/file.php \
SCRIPT_FILENAME=/path/to/my/file.php \
REQUEST_METHOD=GET \
QUERY_STRING=param1=x\¶m2=y \
cgi-fcgi -bind -connect /var/run/php5-fpm-specific.sock
然后您将收到输出,因为它会被发送到 HTTP 服务器,因此它将包含 HTTP headers,例如对于包含 <?php echo "The time is ", date("H:i:s");
:[=26= 的脚本]
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 中],所以你需要像这样转义符号:\&
另请参阅: