_JEXEC คือตัวแปรค่าคงที่ตัวหนึ่งเท่านั้นเอง หลายคนเมื่อดูที่บรรทัดต้นๆ ของไฟล์ Components, Modules, Plugins, Templates หรือไฟล์อื่นๆ ซึ่งทำงานภายใต้ Joomla จะเห็นตัวแปรนี้ที่บรรทัดแรกๆ ยกตัวอย่างไฟล์ JOOMLA_ROOT/components/com_user/user.php
โค้ด: เลือกทั้งหมด
defined( '_JEXEC' ) or die( 'Restricted access' );
คำสั่งข้างต้นเป็นการตรวจสอบการเรียกใช้งานไฟล์ user.php ว่าถูกเรียกโดย Joomla จริงๆ หรือไม่ ถ้าไม่ใช่จะออกจากการทำงานและแจ้งข้อความโดยแสดงออกมาทางหน้าเว็บไซด์ว่า “Restricted access” เช่นเราเรียกใช้งานไฟล์นี้โดยตรง ผ่าน URL ดังนี้
โค้ด: เลือกทั้งหมด
http://www.deeextension.com/components/com_user/user.php
ผลลัพธ์ที่ได้ หน้าเว็บไซด์จะแสดงข้อมูล “Restricted access”
แต่ถ้าเราเรียกใช้งาน user component อย่างถูกต้อง จะเรียกใช้งานผ่าน URL ดังนี้
โค้ด: เลือกทั้งหมด
http://www.mywebsite.com/index.php?option=com_user
คำถามต่อไปก็คือ Joomla จะรู้ได้อย่างไรว่าการเรียกใช้งาน ถูกเรียกใช้งานผ่าน Joomla หรือเรียกใช้งานผ่านไฟล์โดยตรง
ตอบได้ว่า Joomla จะตรวจสอบว่าตัวแปร _JEXEC มีการประกาศตัวแปรไว้แล้วหรือไม่ ผ่านคำสั่ง PHP คือ defined() และประกาศตัวแปรผ่านคำสั่ง define()
ซึ่ง Joomla จะมีการประกาศตัวแปร _JEXEC ไว้ที่ไฟล์ index.php คือ
สรุปได้ว่า เมื่อเราเรียกใช้งาน Component ผ่าน URL อย่างถูกต้อง การทำงานของ Joomla จะเรียกใช้งานไฟล์ index.php ก่อนเป็นอันดับแรก เมื่อ component อื่นๆมีการเขียนคำสั่งในการตรวจสอบตัวแปร _JEXEC ไว้ ถ้าเรียกใช้งานผ่าน URL อย่างถูกต้อง Joomla จึงจะทำงานได้โดยไม่หยุดการทำงานของคำสั่ง die( 'Restricted access' );
ข้อมูลจาก