Не удается включить файл на удаленном сервере

Моя проблема в том, что я не могу включить файл на удаленном сервере.

<?php
  echo "Including\n";
  require_once("http://xx.xxx.xxx.xx:8080/path/to/myfile.inc");
  echo "Done..\n";
?>

Скрипт не работает в функции require_once. Я запускаю скрипт с: php -d allow_url_include=On script.php, но чтобы убедиться, что я установил для allow_url_include и allow_url_fopen значение On в php.ini

Если я скопирую http://xx.xxx.xxx.xx:8080/path/to/myfile.inc в браузер, в котором я получил файл. Я также пытался включить другие удаленные файлы (на стандартный порт 80), но все равно не повезло

Что меня действительно смущает, так это то, что все работает с моих локальных компьютеров в моем офисе (mac, ubuntu), но не с наших серверов. Я тестировал его на двух разных серверах, виртуальном и выделенном. Я могу получить файл с помощью fopen().


person user918712    schedule 29.02.2012    source источник
comment
Обычно вы не хотите включать удаленные файлы. Если они выводят какой-либо PHP-код, он выполняется в вашей системе!   -  person ThiefMaster    schedule 29.02.2012
comment
Плюс это очень, очень медленно.   -  person Pekka    schedule 29.02.2012
comment
Я знаю об аспекте безопасности. Я имею полный контроль над обоими серверами и могу ограничить доступ к серверу с файлом. На практике все серверы находятся в одной сети, поэтому я надеюсь, что это не слишком медленно, но я собираюсь проверить это. Просто любопытно, почему на одних машинах работает, а на других нет?   -  person user918712    schedule 29.02.2012
comment
Даже если вы контролируете оба сервера, это небезопасно. Вы используете ssl (еще медленнее) или гарантируете, что ни один другой компьютер не имеет доступа к сети, и обеспечиваете целостность любых запросов DNS.   -  person symcbean    schedule 29.02.2012
comment
Я спросил здесь (stackoverflow .com/questions/28497142/).   -  person tibbqzas.sq4    schedule 13.02.2015


Ответы (2)


Это можно сделать, установив allow_url_include в on в php.ini.

Но, как упоминалось в комментариях, это открывает

огромный

дыра в безопасности вашего приложения.

person Starx    schedule 29.02.2012
comment
Но если вы абсолютно ДОЛЖНЫ включать контент с удаленных серверов, рассмотрите возможность добавления дополнительной аутентификации и кэширования! - person symcbean; 29.02.2012
comment
@symcbean Спасибо. Я знаю, что это небезопасно, и я могу обойти включение файла на удаленный сервер, но вопрос заключался в том, почему это не работало на некоторых машинах. Starx: как я писал в посте, я установил для параметра allow_url_include значение On. - person user918712; 29.02.2012
comment
я полагаю, вы могли бы использовать что-то вроде stunnel (stunnel.org/index.html) для защиты связь между серверами.... - person ven; 18.04.2013

Require_Once следует использовать только для локальных файлов. Если вы хотите получить удаленный файл, используйте file_get_contents. Помните, что если вы пытаетесь включить php с удаленного сервера таким образом, это будет действительно небезопасно или php будет выполняться на удаленном сервере.

person MichaelH    schedule 29.02.2012
comment
В документах говорится, что я должен иметь возможность использовать require_once: http://php.net/manual/en/features.remote-files.php, и это также работает на моем локальном компьютере. - person user918712; 29.02.2012
comment
Если вы читаете документацию, там говорится: Кроме того, можно использовать URL-адреса... начиная с PHP 5.2.0, для них должен быть включен allow_url_include. - person MichaelH; 29.02.2012