2013-07-23 4 views
0

У меня есть код, который возвращается в мой скрипт в переменной. Мне нужно выполнить его как код PHP, но я нервничаю, чтобы использовать функцию eval. Вот код, который генерируется в заголовочном файле:Альтернатива PHP eval?

/include.php:

$preLoadFields .= '$2 = new KoolDatePicker("datepicker");          
        $2->id="field_2";        
        $2->scriptFolder = "/KoolPHP"; 

/main.php

eval($preLoadFields); 

Даже когда я пытаюсь запустить его с помощью eval, я получить эту ошибку:

синтаксическая ошибка: синтаксическая ошибка, неожиданный '2' (T_LNUMBER), ожидая переменной (T_VARIABLE) или '$'

Есть ли лучший/безопасный способ сделать это? Заранее спасибо!

+0

Откуда возникает сгенерированный код? –

+0

Сгенерированный код исходит из сценария внутри включенного файла. Этот код по существу генерирует поля, если они включены в базу данных (то есть, если поле1 включено, сгенерируйте соответствующий код). Просто так происходит с одним типом поля (управление календарем), мне нужно сгенерировать PHP-код перед HTML. – Jason

+1

Возможный дубликат [Что является альтернативой функции eval?] (Http://stackoverflow.com/questions/10671602/whats-alternative-of-eval-function) –

ответ

3

Просто не позволяйте include.php генерировать PHP код в переменной. Но прямо выполните его.

$2 = new KoolDatePicker("datepicker");          
$2->id="field_2";        
$2->scriptFolder = "/KoolPHP"; 

Если вы обеспокоены тем, что HTML генерируется и выводится на экран. Тогда не выводить его с помощью ob_startob_get_contentsob_end_clean:

ob_start(); 
$2 = new KoolDatePicker("datepicker");          
$2->id="field_2";        
$2->scriptFolder = "/KoolPHP"; 
$generated_html = ob_get_contents(); 
ob_end_clean(); 

Все кусок PHP попытается вывести на экран будет буферизации. Затем в вашем коде используйте переменную $generated_html для вывода ее там, где вы хотите.

(Вам все еще нужно исправить недопустимое имя переменной)

+0

Дух - не знаю, почему я об этом не думал. Это сработало отлично. Спасибо вам за помощь!! – Jason

3

$2 не является допустимым PHP имя переменной: http://www.php.net/manual/en/language.variables.basics.php

Оно должно начинаться с буквы алфавита. Подробное описание регулярных выражений в допустимом формате находится на связанной странице.

В более общей схеме вещей НЕ следует использовать eval(). Это очень опасная функция. Почему бы просто не использовать его как PHP-код и include()?

include.php:

<?php 
$var = new KoolDatePicker('datepicker'); 
$var->id="field_2" 
$var->scriptFolder = '/KoolPHP'; 

main.php:

<?php 
include('include.php'); 
+0

Благодарим за ответ! ОК - имеет смысл в имени переменной и ошибке, которую я получал с eval. PHP-код генерируется динамически среди других вещей, происходящих во включенном файле. Вот почему я пытаюсь передать переменную, содержащую код, на главную страницу ... – Jason

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