我需要从命令行执行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
)。
感谢您的帮助。
答案 0 :(得分:12)
您将需要可执行文件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标头,例如包含<?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中,因此您需要像这样逃避&符:\&
另见: