gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:48:22 25 4
gpt4 key购买 nike

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

所以我想从与 fpm 进程相同的约束条件下执行该 php 文件 (/etc/php5/fpm/pool.d/specific_process.conf)。这个过程在 /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

但是当然不行。我该怎么办?

注意:我调用的文件需要一些参数(这里是 param1param2)。

感谢您的帮助。

最佳答案

您将需要可执行文件 cgi-fcgi (在 Debian 的 libfcgi0ldbl 包的一部分),然后你可以通过执行这个命令来做到这一点(这是用 \ 转义换行符的一行,你应该能够像这样将它粘贴到你的 shell 中):

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 header ,例如包含 <?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 中,因此您需要像这样转义 & 符号:\&

另见:

关于php - 如何使用 php5-fpm 池套接字执行 php 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com