/ / PHP - कोड चलाए बिना सिंटैक्स त्रुटियों के लिए PHP कोड की जाँच करें - php, eval, वाक्यविन्यास-त्रुटि

PHP - कोड चलाने के बिना सिंटेक्स त्रुटियों के लिए PHP कोड जांचें - php, eval, वाक्यविन्यास-त्रुटि

मुझे पता है कि उपयोग करके eval($code_to_check); हम जाँच सकते हैं कि क्या यह मान बराबर है FALSE और यदि हां, तो हम स्क्रिप्ट के निष्पादन को रोक सकते हैं। हालाँकि, मुझे जो समस्या आ रही है, वह यह है कि मैं किसी फ़ंक्शन को परिभाषित करने में असमर्थ हूँ, क्योंकि इसे दो बार कहा जाता है ... यह eval के साथ संसाधित हो जाता है () यह सुनिश्चित करने के लिए जाँच करें कि कोई सिंटैक्स त्रुटियां नहीं हैं और फ़ंक्शन को फिर से संसाधित करने से पहले, लेकिन एक त्रुटि दिखाती है जो बताती है कि यह इस फ़ंक्शन को पुनः प्राप्त नहीं कर सकता है, क्योंकि यह पहले से ही ev "d फ़ंक्शन में घोषित किया जा रहा है। मैं इसे कैसे बना सकता हूं ताकि हम "EVAL" डी फ़ंक्शन में चीजों की घोषणा न करें, या शायद, हम उस सब कुछ को अनचाहा कर सकते हैं जो वास्तव में कॉल करने से पहले eval () फ़ंक्शन में घोषित किया गया था ...

वैसे भी, यहाँ मैं क्या "अब तक के साथ काम कर रहा हूँ ... कुछ मदद का उपयोग कर सकता है, क्योंकि मुझे" सामग्री नहीं मिल सकती है "जब $ सामग्री (जो php कोड है) उसके भीतर एक फ़ंक्शन है।

// PHP Syntax errors?
if (!@eval("return true;" . $content))
{
// Error found in PHP somewhere.  Call error function and return out of here!
call_user_func_array($code_error["function"], $code_error["params"]);
return;
}
else
{
ob_start();

eval($content);
$code = ob_get_contents();
ob_end_clean();
}

क्या कोई यहाँ मेरी मदद कर सकता है? धन्यवाद दोस्तों, आप सभी यहाँ बहुत मददगार हैं! आप सभी एक स्वर्ण पदक के हकदार हैं, लेकिन मेरा मानना ​​है कि ओलंपिक अब खत्म हो चुके हैं और यह "अभी तक काफी खेल नहीं है ...


ठीक है, मैं यहाँ अपना उत्तर देने का प्रयास कर रहा हूँ, औरसोच रहा था कि यह अभी भी त्रुटियों को पकड़ लेगा और इन कार्यों को दो बार कॉल किए बिना एक ही समय में फ़ंक्शन बनाने की अनुमति देगा। क्या ऐसा करने का यह एक उचित तरीका है ?? क्या कोई इस कोड में कोई संभावित समस्या देख सकता है? अगर कोई सिंटैक्स त्रुटियां नहीं मिलीं, तो मैं $ eval_code गूँज रहा हूं ... क्या यह करना ठीक है?

$eval_code = @eval($content);
// PHP Syntax errors?
if ($eval_code === FALSE)
{
call_user_func_array($code_error["function"], $code_error["params"]);
return;
}
else
{
ob_start();
echo $eval_code;
$code = ob_get_contents();
ob_end_clean();
}

उत्तर:

उत्तर № 1 के लिए 4
$checkResult = exec("echo "<?php " . escapeshellarg($code_to_check) . "" | php -l >/dev/null 2>&1; echo $?");
if ($checkResult != 0) {
throw new RuntimeException("Invalid php");
} else {
$result = eval($code_to_check);
}

जवाब के लिए 0 № 2

यदि आप के लिए PHP प्रलेखन की जाँच करें eval(), यह विवरण है:

eval - PHP कोड के रूप में एक स्ट्रिंग का मूल्यांकन करें

हालाँकि, PHP प्रलेखन, खुद कहते हैं कि eval एक है खतरनाक निर्माण: सावधान

भाषा का निर्माण () भाषा बहुत खतरनाक हैक्योंकि यह अनुमति देता है मनमाना PHP कोड का निष्पादन। इस प्रकार इसका उपयोग हतोत्साहित किया जाता है। अगर तुम ध्यान से सत्यापित करें कि इसका उपयोग करने के अलावा और कोई विकल्प नहीं है निर्माण, किसी भी उपयोगकर्ता द्वारा प्रदान किए गए डेटा को पारित नहीं करने पर विशेष ध्यान दें पहले से इसे ठीक से सत्यापित किए बिना।

इसलिए, उपयोग करते समय सावधान रहें eval, बहुत सावधान। अब वापस अपने सवाल पर।

मुझे लगता है कि आपको यहां एक उपकरण की आवश्यकता है जो कर सकता हैएक परिभाषित कोडिंग मानक के उल्लंघन का पता लगाने के लिए सिंटैक्स की जाँच में आपकी सहायता करें। मैं जावास्क्रिप्ट कोड में उल्लंघनों की जांच करने के लिए ESLint का उपयोग करता हूं। PHP के लिए मैं PHPStorm और उदात्त पाठ दोनों का उपयोग करता हूं, और मैं PHP Lint और PHPCS का उपयोग करता हूं। निष्कासन करने के बजाय, मेरा सुझाव है कि आप इनमें से किसी एक का उपयोग करें या इन उपकरणों के संयोजन से आप उद्देश्य प्राप्त कर सकते हैं।

यदि आप Jetbrains PHPStorm का उपयोग कर रहे हैं, तो आप इन प्लगइन्स को यहाँ पा सकते हैं:

यदि आप उदात्त का उपयोग करना पसंद करते हैं, तो यहां आपके लिए प्लगइन्स हैं:

मेरा कहना है, इन उपकरणों का एक अच्छा संयोजन आपके कोड की पवित्रता सुनिश्चित करने के लिए पर्याप्त होना चाहिए।

-धन्यवाद


जवाब के लिए 0 № 3

आप एक नए लेकिन बहुत लोकप्रिय और स्थिर टूल का भी उपयोग कर सकते हैं PHPStan इस प्रकार की जाँच के लिए।

यहां आप पढ़ सकते हैं एक छोटा और सरल ट्यूटोरियल, इसका उपयोग कैसे करें.