У меня есть немного PHP-кода (для функции модуля моей CMS (не drupal), которая позволяет людям просматривать страницы, комментарии, сообщения на форуме, сообщения в блогах и т. Д.) ... :Ошибка PHP eval при присвоении значения переменной
if(isset($_GET["m"]))
{
//Does the module exist and activated, and has it a function called view?
if(isset($module_exists[$_GET["m"]]) && method_exists($_GET["m"], "view"))//Yep
{
//Load view (should be an array)
eval("$module_view = ".$_GET["m"]."::view();");
if(!is_array($module_view))//Not an array :(
{
error::e500module($_GET["m"], $_SERVER["REQUEST_URI"]);
}
}
else//Nope, so display error
{
error::e404($_SERVER['REQUEST_URI']);
}
}
Теперь, я получаю эту ошибку при разборе страницы:
Notice: Undefined variable: module_view in C:\wamp\www\SYSTEM\start.php on line 34
Parse error: parse error in C:\wamp\www\SYSTEM\start.php(34) : eval()'d code on line 1
Notice: Undefined variable: module_view in C:\wamp\www\SYSTEM\start.php on line 35
Но когда я делаю:
eval("print_r(".$_GET["m"]."::view());");
а не:
eval("$module_view = ".$_GET["m"]."::view();");
У меня нет никакой ошибки, а просто напечатан массив. Кто-нибудь знает, что я делаю неправильно? Я этого не понимаю. Пожалуйста, не говорите мне, что eval() небезопасен, я знаю.
Спасибо.
Thanx Я не знал, что я должен избежать. – 2009-07-24 18:09:11
Другой вариант - использовать одинарные кавычки. –
Но мне нравятся двойные кавычки ;-) – 2009-07-24 18:10:03