В чем разница между WPINC и ABSPATH?

31 июл. 2013 г., 06:43:07
Просмотры: 36.1K
Голосов: 47

Для разработчиков плагинов обычной практикой является защита своих плагинов от прямого доступа. Я видел два способа сделать это:

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

и

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

В чем разница между WPINC и ABSPATH? Какой из способов является 'правильным'?

0
Все ответы на вопрос 4
1
28

Они определяются следующим образом:

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

dirname — это функция PHP, которая возвращает путь родительской директории, а wp-includes говорит само за себя.

Я бы сказал, что ABSPATH лучше, потому что это одна из первых вещей, которые загружает WordPress, и выглядит она симпатичнее:) Но на самом деле нет какого-то одного "правильного способа", потому что оба варианта работают.

31 июл. 2013 г. 07:40:35
Комментарии

Нет единственно правильного способа, и я всегда использую if ( ! defined( 'ABSPATH' ) ) exit;... но, возможно, стоит учитывать, что цель этого сниппета - убедиться, что WordPress загружен, 'WPINC' лучше, потому что это более wordpressово, начиная с 'WP'.

gmazzap gmazzap
31 июл. 2013 г. 07:53:07
0
10

if ( ! defined( 'WPINC' ) ) die; и if ( ! defined( 'ABSPATH' ) ) exit; добавляют дополнительный уровень безопасности, предотвращая прямой доступ к файлу вашего плагина. ABSPATH — это PHP-константа, определённая в ядре WordPress.

Если к файлу вашего плагина обращаются извне WordPress, константы ABSPATH или WPINC не будут определены, что приведёт к завершению выполнения кода плагина и предотвратит несанкционированный доступ к вашему коду.

ABSPATH и WPINC определены в ядре WordPress следующим образом:

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

Оба варианта служат одной и той же цели.

4 авг. 2015 г. 09:58:28
0

В чем разница между WPINC и ABSPATH?

Вы можете проверить это самостоятельно. Просто взгляните на wp-load.php в зеркале WordPress на GitHub.

Даже беглый взгляд покажет, что текущий выбранный ответ больше не корректен в том, как определяется ABSPATH. И если вы сравните разные теги на GitHub, то увидите, что определение ABSPATH фактически меняется со временем.

Какой способ является 'правильным'?

Учитывая, что эти константы используются для безопасности, я бы выбрал ABSPATH. Обоснование в том, что ABSPATH не только определяется первым в загрузчике WordPress, но и WPINC определяется под условием в том же файле и, как следствие, более вероятно может столкнуться с регрессией в будущем.

Также, хотя это и не было явно спрошено, вы привели примеры с использованием и die, и exit. Согласно devdocs.io, который опирается на официальную документацию API, die эквивалентен exit, так что вы можете выбрать любой из двух вариантов, и это не будет иметь значения.

И die, и exit принимают аргументы, поэтому вы можете использовать их для вывода полезной информации, например, зашифрованной версии тега или контактных данных, при аварийном завершении, или передать код завершения, такой как 0 или -1, для дальнейшей обработки.

Также стоит отметить, что существует и wp_die. Не путайте с встроенными функциями PHP, но он дополняет их для вывода HTML в дополнение к обычному тексту и активно используется в ядре WordPress в настоящее время. Узнайте больше о wp_die на WordPress.org.

10 июн. 2017 г. 16:01:12
2

Также стоит отметить, что нет разницы между die и exit.

Смотрите: https://stackoverflow.com/questions/1795025/what-are-the-differences-in-die-and-exit-in-php

25 мар. 2024 г. 12:20:49
Комментарии

В текущем виде ваш ответ непонятен. Пожалуйста, [отредактируйте] его, чтобы добавить дополнительные детали, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы, в [справочном центре].

User User
26 мар. 2024 г. 04:07:43

Это не является ответом на вопрос. Когда у вас будет достаточно репутации, вы сможете комментировать любые сообщения; вместо этого предоставляйте ответы, не требующие уточнений от автора вопроса. - Из обзора

cjbj cjbj
26 мар. 2024 г. 11:59:26