if ( ! defined( 'WPINC' ) ) die;
和
if ( ! defined( 'ABSPATH' ) ) exit;
WPINC和ABSPATH?哪种方法是正确的方法?
#1 楼
它们的定义如下:define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );
dirname
是一个PHP函数,它返回父目录的路径,而wp-includes
很容易解释。我会说
ABSPATH
更好,因为它是WP加载的第一件事,而且看起来也更好:)但是没有真正的“正确方法”,因为它们都可以工作。#2 楼
if ( ! defined( 'WPINC' ) ) die;
和if ( ! defined( 'ABSPATH' ) ) exit;
通过防止直接访问您的插件文件来增加安全性。 ABSPATH
是WordPress在其核心中定义的PHP常量。如果从WordPress外部访问您的插件文件,则常量
ABSPATH
或WPINC
不会被定义,因此它会退出插件代码,从而防止任何未经授权访问您的代码。ABSPATH
和WPINC
在WordPress核心中定义为:define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );
两者均用于相同目的。
#3 楼
WPINC和ABSPATH有什么区别?
您可以检查一下自己。只需在GitHub上的WordPress镜像上查看
wp-load.php
。即使快速浏览一下,也会显示当前选择的答案对于
ABSPATH
的定义不再正确。而且,如果您在GitHub上比较不同的标签,您会看到ABSPATH
定义实际上会随着时间而改变。哪个是正确的方法?
鉴于这些用于安全性,我会选择
ABSPATH
。理由是ABSPATH
不仅是在WP引导程序中首先定义的,而且WPINC
是在同一文件中的条件下定义的,因此,更有可能经历将来的回归。此外,虽然没有明确询问,您提供了同时使用
die
和exit
的示例。根据引用官方API文档的devdocs.io
的说法,die
等同于exit
,因此您可以选择两者中的任何一个都不会有所不同。die
和exit
都接受参数,因此您可以考虑使用它们在异常结束时输出一些有用的信息,例如加密的版本标签或联系信息,或者传递退出代码(例如0
或-1
)进行进一步处理。还值得注意的是
wp_die
也是如此。不要与PHP内置组件混淆,而是称赞它们可用于输出除纯文本之外的HTML,并且目前在整个WordPress核心中广泛使用。在WordPress.org上了解有关wp_die
的更多信息。
评论
没有真正正确的方法,我总是使用if(!defined('ABSPATH'))exit; ...但是,也许,考虑到此代码段的范围是确保加载wordpress,因此'WPINC'更好,因为更多的wordpressfull盯着“ WP”。
– gmazzap♦
13年7月31日在4:53