В чем разница между WPINC и ABSPATH?
Для разработчиков плагинов обычной практикой является защита своих плагинов от прямого доступа. Я видел два способа сделать это:
if ( ! defined( 'WPINC' ) ) die;
и
if ( ! defined( 'ABSPATH' ) ) exit;
В чем разница между WPINC и ABSPATH? Какой из способов является 'правильным'?
Они определяются следующим образом:
define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );
dirname — это функция PHP, которая возвращает путь родительской директории, а wp-includes говорит само за себя.
Я бы сказал, что ABSPATH лучше, потому что это одна из первых вещей, которые загружает WordPress, и выглядит она симпатичнее:) Но на самом деле нет какого-то одного "правильного способа", потому что оба варианта работают.
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' );
Оба варианта служат одной и той же цели.
В чем разница между 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.
Также стоит отметить, что нет разницы между die и exit.
Смотрите: https://stackoverflow.com/questions/1795025/what-are-the-differences-in-die-and-exit-in-php
В текущем виде ваш ответ непонятен. Пожалуйста, [отредактируйте] его, чтобы добавить дополнительные детали, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы, в [справочном центре].
User
Это не является ответом на вопрос. Когда у вас будет достаточно репутации, вы сможете комментировать любые сообщения; вместо этого предоставляйте ответы, не требующие уточнений от автора вопроса. - Из обзора
cjbj