2012-02-10 4 views
2

Я хочу задать вопрос.
У меня есть веб-сервер (apache2/php/debian) и PHP, настроенный с параметром open_basedir по некоторым причинам безопасности.
Мне нужно получить доступ к URL-адресу, используя file_get_contents(), но я получаю сообщение об ошибке. Warning: file_get_contents(): действие open_basedir.
Я проверил php config и allow_url_fopen включен.

На сервере разработки (ubuntu 10.10) он работает правильно, но в debian (6.0) это не так. Есть идеи ??

PHP версии 5.3.3-7 + squeeze7 с Suhosin-Patch
пример:
PHP Open_basedir ограничения по URL

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

Какой вариант PHP? Может быть https://bugs.php.net/bug.php?id=48603 – symcbean

+0

PHP версия 5.3.3-7 + squeeze7 с Suhosin-Patch – EsteveBlanch

ответ

0

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

Смежные вопросы