Sự khác biệt giữa WPINC và ABSPATH là gì?


34

Các nhà phát triển plugin thường bảo vệ các plugin của họ khỏi sự truy cập trực tiếp. Tôi thấy hai cách để làm điều đó:

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

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

Sự khác biệt giữa WPINC và ABSPATH là gì? Cái nào là cách 'đúng' để làm điều đó?

Câu trả lời:


19

Chúng được định nghĩa như sau:

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

dirnamelà một hàm PHP trả về đường dẫn của thư mục mẹ và wp-includeskhá tự giải thích.

Tôi sẽ nói ABSPATHlà tốt hơn bởi vì đó là một trong những điều đầu tiên WP tải và nó cũng có vẻ tốt hơn :) Nhưng không có "cách đúng" thực sự bởi vì cả hai đều hoạt động.


4
Không có cách nào thực sự đúng và tôi luôn sử dụng if ( ! defined( 'ABSPATH' ) ) exit;... nhưng, có lẽ, hãy xem xét rằng phạm vi của đoạn trích này đảm bảo rằng wordpress được tải 'WPINC' tốt hơn vì có nhiều wordpressfull nhìn chằm chằm vào 'WP'.
gmazzap

4

if ( ! defined( 'WPINC' ) ) die;if ( ! defined( 'ABSPATH' ) ) exit;thêm một lớp bảo mật bổ sung bằng cách ngăn chặn mọi truy cập trực tiếp vào tệp plugin của bạn. ABSPATHlà một hằng số PHP được xác định bởi WordPress trong lõi của nó.

Nếu tệp plugin của bạn được truy cập từ bên ngoài WordPress, hằng số ABSPATHhoặc WPINCsẽ không được xác định, do đó, nó sẽ thoát khỏi mã plugin, ngăn chặn mọi truy cập trái phép vào mã của bạn.

ABSPATHWPINCđược định nghĩa trong lõi WordPress là:

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

Cả hai đều được sử dụng cho cùng một mục đích.


1

Sự khác biệt giữa WPINC và ABSPATH là gì?

Bạn có thể tự kiểm tra. Chỉ cần nhìnwp-load.php vào gương WordPress trên GitHub.

Ngay cả một cái nhìn nhanh sẽ cho thấy câu trả lời hiện được chọn không còn đúng như cách ABSPATHxác định. Và nếu bạn so sánh các thẻ khác nhau trên GitHub, bạn sẽ thấy ABSPATHđịnh nghĩa thực sự thay đổi theo thời gian.

Cái nào là cách 'đúng' để làm điều đó?

Vì những thứ này được sử dụng để bảo mật, tôi sẽ đi ABSPATH. Cơ sở lý luận ABSPATHkhông chỉ được xác định đầu tiên trong WP bootstrapper, WPINCđược định nghĩa theo một điều kiện trong cùng một tệp và do đó, có nhiều khả năng gặp phải hồi quy trong tương lai.

Ngoài ra, trong khi không được hỏi rõ ràng, bạn đã cung cấp các ví dụ sử dụng cả hai dieexit. Theo đó devdocs.io, dựa trên tài liệu API chính thức, dietương đương với exit, vì vậy bạn có thể chọn một trong hai và nó sẽ không tạo ra sự khác biệt.

Cả hai dieexitchấp nhận lập luận, vì vậy bạn có thể xem xét sử dụng chúng để tạo ra một số thông tin hữu ích, chẳng hạn như một phiên bản thẻ hoặc liên hệ thông tin được mã hóa, khi Abend, hoặc vượt qua một mã thoát như 0hoặc -1để chế biến tiếp.

Cũng đáng chú ý là đó wp_dielà một điều quá. Không bị nhầm lẫn với các phần mềm dựng sẵn PHP, nhưng khen ngợi chúng đã được sử dụng trong việc xuất ra HTML ngoài văn bản thuần túy và được sử dụng tự do trong toàn bộ lõi WordPress hiện tại. Tìm hiểu thêm vềwp_die WordPress.org.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.