上面提供的答案解决了问题,但没有解释 OP 描述的奇怪行为。这种解释应该有助于任何人在开发环境中测试站点之间的通信,其中这些站点都驻留在同一主机上(和同一虚拟主机;我正在使用 apache 2.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
allow_url_fopen
On
/etc/php/7.0/cli/php.ini
file_get_contents()
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('<file path to file on local machine user agent can access>');
或者
// Relative path in same document root
file_get_contents('data/filename.dat')
总而言之,该限制allow_url_fopen = Off
类似于链中iptables
的一条规则OUTPUT
,其中该限制仅在尝试“退出系统”或“更改上下文”时应用。
NB在命令行上下文中allow_url_fopen
设置为On
(即/etc/php/7.0/cli/php.ini
)是我在系统上的设置,但我怀疑它与我提供的解释无关,即使它设置为,Off
除非您当然是通过从命令行本身。我没有在命令行上下文中使用allow_url_fopen
set to测试行为。Off