【问题标题】:Locating WordPress plugin source code used by this code定位此代码使用的 WordPress 插件源代码
【发布时间】:2012-07-04 11:14:58
【问题描述】:

我正在尝试为s2Member写一个钩子:

以下代码有问题:

eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
do_action ("ws_plugin__s2member_after_paypal_notify", get_defined_vars ());
unset ($__refs, $__v); /* Unset defined __refs, __v. */
  1. eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); 做什么,尤其是&$$__v

  2. 我找不到ws_plugin__s2member_after_paypal_notify 的源代码。这应该是一堂课吗?如何找到这个类的源代码?

【问题讨论】:

    标签: php filter wordpress hook


    【解决方案1】:
    1. eval 接受一个字符串,然后像运行 PHP 代码一样运行它。在这种特殊情况下,代码接受一个字符串并对其进行操作,试图插入一些变量名或变量地址。 Eval 是一种非常非常糟糕的做法,也是一种反模式。如果可以 - 不要使用这个插件,因为它可能充满了安全漏洞。

    2. ws_plugin__s2member_after_paypal_notify 是一个钩子。 WordPress 钩子很棒——它就像 JavaScript 中的一个事件。例如,如果您单击页面中的某些内容,JavaScript 会触发 onclick 事件,并且任何人都可以附加到该事件并运行一些代码。 WordPress 钩子的工作方式相同。现在,当您运行 do_action ("ws_plugin__s2member_after_paypal_notify", get_defined_vars ()); 时,您已安装的任何第三方插件都可以附加到它并执行操作。

    如果您想查找在此操作上运行的代码位,请在 wp-content中查找 add_action('ws_plugin__s2member_after_paypal_notify' ...)(这是您附加到挂钩的方式),或者只是在您的 wp-content 中查找 ws_plugin__s2member_after_paypal_notify > 目录(任何插件和/或主题都可以附加到这个钩子上)。

    【讨论】:

    • @valentinas 非常感谢!你的意思是ws_plugin__s2member_after_paypal_notify 不是函数或类,所以没有它的源代码。它就像书签或地标,保存以备后用。我对吗?我从作者那里找到了一些东西:s2member.com/forums/topic/payment-notification-hook
    • 是的,你是对的。这就像说“嘿,如果有人想用 'ws_plugin__s2member_after_paypal_notify' 做任何事情 - 现在就做”
    • @valentinas 即使eval 行很危险,我仍然想知道&$$__v 是什么意思。我从未见过$$& 是否意味着“获取地址”?
    • $$ 表示变量变量。它们不经常使用,因为它们往往会令人困惑(php.net/manual/en/language.variables.variable.php)。 & 表示引用,从技术上讲,它不是 PHP 中的地址。
    猜你喜欢
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多