上面提供的答案解决了问题,但不能解释操作描述的奇怪行为。这个解释可以帮助任何人在开发环境中测试站点之间的通信,在开发环境中,这些站点都驻留在同一台主机上(和同一个虚拟主机;我正在使用Apache2.4和php7.0)。
有一种微妙的
file_get_contents()
我在这里发现这是绝对相关的,但没有解决(可能是因为它几乎没有文档记录,或者没有文档记录,或者是在一个模糊的PHP安全模型白皮书中,我找不到)。
用
allow_url_fopen
设置为
Off
在所有相关环境中(例如
/etc/php/7.0/apache2/php.ini
,
/etc/php/7.0/fpm/php.ini
等)和
允许访问权限
设置为
On
在命令行上下文中(即
/etc/php/7.0/cli/php.ini
)
文件获取目录()
对于本地资源,不允许记录任何警告,例如:
file_get_contents('php://input');
或
// Path outside document root that webserver user agent has permission to read. e.g. for an apache2 webserver this user agent might be www-data so a file at /etc/php/7.0/filetoaccess would be successfully read if www-data had permission to read this file
file_get_contents('');
或
// Relative path in same document root
file_get_contents('data/filename.dat')
总之,限制
allow_url_fopen = Off
类似于
iptables
规则在
OUTPUT
链,其中限制仅在尝试“退出系统”或“更改上下文”时应用。
N.B.
允许访问权限
设置为
论
在命令行上下文中(即
/etc/php/7.0/cli/php.ini文件
)是我的系统所拥有的,但我怀疑这与我提供的解释没有关系,即使它被设置为
下车
当然,除非通过从命令行本身运行脚本进行测试。我没有用
允许访问权限
设置为
下车
在命令行上下文中。