อะไรคือความแตกต่างระหว่าง WPINC และ ABSPATH?


34

เป็นเรื่องปกติสำหรับนักพัฒนาปลั๊กอินในการปกป้องปลั๊กอินจากการเข้าถึงโดยตรง ฉันเห็นสองวิธีในการทำเช่นนั้น:

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

และ

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

อะไรคือความแตกต่างระหว่าง WPINC และ ABSPATH? วิธีไหนที่ถูกต้องที่จะทำ

คำตอบ:


19

พวกเขาถูกกำหนดดังนี้:

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

dirnameเป็นฟังก์ชั่น PHP ที่คืนค่าพา ธ ของไดเรคทอรี่หลักและ wp-includesอธิบายได้ด้วยตนเอง

ฉันจะบอกว่าABSPATHดีกว่าเพราะมันเป็นหนึ่งในสิ่งแรกที่ WP โหลดและมันก็ดูดีขึ้น :) แต่ไม่มี "วิธีที่ถูกต้อง" จริงเพราะพวกเขาทั้งสองทำงาน


4
ไม่มีทางที่ถูกต้องและฉันมักจะใช้if ( ! defined( 'ABSPATH' ) ) exit;... แต่อาจพิจารณาว่าขอบเขตของตัวอย่างนี้ทำให้แน่ใจว่า wordpress ถูกโหลด 'WPINC' ดีกว่าเพราะwordpressfullกำลังจ้องมองด้วย 'WP' มากขึ้น
gmazzap

4

if ( ! defined( 'WPINC' ) ) die;และif ( ! defined( 'ABSPATH' ) ) exit;เพิ่มความปลอดภัยอีกชั้นโดยป้องกันการเข้าถึงไฟล์ปลั๊กอินของคุณโดยตรง ABSPATHเป็นค่าคงที่ PHP ที่กำหนดโดย WordPress ในแกนกลาง

หากไฟล์ปลั๊กอินของคุณเข้าถึงได้จากภายนอก WordPress ค่าคงที่ABSPATHหรือWPINCจะไม่ถูกกำหนดจึงจะออกจากรหัสปลั๊กอินป้องกันการเข้าถึงรหัสของคุณโดยไม่ได้รับอนุญาต

ABSPATHและWPINCถูกกำหนดใน WordPress core เป็น:

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

ทั้งสองใช้เพื่อจุดประสงค์เดียวกัน


1

อะไรคือความแตกต่างระหว่าง WPINC และ ABSPATH?

คุณสามารถตรวจสอบตัวเอง เพียงดูที่wp-load.phpกระจก WordPress บน GitHub

แม้แต่ภาพรวมอย่างรวดเร็วจะแสดงคำตอบที่เลือกในปัจจุบันไม่ถูกต้องตามวิธีการที่ABSPATHกำหนดไว้อีกต่อไป และถ้าคุณเปรียบเทียบแท็กที่แตกต่างกันใน GitHub คุณจะเห็นABSPATHคำจำกัดความเปลี่ยนแปลงตามเวลาจริง

วิธีไหนที่ถูกต้องที่จะทำ

ป.ร. ABSPATHให้ไว้เหล่านี้จะใช้สำหรับการรักษาความปลอดภัยที่ฉันต้องการไปสำหรับ เหตุผลที่ABSPATHไม่เพียง แต่ถูกกำหนดเป็นอันดับแรกใน WP bootstrapper WPINCจะถูกกำหนดภายใต้เงื่อนไขในไฟล์เดียวกันและมีแนวโน้มที่จะประสบกับการถดถอยในอนาคต

นอกจากนี้ในขณะที่ไม่ได้ถามอย่างชัดเจนคุณให้ตัวอย่างการใช้ทั้งสองและdie exitอ้างอิงจากdevdocs.ioเอกสาร API ที่เป็นทางการdieเทียบเท่ากับexitดังนั้นคุณสามารถเลือกหนึ่งในสองอย่างนี้และจะไม่สร้างความแตกต่าง

ทั้งสองdieและexitยอมรับข้อโต้แย้งดังนั้นคุณสามารถใช้มันเพื่อส่งออกข้อมูลที่เป็นประโยชน์บางอย่างเช่นแท็กเวอร์ชันเข้ารหัสหรือข้อมูลการติดต่อเมื่อหยุดทำงานแบบผิดปกติหรือส่งรหัสออกเช่น0หรือ-1เพื่อการประมวลผลเพิ่มเติม

นอกจากนี้ยังมีข้อสังเกตว่าwp_dieเป็นสิ่งที่เกินไป เพื่อไม่ให้สับสนกับ PHP ในตัว แต่ชมเชยพวกเขาเพื่อใช้ในการแสดงผล HTML นอกเหนือจากข้อความธรรมดาและมีการใช้อย่างกว้างขวางทั่วทั้งแกน WordPress ในปัจจุบัน เรียนรู้เพิ่มเติมเกี่ยวwp_dieกับ WordPress.org

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.