буферизация

pasha_v

Guest
буферизация

Господа нужна Ваша помощь!
Помогите со следующем кодом:

PHP:
class Functions
{

	var $string;

	function Functions($string){
		$this->string=$string;
	return true;
	}

function doEval (){
	ob_start();
	eval ($this->string);
	$this->string = ob_get_contents();
	ob_end_clean();
	return $this->string;
}
}

$s_out = '$title=\"rulez\"';
$output = new Functions($s_out);
$s_out = $output->doEval($s_out);
возможно-ли как-нибудь достучаться до переменной $title?
 

Gas

может по одной?
pasha_v
о господи, ты лучше скажи чего ты хочешь добиться, а не как.
 

valyala

Новичок
возможно-ли как-нибудь достучаться до переменной $title?
Try this:
PHP:
class Functions
{
    var $string;

    function Functions($string) {
        $this->string=$string;
        return true;
    }

    function doEval() {
        ob_start();
        eval ($this->string);
        $this->string = ob_get_contents();
        ob_end_clean();
        trigger_error('globals'); // call our "error handler". See below
        return $this->string;
    }
}

/**
    special "error handler", which moves variables from
    current symbol table into global one
*/
function err_handler($errno, $errstr, $errfile, $errline, $ctx)
{
    if ($errstr == 'globals') {
        foreach ($ctx as $key => $value) {
            if ($key == 'this') continue;
            $GLOBALS[$key] = $value;
        }
    }
}

set_error_handler('err_handler');


/****************************/
$s_out = '$title="rulez";';
$output = new Functions($s_out);
$s_out = $output->doEval();

var_dump($title);
Надеюсь, разберешься, как оно работает :)
 

Demiurg

Guest
pasha_v
ты не должен этого хотеть (с) чей-то
если внятно объяснишь задачу, то всем будет легче.
 

pasha_v

Guest
Есть динамический контент, который лежит в $s_out. Содержимое $s_out выполняется eval'ом:
PHP:
$s_out = $output->doEval();
но перед выполнением нужно проверить содержимое $title, которая находится с в $s_out.. :) мудрено, но думаю можно разобраться.. ;-)
так как достучаться до $title, заменить на другое значение и потом вывести все? ;-)
 

ecto

Новичок
передать ее по значению, по ссылке или,
вконце концов, как глобальныю переменную

но судя по всему сказанному тебе нужно выполнить код пришедший от пользователя - проверив его перед этим, тогда логично будет добавить в класс еще один метод, проверяющий строку
 

pasha_v

Guest
вообщем так, нужно сделать
PHP:
echo $title;
где $title
содержится в $s_out после выполнения в
PHP:
function doEval ($string){
ob_start();
eval ($string);
$string = ob_get_contents();
ob_end_clean();
return $string;
}
или лыжи не едут или.. ;-)
 
Сверху