[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: curl + session_start в ob_start
pushkin42
Добрый вечер всем!

Помогите, пожалуйста, разобраться, что мне делать с блокировкой sess файла в такой ситуации:

	function curl_execute($url, $data=false, $fail=true, $follow=true, $return=true, $timeout=3, $method=CURLOPT_POST) {
global $URI, $sessid, $_SESSIONVARS;
$sessid=session_id();
//error_reporting(E_ALL);
session_start();
$ch = curl_init();
$url=str_replace('@URL', $URI, $url);
curl_setopt($ch, CURLOPT_URL,$url);
if ($fail) curl_setopt($ch, CURLOPT_FAILONERROR, 1);
if ($follow) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
if ($return) curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
if ($timeout) curl_setopt($ch, CURLOPT_TIMEOUT, (int)$timeout);
if ($method==CURLOPT_POST) {
curl_setopt($ch, CURLOPT_POST, 1);
} else {
curl_setopt($ch, CURLOPT_GET, 1);
};
//$data=$data.'&'.session_name().'='.session_id();
//$data=$data.'&PHPSESSID='.session_id();

$data=$data."&sess=".substr($sessid,0,32);
$data=$data."&sv=".implode('#', $_SESSIONVARS);
//$data=$data."&SESSION=$_SESSION[userid]";
if ($data) curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
return $result;
};



Если попробовать передавать строчку

		//$data=$data.'&'.session_name().'='.session_id();


то вывод в браузер зависает и потом отваливается по CURL_TIMEOUT
Я так подозреваю, что это из-за того, что я одновременно с основным потоком пытаюсь читать из сессии. Мне нужно читать из сессии в данной функции:

	function tidy_page($buffer) {
error_reporting(E_ALL);
$config = array('indent' => TRUE,
'output-xhtml' => TRUE,
'wrap' => 200,
'uppercase-tags' => TRUE,
'clean' => TRUE,
'bare' => TRUE,
'quiet' => TRUE,
'language' => 'ru');

$tidy = tidy_parse_string($buffer, $config, 'utf8');
tidy_clean_repair($tidy);
return tidy_get_output($tidy);
};
function enc_page($buffer) {
$buffer=str_replace('<!--#UTF8EncodedFile!-->', '', $buffer);
$buffer=str_replace('<meta content="text/html; charset=utf-8" http-equiv="Content-Type">', '', $buffer);
$buffer=str_replace('<meta content="ru" http-equiv="Content-Language">', '', $buffer);
$buffer=parse_blocks($buffer);
$buffer=tidy_page($buffer);
return $buffer;
};

function parse_blocks($buffer) {
// <!--@BLOCK blockname --> parser
global $INCROOT, $URI;
error_reporting(E_ALL);
$pattern=array(
'/<!--@BLOCK /',
'/ @-->/',
);

$replace=array(
'include("$INCROOT/blocks/',
'.html")',
);

$blocks=preg_replace($pattern, $replace, $buffer);
$blocks=preg_grep('/\$INCROOT/', preg_split('/(include\(\")|(\"\))/', $blocks ));
foreach ($blocks as $block) {
$bblock=preg_replace('/(\$INCROOT)|(\/blocks\/)|(\.html)/', '', $block);
$block=str_replace('$INCROOT', $INCROOT, $block);
$a=curl_execute("$URI/scripts/getblock.php", "block=$block");
if (($a) && file_exists($block)) {
$buffer=str_replace("<!--@BLOCK $bblock @-->", $a, $buffer);
} else {
$buffer=str_replace("<!--@BLOCK $bblock @-->", '', $buffer);
};
};

$vars=preg_match_all('/\@VAR\s[a-zA-Z0-9_]{1,10}(\w|)/', $buffer, $allvars);
foreach ($allvars[0] as $var) {
$var=preg_split('/\ /', $var);
$var=$var[1];
eval("global $$var;");
$a=curl_execute("$URI/scripts/getblock.php", "var=".$$var);
if ($a) {
$buffer=str_replace("@VAR $var", "$a", $buffer);
} else {
$buffer=str_replace("@VAR $var", "[var]", $buffer);
};
};
return $buffer;


};


Функция tidy вычищает код до состояния "правильного".
Функция parse_blocks заменяет текстовые переменные их значениями.
Функция enc_page - backend обработчик для ob_start()

При всем при этом, если я передаю в cURL простой текст, все проходит нормально и переменная отдается. Если же пытаюсь передать session_id - вывод виснет.

Заранее спасибо всем.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.