Apa perbedaan antara WPINC dan ABSPATH?

34

Sudah umum bagi pengembang plugin untuk melindungi plugin mereka dari akses langsung. Saya melihat dua cara untuk melakukan itu:

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

dan

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

Apa perbedaan antara WPINC dan ABSPATH? Yang mana cara yang 'benar' untuk melakukannya?

Daniel
sumber

Jawaban:

19

Mereka didefinisikan sebagai berikut:

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

dirnameadalah fungsi PHP yang mengembalikan jalur direktori induk, dan wp-includescukup jelas.

Saya akan mengatakan ABSPATHlebih baik karena ini adalah salah satu hal pertama yang dimuat WP dan juga terlihat lebih baik :) Tetapi tidak ada "cara yang benar" yang nyata karena keduanya bekerja.

Wyck
sumber
4
Tidak ada cara yang benar benar, dan saya selalu menggunakan if ( ! defined( 'ABSPATH' ) ) exit;... tapi, mungkin, pertimbangkan bahwa ruang lingkup cuplikan ini memastikan bahwa wordpress dimuat 'WPINC' lebih baik karena lebih banyak wordpressfull menatap dengan 'WP'.
gmazzap
4

if ( ! defined( 'WPINC' ) ) die;dan if ( ! defined( 'ABSPATH' ) ) exit;menambahkan lapisan keamanan tambahan dengan mencegah akses langsung ke file plugin Anda. ABSPATHadalah konstanta PHP yang didefinisikan oleh WordPress pada intinya.

Jika file plugin Anda diakses dari luar WordPress, konstanta ABSPATHatau WPINCtidak akan ditentukan, sehingga keluar dari kode plugin, mencegah akses yang tidak sah ke kode Anda.

ABSPATHdan WPINCdidefinisikan dalam inti WordPress sebagai:

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

Keduanya digunakan untuk tujuan yang sama.

PM Aagjal
sumber
1

Apa perbedaan antara WPINC dan ABSPATH?

Anda bisa mengecek diri sendiri. Lihat saja diwp-load.php cermin WordPress di GitHub.

Bahkan sekilas akan menunjukkan jawaban yang dipilih saat ini tidak lagi benar tentang bagaimana ABSPATHdidefinisikan. Dan jika Anda membandingkan berbagai tag di GitHub, Anda akan melihat ABSPATHdefinisi tersebut sebenarnya berubah seiring waktu.

Yang mana cara yang 'benar' untuk melakukannya?

Mengingat ini digunakan untuk keamanan, saya akan pergi untuk ABSPATH. Dasar pemikiran yang ABSPATHtidak hanya didefinisikan pertama kali di WP bootstrapper, WPINCdidefinisikan di bawah persyaratan dalam file yang sama dan, sebagai hasilnya, lebih mungkin untuk mengalami regresi di masa depan.

Selain itu, meskipun tidak secara eksplisit ditanyakan, Anda memberikan contoh menggunakan keduanya diedan exit. Menurut devdocs.io, yang mengacu pada dokumentasi API resmi, diesama dengan exit, sehingga Anda dapat memilih salah satu dari keduanya dan itu tidak akan membuat perbedaan.

Keduanya diedan exitmenerima argumen, sehingga Anda dapat mempertimbangkan untuk menggunakannya untuk menampilkan beberapa informasi yang bermanfaat, seperti tag versi terenkripsi atau informasi kontak, saat ditangguhkan, atau meneruskan kode keluar seperti 0atau -1untuk diproses lebih lanjut.

Yang juga perlu diperhatikan adalah wp_diehal itu juga. Tidak perlu bingung dengan built-in PHP, tetapi memuji mereka untuk digunakan dalam menghasilkan HTML selain teks biasa dan digunakan secara bebas di seluruh inti WordPress saat ini. Pelajari lebih lanjut tentangwp_die di WordPress.org.

Josh Habdas
sumber