2009-07-30 15 views
11

मैं गतिशील रूप से PHP वर्ग फ़ाइलों को ऑटोलोड के साथ लोड करता हूं। और उन फ़ाइलों को किसी कारण से गुम या दूषित हो सकता है।क्या PHP से PHP फ़ाइल सिंटैक्स जांचना संभव है?

ऑटोलोड लोडिंग फाइलों की सफलतापूर्वक रिपोर्ट करेगा ताकि एप्लिकेशन लॉजिक इसे संभाल सके। लेकिन अगर उन फाइलों को दूषित कर दिया गया है, तो संपूर्ण प्रसंस्करण उपयोगकर्ता के लिए रिक्त स्क्रीन और त्रुटि लॉग में "PHP पार्स त्रुटि: वाक्यविन्यास त्रुटि" के साथ रुक जाती है।

क्या PHP कोड से PHP फ़ाइल का सिंटैक्स जांचना संभव है?

मैंने यहां देखा है: http://us.php.net/manual/en/function.php-check-syntax.php - यह बहिष्कृत है।

और

exec("php -l $file"); 

एक गलत तरीके से (http://bugs.php.net/bug.php?id=46339)

विचार हो रहा है?

+4

क्या आप वास्तव में प्रत्येक फ़ाइल के सिंटैक्स की जांच करने पर विचार करते हैं जिसे आप स्क्रिप्ट निष्पादित करते समय हर बार शामिल करना चाहते हैं? – Gumbo

+0

बिल्कुल नहीं। मेरे पास विशेष प्रकार की कक्षाएं हैं जिन्हें संभावित रूप से दूषित किया जा सकता है, उन सभी में से नहीं। –

उत्तर

6

आप वास्तव में गैर-सही जांच करने के लिए कोशिश नहीं करनी चाहिए निष्पादन समय पर PHP फ़ाइलें: यह आपके आवेदन के प्रतिक्रिया समय को मार देगा!

एक PHP बेहतर स्क्रिप्ट को संशोधित करने के दौरान एक "बेहतर तरीका" कमांड लाइन से php -l का उपयोग करना होगा; या यदि आप एक का उपयोग कर रहे हैं तो इसे अपनी निर्माण प्रक्रिया में शामिल करें; या यदि आप एसवीएन का उपयोग कर रहे हैं और इसे SVN hooks परिभाषित कर सकते हैं तो इसे एक एसवीएन प्री-प्रतिबद्ध हुक के रूप में प्लग करें।

मेरी राय में, लगभग कोई भी समाधान निष्पादन समय पर स्वयं को जांचने से बेहतर होगा!


उन त्रुटियों को ध्यान में रखते हुए जिन्हें आप टालना चाहते हैं, शायद यह अक्सर नहीं होगा, शायद यह बेहतर होगा ... बस उन्हें होने दें।
केवल एक चीज है: लॉग सक्रिय करते हैं, और उन्हें निगरानी, ​​जल्दी पता लगाने के लिए सक्षम हो जब तेरे एक समस्या :-)


बेशक है, यह याद आ रही फाइलों के मामले से निपटने से रोक नहीं करता ; लेकिन यह एक अलग बात है ...

+0

आपके उत्तर के लिए धन्यवाद। उत्तर "नहीं, उचित प्रदर्शन के साथ नहीं" एक मान्य विकल्प है। एसवीएन प्री-प्रतिबद्ध हुक एक अच्छा विचार है और मुझे लगता है कि ज्यादातर मामलों में हमारी समस्या का समाधान होगा। –

+0

आपका स्वागत है :-) एसवीएन प्री-प्रतिबद्ध हुक के बारे में ठीक है: जब आप एसवीएन सर्वर के व्यवस्थापक होते हैं, तो हुक वास्तव में उपयोग करने के लिए बहुत अच्छे हैं! –

0

संक्षेप में: मैं ऐसा करने का कोई तरीका नहीं देख सकता, लेकिन एक विचार है जो पर्याप्त हो सकता है।

लॉग निगरानी प्रोग्राम हैं या पार्स त्रुटियों वाली फ़ाइलों के लिए मानक उपकरण के माध्यम से लॉग फ़िल्टर कर सकते हैं। यदि कोई फ़ाइल दिखाई देती है, तो आप इस सूची के विरुद्ध लोड होने से पहले खलनायक फ़ाइल नाम को एक ब्लैक लिस्ट में डालते हैं और आपके ऑटोलोडर चेक को डाल देते हैं।

इस विधि के साथ, पहली बार आप एक खाली स्क्रीन (उत्पादन सर्वर पर आउटपुट में रिपोर्टिंग त्रुटि रिपोर्ट चालू कर रहे हैं) की सेवा करेंगे, लेकिन दूसरे के पास दोषपूर्ण घटक के बिना एक पृष्ठ होगा।

autoloader में आप किसी सूची या नामकरण योजना हमेशा अनिवार्य कक्षाएं लोड हो रहा है करने के लिए प्रयास करने के लिए होना चाहिए (अन्य तरीकों से अपने आवेदन एक असंगत स्थिति में हो सकता है)

+0

मुझे लगता है कि वह (उसकी प्रणाली) का निर्माण समय पर उन फ़ाइलों पर कोई नियंत्रण नहीं है। –

+0

दिलचस्प विचार, जबकि मुझे लगता है कि साइट पर आने वाले उपयोगकर्ता पर सिंटैक्स जांच करने के लिए अच्छा नहीं है। भले ही केवल पहले को रिक्त पृष्ठ मिलेगा। –

2

एक और तरीका है कि आप अपने जड़

<?php 
for($i=1; $i < count($argv); $i++){ 
     $temp = "php -l " . $argv[$i]; 
     $output = exec($temp); 
     echo "\n$output"; 
} 
?> 

अब checkSyntax.php

बुलाया निर्देशिका में एक php फ़ाइल बना सकते हैं, इस फ़ाइल को चलाने के लिए एक शॉर्टकट बनाने के लिए अपने bashrc फ़ाइल को खोलने के । checkSyntax चलाने के लिए नीचे पंक्ति जोड़ें।PHP

alias checkSyntaxErrors='php /root/checkSyntax.php' 

और अब आपकी स्रोत निर्देशिका svn सेंट हो गई है।

यह आपको फ़ाइलों की सूची दिखाता है, अब आसानी से आदेश चलाता है।

checkSyntaxErrors file1.php file2.php ....... 

यह आपकी सभी फ़ाइलों को तर्क के रूप में गुजरने की जांच करेगा।

:)

0

तुम भी कुछ इकाई परीक्षण है, जहां आप पीएचपी आप गतिशील रूप से क्रियान्वित करने कर रहे हैं लोड और है कि कार्यकारी जोर ("php $ fileName -l") मान्य है कर सकता है का आनंद लें। यदि आपने ऐसा किया है तो आप इसे अपने परीक्षणों में एक बार सत्यापित करने में सक्षम होंगे, इसे उचित चर के साथ उत्पन्न करेंगे, और आपके PHP का अच्छा विश्वास होने का उचित स्तर होगा।

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