【问题标题】:Why check if stripslashes function exists?为什么要检查 stripslashes 函数是否存在?
【发布时间】:2016-02-05 08:55:12
【问题描述】:

我发现以下代码检查stripslashes() 函数是否存在。

if ( function_exists( 'stripslashes' ) ) {
    // Do something
} else {
    // Do something
}

stripslashes() 函数适用于 PHP4 和 PHP5,所以我想知道为什么它需要一个条件语句来检查函数是否存在。没看懂。

这不是一个主观问题。告诉我使用这个语句和不使用它有什么区别。提前致谢!

以下是有关它们在何处使用的相关链接:

【问题讨论】:

  • 好问题。 TBH,我不知道。也许是为了检查一些编码人员是否去创建了一个名为相同的自定义函数,或者有人破解了核心并删除了它?但是,if ( function_exists( 'mysql_real_escape_string' ) ) 也是如此。如果服务器不支持那些旧的和已弃用的mysql_ 函数,则需要条件语句。
  • 也许他们认为该功能有一天会被删除,因为它的主要用途被删除了?
  • @Gerard TBH(再次),我不知道。也许有一个他们疯狂的方法。我看不出使用它的原因(我认为该功能会保留一段时间)。就个人而言,function_exists() 只能用于可能已弃用的功能。 mysql_ 是其中之一,session_register() php.net/manual/en/function.session-register.php - 我敢肯定还有更多。 (哦,不客气)。
  • 我的猜测是他们试图检测魔术引号,但做错了。
  • @Gerard 我希望我们给你的(到目前为止,Alexander 和我)对你的问题有所帮助。

标签: php stripslashes


【解决方案1】:

PHP 中曾有一个名为magic quotes 的功能,虽然出于善意,但造成了无穷无尽的混乱。

这段代码很可能是用来检测魔术引号的,但这不是正确的方法,尤其是因为它不起作用。

检测魔术引号是否启用的正确方法是使用为目的而设计的函数,get_magic_quotes_gpc 就像这样。

if (get_magic_quotes_gpc()) {

或者以下,如果您担心这将被删除。

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {

话虽如此,整个魔术引号功能在 PHP 5.4 中已被删除,因此除非您需要支持过时的 PHP 版本,否则您可以忘记整个曾经存在过的东西(除非您使用的是 WordPress...) .

顺便说一句,我想stripslashes 函数将来可能会被删除,并且可能在某一时刻不存在,但在这种情况下,这可能不是原因。

【讨论】:

  • 亚历山大的好答案。
【解决方案2】:

旁注:抄录自我的一些 cmets(稍作修改),以提供对 Alexander 问题的补充回答。


这可能是为了检查是否某个编码人员创建了一个名为相同的自定义函数(一个让某人发疯的方法?),或者是否有人入侵了 PHP 核心并将其删除;我当然是在猜测,这并非不可能。

但是,if ( function_exists( 'mysql_real_escape_string' ) ) 也是如此。

如果服务器不支持那些旧的和已弃用的mysql_ functions,则需要条件语句,并且将证明对于使用这种性质的东西是有效/有用的。

参考:(mysql_ 从 PHP 7 中删除,以及其他弃用通知)

就个人而言,function_exists() 只能用于可能已弃用的功能; mysql_ 是其中之一,session_register() - 我敢肯定还有更多。

它在来自贡献注释http://php.net/manual/en/function.stripslashes.php 的手册中列出,根据 Alexander (O'Mara) 在 cmets 中所说,它似乎与 magic_quotes_gpc 有关。


注意:

我绝不希望从中获得任何好处,而是希望其他访问该问题的人。

【讨论】:

  • 很好的补充。我见过一些相当糟糕的 PHP 安装。有些人在所有错误的地方寻找安全。
  • @AlexanderO'Mara 谢谢亚历山大。让我想起了我曾经破解我的command.com 文件的日子。啊,DOS时代。 干杯
猜你喜欢
  • 2018-09-17
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
相关资源
最近更新 更多