是什么意思[if(!defined('ABSPATH'))]

时间:2017-04-04 16:06:00

标签: php wordpress

我目前正在从头开始构建一个WordPress主题,作为“在工作中学习”的一种方式。虽然我过去一直非常依赖PageBuilders,但我在后端工作方面经验丰富。我现在希望创建一个没有任何Pagebuilders的主题作为提高其加载速度等的手段。

目前,我目前正在寻找网站文件的安全性,并且遇到了以下术语:

<?php 
    if ( ! defined( 'ABSPATH' ) ) {
        exit; // Exit if accessed directly
    }
?>

我理解这会阻止直接访问Web文件。我不完全确定这是什么意思。例如,我仍然可以通过FTP,服务器和WordPress仪表板访问文件。是否有其他直接访问可以防止这种情况?也许阻止通过WordPress插件等访问?

考虑到这一点,我是否应该假设上面的代码应该作为标准放在主题中的每个文件上?会有例外吗?

对此有任何进一步的解释,将不胜感激。

2 个答案:

答案 0 :(得分:14)

它阻止公共用户通过URL直接访问.php文件。因为如果您的文件包含一些I / O操作,它最终会被(由攻击者)触发,这可能会导致意外行为。

因此,使用代码段可以阻止您的文件(直接)访问,并确保您的主题文件只能在WordPress环境中执行。

<强>用法:

  1. 它可以放在任何PHP文件(主题和插件)
  2. 的顶部
  3. 它可以放在wp-config.php
  4. 的顶部

    希望有所帮助

答案 1 :(得分:1)

ABSPATH是WordPress在wp-config.php底部处定义的PHP constant

/* That's all, stop editing! Happy blogging. */

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

正如您在上面的注释块中看到的那样, WordPress不建议修改这些代码行-可能是因为许多插件和主题都依赖ABSPATH来验证其PHP文件是否正在WordPress环境中执行。

如果您在wp-config.php文件的顶部使用此代码段,则将终止wp-config.php的执行,因为此时尚未定义ABSPATH。并且依赖wp-config.php的其他文件将失败(即,您将破坏您的网站)。

if ( ! defined( 'MY_CONSTANT' ) ) { exit; }是一个片段,广泛用于插件和主题的PHP文件,仅按惯例。从理论上讲,这意味着您可以在wp-config.php的底部添加自己的常量,您将获得相同的实际结果。

您的wp-config.php

if ( !defined('MY_CONSTANT') )
    define('MY_CONSTANT', 'fool');

您的主题或插件文件:

<?php 
    if ( ! defined( 'MY_CONSTANT' ) ) {
        exit; // Exit if accessed directly
    }

更多信息

在PHP中定义常量:http://php.net/manual/en/language.constants.syntax.php

PHP魔术常数:http://php.net/manual/en/language.constants.predefined.php