WPINC和ABSPATH有什么不同?

时间:2013-07-31 作者:Daniel

插件开发人员通常会保护他们的插件不被直接访问。我看到了两种方法:

if ( ! defined( \'WPINC\' ) ) die;
以及

if ( ! defined( \'ABSPATH\' ) ) exit;
WPINC和ABSPATH之间有什么区别?哪种方法是“正确”的?

3 个回复
最合适的回答,由SO网友:Wyck 整理而成

其定义如下:

define( \'ABSPATH\', dirname(dirname(__FILE__)) . \'/\' );
define( \'WPINC\', \'wp-includes\' );
dirname 是一个PHP函数,返回父目录的路径,以及wp-includes 这是不言而喻的。

我会说ABSPATH 更好,因为这是WP加载的第一件事,看起来也更好:)但没有真正的“正确的方法”,因为它们都能工作。

SO网友:P M Aagjal

if ( ! defined( \'WPINC\' ) ) die;if ( ! defined( \'ABSPATH\' ) ) exit; 通过阻止对插件文件的任何直接访问,添加额外的安全层。ABSPATH 是由WordPress在其核心定义的PHP常量。

如果插件文件是从WordPress外部访问的,则常量ABSPATHWPINC 不会被定义,因此它退出插件代码,防止任何未经授权的访问您的代码。

ABSPATHWPINC 在WordPress core中定义为:

define( \'ABSPATH\', dirname(dirname(__FILE__)) . \'/\' );
define( \'WPINC\', \'wp-includes\' );
两者的用途相同。

SO网友:vhs

WPINC和ABSPATH之间有什么区别?

你可以自己检查一下。只是look at wp-load.php 在GitHub上的WordPress镜像上。

即使快速浏览一眼,也会发现当前选择的答案不再正确ABSPATH 已定义。如果比较GitHub上的不同标记,您将看到ABSPATH 定义实际上会随着时间的推移而变化。

哪种方法是“正确”的?

考虑到这些是用于安全的,我会ABSPATH. 理由是ABSPATH 不仅在WP引导程序中首先定义,WPINC 是在同一文件中的条件下定义的,因此更可能经历未来的回归。

此外,虽然没有明确询问,但您提供了使用这两种方法的示例dieexit. 根据devdocs.io, 利用API官方文档,die 相当于exit, 所以你可以选择两者中的任何一个,这不会有什么不同。

二者都dieexit 接受参数,以便您可以考虑在异常终止时使用它们输出一些有用的信息,例如加密的版本标记或联系信息,或者传递退出代码,例如0-1 用于进一步处理。

同样值得注意的是wp_die 也是一件事。不要与PHP内置代码混淆,但要赞扬它们除了用于输出纯文本外,还用于输出HTML,目前在WordPress核心中广泛使用。学more about wp_die 在WordPress上。组织。

结束