web-dev-qa-db-fra.com

Quelles sont les différences entre WPINC et ABSPATH?

Il est courant que les développeurs de plugins protègent leurs plugins contre un accès direct. J'ai vu deux façons de le faire:

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

et

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

Quelles sont les différences entre WPINC et ABSPATH? Quelle est la "bonne" façon de le faire?

32
Daniel

Ils sont définis comme suit:

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

dirname est une fonction PHP qui renvoie le chemin du répertoire parent, et wp-includes est assez explicite.

Je dirais que ABSPATH est préférable, car c’est l’une des premières choses que WP charge et il a également l’air meilleur :) Mais il n’ya pas vraiment de "bonne manière" car ils fonctionnent tous les deux.

18
Wyck

if ( ! defined( 'WPINC' ) ) die; et if ( ! defined( 'ABSPATH' ) ) exit; ajoutent une couche de sécurité supplémentaire en empêchant tout accès direct à votre fichier de plug-in. ABSPATH est une constante PHP définie par WordPress dans son noyau.

Si vous accédez à votre fichier de plug-in en dehors de WordPress, la constante ABSPATH ou WPINC ne sera pas définie. Elle quitte donc le code du plug-in, empêchant ainsi tout accès non autorisé à votre code.

ABSPATH et WPINC sont définis dans le noyau de WordPress comme suit:

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

Les deux sont utilisés aux mêmes fins.

3
P M Aagjal

Quelles sont les différences entre WPINC et ABSPATH?

Vous pouvez vérifier vous-même. Juste regardez wp-load.php sur le miroir WordPress sur GitHub.

Même un coup d'œil rapide montrera que la réponse actuellement sélectionnée n'est plus correcte quant à la définition de ABSPATH. Et si vous comparez différentes balises sur GitHub, vous verrez que la définition de ABSPATH change réellement avec le temps.

Quelle est la "bonne" façon de le faire?

Étant donné que ceux-ci sont utilisés pour la sécurité, je choisirais ABSPATH. La raison étant que ABSPATH n'est pas seulement défini en premier dans le WP bootstrapper, WPINC est défini sous une condition dans le même fichier et, par conséquent, est plus susceptible de subir une régression future.

De plus, bien que cela ne soit pas explicitement demandé, vous avez fourni des exemples utilisant à la fois die et exit. Selon devdocs.io, qui s’appuie sur la documentation officielle de l’API, die est équivalent à exit , vous pouvez donc choisir l’un des deux et cela ne fera aucune différence.

die et exit acceptent les arguments, vous pouvez donc les utiliser pour générer des informations utiles, telles qu'une balise de version chiffrée ou des informations de contact, lors de la fin du processus, ou transmettre un code de sortie tel que 0 ou -1 pour un traitement ultérieur.

À noter également que wp_die est aussi une chose. Ne pas confondre avec les PHP intégrés, mais les complète pour son utilisation dans la sortie de HTML en plus du texte brut et est utilisé généreusement dans le cœur de WordPress. En savoir plus sur wp_die sur WordPress.org.

1
Josh Habdas