Php 什么情况需要使用eval(),因为没有其他选择?

Php 什么情况需要使用eval(),因为没有其他选择?,php,performance,eval,Php,Performance,Eval,我知道出于速度和安全考虑,JavaScript中应该避免使用eval。但是在PHP的例子中,很少提到安全性。更常见的情况是,由于随意使用eval,您的程序运行速度比应该的慢 在什么特定情况下,您应该使用eval,因为没有其他方法可以绕过它 为清楚起见: 我们不是在讨论用户提供的数据。因此,问题集中在纯的、完全受控的服务器端eval的有效使用上 我知道应该避免使用eval javascript的速度和安全性 原因。但是在php的例子中, 很少有人提到安全问题。 更多的时候是你的程序在运行 速度比应

我知道出于速度和安全考虑,JavaScript中应该避免使用eval。但是在PHP的例子中,很少提到安全性。更常见的情况是,由于随意使用eval,您的程序运行速度比应该的慢

在什么特定情况下,您应该使用eval,因为没有其他方法可以绕过它

为清楚起见:

我们不是在讨论用户提供的数据。因此,问题集中在纯的、完全受控的服务器端eval的有效使用上

我知道应该避免使用eval javascript的速度和安全性 原因。但是在php的例子中, 很少有人提到安全问题。 更多的时候是你的程序在运行 速度比应该的慢,因为 随意使用eval

eval也是用php编写的

在什么具体情况下你应该 使用eval,因为没有其他方法 绕道而行

首先,我们尽量避免使用它,但是如果您必须使用它来执行某些代码,那么您将不得不使用它,但正如所说的,它是邪恶的,您使用它的风险由您自己承担

底线:

无论如何,绝不允许使用eval运行用户输入。除非您知道自己在做什么/冒什么风险,否则在PHP中使用eval评估代码的安全问题与在Javascript中相同:如果您评估一些代码,您必须确定它来自何处以及包含什么

安全性的影响可能更大,因为PHP可以访问您的数据库,这意味着它可以用来窃取/破坏您的应用程序所依赖的几乎所有信息

在Javascript中,他们说eval是邪恶的;PHP中的情况可能与Javascript中的情况一样

现在,关于您无法避免使用eval的特定情况。。。嗯,在我的日常工作中,用PHP开发了大约4年,我不记得在我自己的代码中使用过eval^^


不过,举例来说,当您在数据库中存储一些代码,而不是将其缓存在可能包含的文件中时,您需要eval,这发生在一些允许在管理部分键入部分PHP代码的CMS中,例如。

我完全同意前面的答案,即eval是邪恶的,我从不在我的代码中使用它

但有一种情况下,我没能避免eval。我在php方面没有太多经验,所以如果有人建议我如何在没有“eval”的情况下重写代码,我会很高兴。在这种情况下,我将一个类名存储在一个变量中,我必须对该类调用一个静态方法,类名来自一个可信的源。所以我不得不写这样的东西:

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

因为您不能只写$className::methodName

如果希望使用PHP5.3之前的匿名函数,则需要使用,它封装了eval调用。

eval and create_函数可能允许任意代码注入。PHP中有很多东西可以用来危害应用程序的安全性

我们告诉孩子们不要玩刀子和火柴——但如果这些工具不是正确使用的必要工具,它们也是有用的。因此,它具有很多PHP功能。只要您确切地了解自己在做什么,使用该功能本质上没有什么问题

但是,在这样一个抽象层次上讨论编程语言并不是StackOverflow的目的


C.

OP没有说这是用户提供的数据,这篇文章的论点非常简短。他问是否存在使用它的有效情况。显然,在用户提供的ata上使用eval是无效的,但这并不能真正回答问题。@Crowder:他说我知道出于速度和安全原因,javascript中应该避免使用eval。但是在php的例子中,很少提到安全性。假设在php中没有提到它是邪恶的:我还讨论了情境/用法部分。谢谢你完全同意。与js eval相比,我会更小心地使用PHP eval,我想不起我需要它的任何实例。+1我会说,由于磁盘、数据库和任意网络访问,PHP中的PHP肯定比JavaScript中的更糟糕。请调用_user_funcarray$className,'methodName'或调用_user_func$className::methodName,根据您的PHP.call_user_func数组$className,$methodName;应该有用。编辑:konforce比我先进入:安全性也有同样的问题,但性能更好。。。不知道为什么我没想到用这个