WPINC和ABSPATH有什么区别?


34

插件开发人员通常会保护自己的插件免受直接访问。我看到了两种方法:

if ( ! defined( 'WPINC' ) ) die;

if ( ! defined( 'ABSPATH' ) ) exit;

WPINC和ABSPATH有什么区别?哪一种是“正确”的方法?

Answers:


19

它们的定义如下:

define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );

dirname是一个PHP函数,它返回父目录的路径,并且 wp-includes很容易解释。

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


4
没有真正正确的方法,我一直使用if ( ! defined( 'ABSPATH' ) ) exit;...,但是,也许,请考虑一下此代码段的范围是确保将wordpress加载为“ WPINC”更好,因为它更倾向于wordpressfull并带有“ WP”。
gmazzap

4

if ( ! defined( 'WPINC' ) ) die;if ( ! defined( 'ABSPATH' ) ) exit;防止直接访问您的插件文件,从而增加了一层安全保护。ABSPATH是WordPress定义的PHP常量。

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

ABSPATHWPINC在WordPress核心中定义为:

define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );

两者均用于相同目的。


1

WPINC和ABSPATH有什么区别?

您可以检查一下自己。只需查看wp-load.php GitHub上的WordPress镜像即可。

即使快速浏览一下,也会显示当前选择的答案ABSPATH在定义方式上不再正确。而且,如果您在GitHub上比较不同的标签,您会看到ABSPATH定义实际上随时间而变化。

哪一种是“正确”的方法?

鉴于这些用于安全性,我会去ABSPATHABSPATH不仅在WP引导程序中首先定义的基本原理,而且是WPINC在同一文件中的条件下定义的,因此,更有可能经历将来的回归。

另外,虽然没有明确要求,但您同时使用die和提供了示例exit。根据devdocs.io,使用了官方API文档die的等效于exit,因此您可以选择两者中的任何一个都不会造成任何影响。

双方dieexit接受参数,所以你可以如加密版本标签或联系信息,可以考虑使用他们输出一些有用的信息,在异常终止,或传递一个退出代码,如0-1作进一步处理。

同样值得注意的是,这wp_die也是一件事情。不要与PHP内置组件混淆,而是称赞它们可用于输出HTML和纯文本,并且目前在整个WordPress核心中广泛使用。在WordPress.org上了解更多信息wp_die

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.