Quais são as diferenças entre WPINC e ABSPATH?

34

É comum os desenvolvedores de plugins protegerem seus plugins do acesso direto. Vi duas maneiras de fazer isso:

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

e

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

Quais são as diferenças entre WPINC e ABSPATH? Qual é a maneira 'certa' de fazê-lo?

Daniel
fonte

Respostas:

19

Eles estão definidos da seguinte forma:

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

dirnameé uma função PHP que retorna o caminho do diretório pai e wp-includesé bastante autoexplicativa.

Eu diria que ABSPATHé melhor porque é uma das primeiras coisas que o WP carrega e também parece melhor :) Mas não existe um "caminho certo" real, porque ambos funcionam.

Wyck
fonte
4
Não existe um caminho realmente certo, e eu sempre uso if ( ! defined( 'ABSPATH' ) ) exit;... mas, talvez, considere que o escopo deste snippet é garantir que o wordpress seja carregado 'WPINC' é melhor porque é mais cheio de wordpress com o 'WP'.
gmazzap
4

if ( ! defined( 'WPINC' ) ) die;e if ( ! defined( 'ABSPATH' ) ) exit;adicione uma camada extra de segurança, impedindo qualquer acesso direto ao seu arquivo de plug-in. ABSPATHé uma constante PHP definida pelo WordPress em seu núcleo.

Se o seu arquivo de plug-in for acessado de fora do WordPress, a constante ABSPATHou WPINCnão será definida; portanto, ele sai do código do plug-in, impedindo qualquer acesso não autorizado ao seu código.

ABSPATHe WPINCsão definidos no núcleo do WordPress como:

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

Ambos são usados ​​para o mesmo propósito.

PM Aagjal
fonte
1

Quais são as diferenças entre WPINC e ABSPATH?

Você pode verificar a si mesmo. Basta olhar nowp-load.php espelho do WordPress no GitHub.

Mesmo uma rápida olhada mostrará que a resposta atualmente selecionada não está mais correta quanto à ABSPATHdefinição. E se você comparar diferentes tags no GitHub, verá que a ABSPATHdefinição realmente muda com o tempo.

Qual é a maneira 'certa' de fazê-lo?

Dado que estes são usados ​​para segurança, eu aceitaria ABSPATH. A razão de ser que ABSPATHnão é apenas definida primeiro no bootstrapper do WP, WPINCé definida sob uma condicional no mesmo arquivo e, como resultado, é mais provável que ocorra uma regressão futura.

Além disso, embora não seja solicitado explicitamente, você forneceu exemplos usando ambos diee exit. De acordo com devdocs.io, que se baseia na documentação oficial da API, dieé equivalente a exit, então você pode escolher um dos dois e não fará diferença.

Ambos diee exitaceitar argumentos, então você poderia considerar usá-los para a saída de algumas informações úteis, como uma versão tag ou contato informações criptografadas, ao abend, ou passar um código de saída, como 0ou -1para processamento posterior.

Também digno de nota é que wp_dieisso também é uma coisa. Não deve ser confundido com os built-ins do PHP, mas complementa-os pelo uso de saída de HTML, além de texto sem formatação e é usado liberalmente em todo o núcleo do WordPress atualmente. Saiba mais sobrewp_die no WordPress.org.

Josh Habdas
fonte