Was sind die Unterschiede zwischen WPINC und ABSPATH?

34

Es ist üblich, dass Plugin-Entwickler ihre Plugins vor direktem Zugriff schützen. Ich sah zwei Möglichkeiten, das zu tun:

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

und

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

Was sind die Unterschiede zwischen WPINC und ABSPATH? Welches ist der 'richtige' Weg, dies zu tun?

Daniel
quelle

Antworten:

19

Sie sind wie folgt definiert:

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

dirnameist eine PHP-Funktion, die den Pfad des übergeordneten Verzeichnisses zurückgibt und wp-includesselbsterklärend ist.

Ich würde sagen, es ABSPATHist besser, weil es eines der ersten Dinge ist, die WP lädt, und es sieht auch besser aus :) Aber es gibt keinen wirklichen "richtigen Weg", weil beide funktionieren.

Wyck
quelle
4
Es gibt keinen richtigen Weg, den ich immer benutze if ( ! defined( 'ABSPATH' ) ) exit;... aber vielleicht sollte man bedenken, dass der Umfang dieses Snippets sicherstellt, dass WordPress geladen ist. 'WPINC' ist besser, weil es mehr WordPress -fähig ist , mit 'WP' anzustarren .
gmazzap
4

if ( ! defined( 'WPINC' ) ) die;und if ( ! defined( 'ABSPATH' ) ) exit;fügen Sie eine zusätzliche Sicherheitsebene hinzu, indem Sie den direkten Zugriff auf Ihre Plug-in-Datei verhindern. ABSPATHist eine PHP-Konstante, die von WordPress in ihrem Kern definiert wird.

Wenn auf Ihre Plugin-Datei von außerhalb von WordPress zugegriffen wird, wird die Konstante ABSPATHoder WPINCnicht definiert, sodass der Plugin-Code beendet wird und ein unbefugter Zugriff auf Ihren Code verhindert wird.

ABSPATHund WPINCsind in WordPress Core definiert als:

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

Beide werden für den gleichen Zweck verwendet.

PM Aagjal
quelle
1

Was sind die Unterschiede zwischen WPINC und ABSPATH?

Sie können sich selbst überprüfen. Schauen Sie sichwp-load.php einfach den WordPress-Spiegel auf GitHub an.

Selbst ein kurzer Blick zeigt, dass die aktuell ausgewählte Antwort hinsichtlich der ABSPATHDefinition nicht mehr korrekt ist. Wenn Sie verschiedene Tags auf GitHub vergleichen, ABSPATHändert sich die Definition im Laufe der Zeit.

Welches ist der 'richtige' Weg, dies zu tun?

Da diese für die Sicherheit verwendet werden, würde ich gehen ABSPATH. Der Grund dafür ABSPATHist , dass er nicht nur zuerst im WP-Bootstrapper WPINCdefiniert wird, sondern unter einer Bedingung in derselben Datei definiert wird und daher mit größerer Wahrscheinlichkeit eine zukünftige Regression erfährt.

Auch wenn Sie nicht ausdrücklich dazu aufgefordert wurden, haben Sie Beispiele mit beiden dieund angegeben exit. Laut devdocs.io, das sich auf die offizielle API-Dokumentation diestützt , ist dies äquivalent zu exit, sodass Sie eine der beiden Optionen auswählen können und es keinen Unterschied macht.

Beide dieund exitakzeptieren Argumente, sodass Sie in Betracht ziehen können, sie zum Ausgeben einiger nützlicher Informationen zu verwenden, z. B. eines verschlüsselten Versions-Tags oder von Kontaktinformationen, oder einen Beendigungscode wie 0oder -1zur weiteren Verarbeitung zu übergeben.

Erwähnenswert ist auch, dass dies auch wp_dieeine Sache ist. Nicht zu verwechseln mit den integrierten PHP-Funktionen, sondern als Kompliment für die Ausgabe von HTML-Code zusätzlich zu einfachem Text und wird derzeit im gesamten WordPress-Kern großzügig verwendet. Erfahren Sie mehr überwp_die auf WordPress.org.

Josh Habdas
quelle