safe_mode open_basedir. помогите

Статус
В этой теме нельзя размещать новые ответы.

ManCuniAn

Мастер
Регистрация
5 Фев 2009
Сообщения
269
Реакции
32
Есть сайт.есть граббер новостей..( rss grabber 3.6.5)..при граббинге новости выскакивают ошибки:
Warning: curl_setopt(:( CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/h10271/data/www/Сайт.ru/engine/inc/plugins/rss.classes.php on line 301

в техподдержке сказали что курл активен..и дали:

upload_tmp_dir="/home/h10271/data/tmp"
open_basedir = "/home/h10271:/tmp:/var/tmp:/usr/bin:/usr/local/bin:/usr/local/share/pear"

что мне с этим делать? как прописать?
 
Ничего не делать, а просто внимательнее прочитать сообщение от курла, скорей всего в нем говорится, что у вас включен SAFE_MODE и что при включенном этом режиме, курл не может принять параметр CURLOPT_FOLLOWLOCATION, который отвечает за автоматический переход по Location: url.
И как всегда есть несколько выходов.
Выключить safe_mode
Донастроить rss grabber 3.6.5 прочитать описание настроек сего грабера или в коде самого грабера найти строку c CURLOPT_FOLLOWLOCATION и поставить значение false, или добавить строку вида
Код:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
ну или выключить вывод сообщений уровня warning
:)
 
сегодня только решал такую проблему.
если обязаельно нужен CURLOPT_FOLLOWLOCATION используй функцию:
PHP:
function curl_redir_exec($ch)
    {
        static $curl_loops = 0;
        static $curl_max_loops = 20;
        if ($curl_loops++ >= $curl_max_loops)
        {
            $curl_loops = 0;
            return FALSE;
        }
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $data = curl_exec($ch);
        //list($header, $data) = explode("\n\n", $data, 2);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($http_code == 301 || $http_code == 302)
        {
            $matches = array();
            //preg_match('/Location:(.*?)\n/', $header, $matches);
			preg_match('/Location:(.*?)\n/', $data, $matches);
            $url = @parse_url(trim(array_pop($matches)));
            if (!$url)
            {
                //couldn't process the url to redirect to
                $curl_loops = 0;
                return $data;
            }
            $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
            if (!$url['scheme'])
                $url['scheme'] = $last_url['scheme'];
            if (!$url['host'])
                $url['host'] = $last_url['host'];
            if (!$url['path'])
                $url['path'] = $last_url['path'];
            $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
            curl_setopt($ch, CURLOPT_URL, $new_url);
            debug('Redirecting to', $new_url);
            return curl_redir_exec($ch);
        } else {
            $curl_loops=0;
            return $data;
        }
    }

вызывай вместе curl_exec()
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху