2012-08-14 18 views
8

ठीक है, मैं यहाँ एक अचार में भाग गया है। मुझे वाक्यविन्यास त्रुटियों के लिए कुछ PHP जांचने की आवश्यकता है।PHP सिंटेक्स त्रुटियों के लिए जाँच करें?

php -l somefile.php

हालांकि, वहाँ एक PHP फ़ाइल के भीतर ही से चलाने के लिए एक रास्ता है: मैं इस बिट कमांडलाइन से चलाने की जरूरत है देखा? मैं देख रहा हूं और सोचता हूं कि मैं parse_str किसी भी तरह इसे $ _GET में दर्ज करके इसे पूरा करने के लिए उपयोग कर सकता हूं, लेकिन यह समझ में नहीं आता कि यह कैसे काम करता है।

किसी और ने मुझे यह निर्धारित करने के लिए token_get_all() PHP फ़ंक्शन का उपयोग करने के लिए कहा।

लेकिन मैं यह नहीं समझ सकता कि किसी भी दृष्टिकोण से इसे कैसे किया जाए? क्या कोई यहां मुझे शुरू करने के लिए कुछ नमूना कोड दे सकता है ?? मुझे नहीं लगता कि eval() का उपयोग करने का तरीका है, हालांकि मेरे पास eval($code) काम कर रहा था, लेकिन मुझे नहीं लगता कि PHP सिंटैक्स त्रुटियों के दौरान मुझे स्क्रिप्ट को चलाना चाहिए।

इस पर किसी भी मदद की हमेशा सराहना की जाती है!

+0

क्यों 'php -l' subprocess spawn नहीं? –

+0

@arxanas - यह कैसे किया जा सकता है ?? संभावित उत्तर ...? –

+0

@ सोलोमनक्लोसन, मुझे लगता है कि वह terse टिप्पणी http://php.net/manual/en/function.exec.php – Pacerier

उत्तर

1

php_check_syntax चाल चलाना चाहिए। यदि आप PHP> = 5.05 चला रहे हैं, तो कार्यान्वयन के लिए टिप्पणी अनुभाग में पहली टिप्पणी देखें।

+3

का जिक्र कर रहा है यह फ़ंक्शन PHP से हटा दिया गया था ... [link] (http: //www.php .net/manual/en/function.php-check-syntax.php) –

+0

अच्छी पकड़ @ सोलोमनक्लोसन। ओपी, सौभाग्य से टिप्पणियों में एक कार्यान्वयन है जिसका आप उपयोग कर सकते हैं।मैं इसे यहां पेस्ट नहीं करूँगा क्योंकि यह बहुत बड़ा है, लेकिन यह शीर्ष टिप्पणी है। – wanovak

+0

यह एक PHP4 फ़ंक्शन है और इसे PHP 5.0.x में हटा दिया गया है। इसके अलावा यह मूल रूप से 'eval() 'के लिए एक उपनाम था - यह सिर्फ पार्सिंग त्रुटियों का पता लगाने के लिए आपूर्ति कोड चला गया। – mario

5

आप बस shell_exec() इस तरह कर सकता है:

$output = shell_exec('php -l /path/to/filename.php'); 

यह आपको स्ट्रिंग $output में कमांड लाइन आपरेशन के उत्पादन देता है।

+0

यह मुझे '$ आउटपुट अपरिभाषित' त्रुटि देता है। –

+0

ठीक है, अपरिभाषित आउटपुट त्रुटि को ठीक कर दिया है, हालांकि, अब यह एक खाली स्ट्रिंग देता है भले ही PHP सिंटेक्स त्रुटियां हों या नहीं। –

0

मैं इस तरह यह करना होगा:

$php_file = 'The path to your file'; 
if(substr(`php -l $php_file`, 0, 16) == 'No syntax errors') { 
    // Correct syntax 
} else { 
    // Error 
} 
0

आप वाक्यविन्यास त्रुटियों के लिए जाँच करने exec उपयोग कर सकते हैं।

$tempFile = path/of/file 
$syntaxParseError = strpos(exec('php -l '.$tempFile), 'No syntax errors detected') === false;` 

दुर्भाग्य से, यह आपको लाइन नंबर नहीं देगा या आपको त्रुटि के बारे में कुछ भी नहीं बताएगा। इसके लिए आपको या तो अपने सर्वर Is there a static code analyzer [like Lint] for PHP files? पर स्थिर विश्लेषक स्थापित करने की आवश्यकता होगी या अपना स्वयं का पार्सर लिखना होगा।

एनबी। token_get_all() अपने आप पर कुछ भी निर्धारित नहीं करेगा, लेकिन यह एक पार्सर बनाने के लिए उपयोगी काम है।

2

यह php -l

$fileName = '/path/to/file.php'; 
exec("php -l {$fileName}", $output, $return); 

if ($return === 0) { 
    // Correct syntax 
} else { 
    // Syntax errors 
} 

की वापसी की स्थिति की जांच करने के लिए this fiddle देखें कार्रवाई में यह देखने के लिए

1

क्यों बिल्कुल खोल का उपयोग सुरक्षित है?

function syntax_is_valid($code) 
{ 
    try 
    { 
     @eval($code); 
    } 
    catch (ParseError $e) 
    { 
     return false; 
    } 

    return true;  
} 

वैकल्पिक रूप से अधिक जानकारी के लिए $e->getMessage() का उपयोग करें।

+0

आप सभी दुष्प्रभावों को कोड चलाने (evaling) से कैसे रोकते हैं? जैसे प्रिंटिंग, डेटाबेस से कनेक्ट करना, फाइलें लिखना आदि। –

संबंधित मुद्दे