PHP Open_basedir ограничения на URL - PullRequest
2 голосов
/ 10 февраля 2012

Я хочу задать вопрос.У меня есть веб-сервер (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 Ответ

0 голосов
/ 05 марта 2012

Почему бы просто не использовать 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.

...