Каковы различия между WPINC и ABSPATH?

34

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

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

а также

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

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

Даниил
источник

Ответы:

19

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

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

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

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

Уик
источник
4
Там нет реального правильного пути, и я всегда использую if ( ! defined( 'ABSPATH' ) ) exit;... но, возможно, считает , что сфера применения этого кода является то, убедитесь , что WordPress загружен «WPINC» лучше , потому что больше wordpressfull смотрящую с «РГ».
gmazzap
4

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' );

Оба используются для одной цели.

PM Aagjal
источник
1

Каковы различия между WPINC и ABSPATH?

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

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

Какой «правильный» способ сделать это?

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

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

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

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

Джош Хабдас
источник