Какие ситуации требуют использования eval (), потому что альтернатив нет?

Я знаю, что eval следует избегать в JavaScript по соображениям скорости и безопасности. Но в случае PHP редко упоминается безопасность. Чаще всего это ваша программа работает медленнее, чем она должна из-за случайного использования eval .

В каких конкретных ситуациях вы должны использовать eval потому что нет другого пути вокруг него?

Для ясности:

Мы не говорим о пользовательских данных. Поэтому вопрос сосредоточен на чистом и полностью контролируемом действительном использовании eval стороне сервера.

Solutions Collecting From Web of "Какие ситуации требуют использования eval (), потому что альтернатив нет?"

Проблемы безопасности eval -uating кода с eval в PHP такие же, как в Javascript: если вы оцениваете некоторый код, вы должны быть уверены, откуда он и что он содержит.

Последствия для безопасности могут быть даже более значительными, поскольку PHP имеет доступ к вашей базе данных (среди прочего), что означает, что она может использоваться для кражи / коррумпирования почти любой информации, на которую опирается ваша заявка!

В Javascript они говорят, что «eval is evil »; это, вероятно, так же верно в PHP, что это правда в Javascript.

Теперь о конкретных ситуациях, в которых вы не можете избежать использования eval … Ну, что-то вроде 4-летнего развития PHP как моей повседневной работы, я не помню, чтобы когда-либо использовал eval в своем собственном коде ^ ^

Тем не менее, и примером ситуации, в которой вам нужен eval было бы, например, когда вы храните некоторый код в базе данных, а не кешируете его в файлах (которые могут быть включены) – это происходит с некоторыми CMS, которые позволяют части кода PHP например, набирается в разделе администрирования.

Eval и create_function могут допускать инъекцию кодированного кода. На PHP есть много вещей, которые могут быть использованы для нарушения безопасности вашего приложения.

Мы говорим детям, чтобы они не играли с ножами и спичками – но это полезно (если не важно) при правильном использовании. Таким образом, это связано с множеством функциональных возможностей PHP. Нет ничего по-настоящему неправильного в использовании функциональных возможностей, пока вы точно понимаете, что вы делаете .

Но обсуждение языков программирования на таком абстрактном уровне – это не то, о чем говорит StackOverflow.

C.

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

evalзло в php тоже.

в каких конкретных ситуациях вы должны использовать eval (), потому что нет другого пути вокруг него?

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

Нижняя линия:

Никогда не позволяйте во всяком случае вводить пользовательский ввод с eval . (Если вы не знаете, что вы делаете / рискуете)

Я полностью согласен с предыдущими ответами в том смысле, что eval – это зло, и я никогда не использую его в своем коде.

но в одной ситуации мне не удалось избежать eval. У меня мало опыта работы в php, поэтому я буду рад, если кто-нибудь сообщит мне, как я могу переписать код без «eval». в этой ситуации у меня было имя класса, хранящееся в переменной, и мне пришлось вызвать статический метод в этом классе, имя класса – из надежного источника. поэтому мне пришлось написать что-то вроде этого:

 eval("\$result = $className::methodName()"); 

(потому что вы не можете просто написать $ className :: methodName ());

Если вы хотите использовать анонимные функции до PHP 5.3, вам нужно использовать create_function , который обертывает вызов eval ().