PHP Open_basedir ограничения на URL
Я хочу задать вопрос.
У меня есть веб-сервер (apache2/php/debian) и PHP, настроенный с опцией open_basedir по некоторым причинам безопасности.
Мне нужно получить доступ к URL-адресу с помощью file_get_contents(), но я получаю сообщение об ошибке Предупреждение: file_get_contents(): действует ограничение open_basedir.
Я проверил php config, и allow_url_fopen включен.
На сервере разработки (Ubuntu 10.10) он работает правильно, а в Debian (6.0 squeeze) - нет. Любая идея??
Версия PHP 5.3.3-7+squeeze7 с Suhosin-Patch
Пример:
php.ini:
Open_basedir = /var/securedir/:/var/www
allow_url_fopen = On
PHP-код:
$a = file_get_contents("http://www.php.net");
Warning: file_get_contents(): open_basedir restriction in effect.
Другая проблема заключается в том, что:
$b = file_get_contents("/var/securedir/file.xml")
Warning: file_get_contents(): open_basedir restriction in effect. File(/var/securedir/file.xml) is not within the allowed path(s): (/var/securedir/:/var/www)
1 ответ
Почему бы просто не использовать cURL для получения содержимого? Это будет всего лишь несколько дополнительных строк кода:
function fetch_content( $sUrl ) {
$aOptions = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false
);
$cUrlHndl = curl_init( $sUrl );
curl_setopt_array( $cUrlHndl, $aOptions );
$binaryContents = curl_exec( $cUrlHndl );
curl_close( $cUrlHndl );
return $binaryContents;
}
Поскольку file_get_contents действительно представляет угрозу безопасности, поэтому он отключен на сервере. Вы получаете предупреждение, потому что путь, который вы пытались открыть, не включен в файл настроек php.ini.