हमारी एक परियोजना में, सेवा की कार्यक्षमता का विस्तार करने के लिए प्लगइन्स लिखना संभव है।
उपयोगकर्ता हमारे इंटरफ़ेस में एप्लिकेशन प्लग इन बनाते हैं और PHP में उनके तर्क का वर्णन करते हैं।
यह PHP की संभावनाओं को सीमित करने के लिए आवश्यक था, ताकि कोई भी गलती से हमें कोडित न करे।
एक संरक्षित वातावरण में PHP कोड निष्पादित करने के लिए कई उपकरण हैं: एक अलग प्रक्रिया में निष्पादन, एक फ़ाइल में कोड को सहेजना और क्लिंटेड क्षमताओं के साथ cli के माध्यम से कॉल करना या PHP के लिए विशेष एक्सटेंशन का उपयोग करना।
सेवा और अनुप्रयोगों की बारीकियों के कारण, साथ ही सभी ऑपरेटिंग सिस्टम पर सैंडबॉक्स का उपयोग करने की संभावना (सैंडबॉक्स के लिए प्रक्रियाएं और एक्सटेंशन विंडोज पर काम नहीं करते हैं), एक छोटा वर्ग बुनियादी PHP सेटिंग्स के साथ लिखा गया था:
Ext_Sandbox -PHPValidator ।
कक्षा का एक छोटा विवरण
अंदर केवल दो कार्य हैं:
- स्थिर फ़ंक्शन php_syntax_error ($ कोड, $ टोकन = शून्य)
- स्थिर फ़ंक्शन वैद्युतकप्रक्रमक ($ स्रोत, $ फ़ंक्शंस = सरणी (), $ सक्षम = सत्य)
php_syntax_error
फ़ंक्शन चेक करता है कि क्या PHP कोड का सिंटैक्स सही है (क्या ब्रैकेट गायब हैं, आदि)।
$ कोड - php कोड (बिना <php)
$ टोकन एक वैकल्पिक पैरामीटर है, आप इसे पास कर सकते हैं यदि आपने पहले से ही कोड को टोकन में डाल दिया है (आप
token_get_all फ़ंक्शन का उपयोग करके
पार्स कर सकते हैं)।
फ़ंक्शन स्वरूप में एक त्रुटि देता है: सरणी (त्रुटि संदेश, त्रुटि लाइन #)
यदि कोई त्रुटि नहीं है, तो फ़ंक्शन
गलत वापस आ जाएगा।
validatePHPCode
फ़ंक्शन php कोड की जांच करता है और चेक (सच्चा या गलत) का परिणाम देता है।
$ स्रोत - php कोड बिना <? php शुरुआत में
$ कार्य - अनुमत / निषिद्ध कार्य
$ सक्षम - बूलियन, यदि सच है, तो $ कार्यों में अनुमत कार्यों की एक सूची होगी, यदि गलत है - निषिद्ध कार्यों की सूची।
एक उदाहरण:
<?php require 'PHPValidator.php'; $code = <<<PHP \$b = 1; \$c = 2; \$a = \$b + \$c; echo \$a; class test { public function __construct() { echo 'construct'; } public function foo(\$num) { var_dump(\$num); } } \$test = new test(); \$test->foo(\$a); PHP;
इसे ऑनलाइन आज़माएं:
http://ideone.com/e1qx28वर्ग GitHub पर है।