Неожиданный $end в коде eval()’d

#php #eval #syntax-error

#php #eval #синтаксическая ошибка

Вопрос:

Мне неприятно задавать такой конкретный вопрос, но я получаю ошибку, которую не могу понять. Это в задании cron, которое выполняется в течение часа. Я создаю массив задач, каждая из которых имеет проверку даты, которая должна быть eval()’d.

 $todo = array();
$todo[] = array( "date('z')%3 == 0", "Task 1" );
$todo[] = array( "date('N') == 1", "Task 2" );
foreach( $todo as $task )
{
    if( eval($task[0]) ) {
        echo $task[1];
    }
}
  

По какой-то причине строка eval () выдает мне эту ошибку. Обратите внимание, что я получаю эту ошибку для обеих задач.

 Parse error: syntax error, unexpected $end in /file.php(21) : eval()'d code on line 1
  

Есть предложения? Я пытался выполнить поиск по этому, но ничего не смог найти. Спасибо.

Комментарии:

1. Вам где-то не хватает фигурной скобки. Это не может быть весь скрипт.

2. Я не вижу никаких отсутствующих фигурных скобок. Скрипт работает, за исключением части eval().

3. Если у вас PHP > = 5.3, вам следует использовать анонимные функции вместо кода eval’d для вашего собственного здравомыслия.

Ответ №1:

eval принимает только инструкции, а не выражения. Вам нужно преобразовать ваши тесты с:

 if (eval("return $task[0];")) {
  

Комментарии:

1. Идеально! Сработало как по волшебству! После 20 лет программирования на PHP мне впервые понадобилось использовать eval ()

Ответ №2:

Вы пропускаете ‘;’ в конце вычисления строки. Функция Eval, способная обрабатывать инструкции или выражения.

Пример:

 $value = 7;
eval("$value =2;");
echo $value;