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

2022-08-30 12:43:22

我目前正在从头开始构建WordPress主题,作为“在工作中学习”的一种手段。我在后端工作方面有适度的经验,尽管我过去一直严重依赖PageBuilders。我现在希望创建一个没有任何页面构建器的主题,作为提高其加载速度等的手段。

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

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

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

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

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


答案 1

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

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

用法:

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

希望它有帮助


答案 2

ABSPATH是由 WordPress 在底部定义的 PHP 常量wp-config.php

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

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

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

如果在文件顶部使用此代码段,则将终止 的执行,因为此时尚未定义。而依赖于的其他文件将失败(即您将破坏您的网站)。wp-config.phpwp-config.phpABSPATHwp-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


推荐