Приведенные выше ответы решают проблему, но не объясняют странное поведение, описанное ОП. Это объяснение должно помочь всем, кто тестирует связь между сайтами в среде разработки, где все эти сайты находятся на одном хосте (и на одном виртуальном хосте; я работаю с 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');
or
// 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>');
or
// Relative path in same document root
file_get_contents('data/filename.dat')
В заключение, ограничение allow_url_fopen = Off
аналогично правилу iptables
в цепочке OUTPUT
, где ограничение применяется только при попытке "выйти из системы" или "изменить контексты".
Н.Б. allow_url_fopen
установлено в On
в контексте командной строки (т. скрипты из самой командной строки. Я не тестировал поведение с allow_url_fopen
установленным на Off
в контексте командной строки.
person
J-a-n-u-s
schedule
05.06.2017