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?
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.
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.
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.