Константы не "заполняются" при включении файла PHP с удаленного сервера
У меня есть следующая проблема: я получил PHP-файл (standards.php) с такими инструкциями: 
define('CONSTVAR', '/path/');
Теперь у меня есть другой файл под названием untitled.php, содержащий следующее: 
include ('standards.php');
echo CONSTVAR;
/path/, значение константы.
Пока все хорошо.
Но когда я помещаюstandards.php на другой из моих веб-сайтов и пытаюсь включить его оттуда (используя команду include('http://mysite.eu/core/standards.php');), это не работает. Константа остается пустой, и я также получаю следующее ошибка 
Предупреждение: главная(http://mysite.eu/core/standards.php) [функция.main]: не удалось открыть поток: разрешение отказано в /home/www/this.nl/core/untitled.php в строке 28
Предупреждение: main () [функция.include]: неудачное открытие 'http://mysite.eu/core/standards.php' для включения (include_path='.: / usr / local/php4 / lib / php') в /home/www/this.nl/core/untitled.php в строке 28
allow_url_include включен и allow_url_fopen тоже. Когда я ввожу полный URL-адрес standards.php в свой браузер, я получаю результат страницы, так что это не проблема отсутствия прав доступа, верно?
В чем тут может быть проблема? Почему константа, которая должна быть глобальной, не "наследуется" при включении с удаленного сервера?
4 ответа:
Allow_url_include включен и allow_url_fopen тоже. Когда я набираю полный url стандартов.php в мой браузер, я получаю результат страницы, так что это не вопрос отсутствия прав доступа, верно?
allow_url_fopenиallow_url_includeможно установить только в php.ini или httpd.конф. Именно локальный сервер препятствует включению файла, что отличается от ввода URL-адреса в браузер.Почему константа, которая должна быть глобальной, не является "унаследованный" при включении с удаленного сервера?
Даже если внешнее включение сработало, оно не будет работать так, как ожидалось. Includes over HTTP отличаются от стандартных includes.
Вы включаете вывод включенного файла. Внешний PHP-файл обрабатывается на внешнем сервере перед включением.
Было бы, конечно, уязвимостью безопасности, если бы внешние PHP-файлы можно было читать дословно таким образом.
Обычно вы не можете
includePHP-файлы с удаленных хостов через оболочкуHTTP, потому что, когда ваш PHP-парсер запрашивает include, он либо не находит файл (includeиспользуется для включения файлов из локальной файловой системы с абсолютными или относительными путями), либо удаленный веб-сервер отправляет ему не исходный код , а обработанный PHP-файл, который он отправил бы браузеру. Иincludeпринимает исходный код.Для получения дополнительной информации, взятой из ручного ввода
include():Предупреждение. ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ:
Удаленный файл может быть обработан на удаленном сервере (в зависимости от расширения файла и того, работает ли удаленный сервер на PHP или нет), но он все равно должен создать допустимый скрипт PHP, потому что он будет обработан на локальном сервере. Если файл с удаленного сервера должен быть обработан там и выведен только, readfile() гораздо лучше использовать функцию. В противном случае, особое внимание должно быть уделено обеспечению безопасности удаленный скрипт для получения допустимого и желаемого кода.
function cthulhu_include($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $code = curl_exec($ch); eval($code); curl_close($ch); }Доставка. Также убедитесь, что у вас есть, например .txt (обычный текст) файл вместо .php (обработанный простой текст) (потому что вы получите пустой вывод), Таким образом, каждый может увидеть ваш код в процессе, тоже.