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

Cra*_*aig 16 php wordpress

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

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

<?php 
    if ( ! defined( 'ABSPATH' ) ) {
        exit; // Exit if accessed directly
    }
?>
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 19

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

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

用法:

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

希望能帮助到你

  • @ devsam247感谢您的回答.我是否正确地认为我的问题中的条件逻辑实际上是在说:"如果直接在URL中访问此文件,请不要在浏览器中加载文件的其余内容.如果在WordPress环境中访问文件,请继续加载文件的内容 (5认同)

Thi*_*tos 7

ABSPATH为PHP恒定在由WordPress限定底部的wp-config.php:

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

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

正如您在上面的注释块中看到的那样,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');
Run Code Online (Sandbox Code Playgroud)

您的主题或插件文件:

<?php 
    if ( ! defined( 'MY_CONSTANT' ) ) {
        exit; // Exit if accessed directly
    }
Run Code Online (Sandbox Code Playgroud)

更多信息

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

PHP 魔法常量:http : //php.net/manual/en/language.constants.predefined.php

  • 这个答案非常危险。这不仅仅是“建议”不要在 wp-config 中修改 `ABSPATH` - 这不仅仅是因为“许多插件和主题”依赖它。这是因为它包含 WP 的绝对路径,WP 核心将其用于自己的文件包含!它不是“仅按照惯例”使用的。它是 WP 本身的一个关键常数。 (2认同)