Php में स्थिर कोड विश्लेषण कैसे करें? [बन्द है]


465

क्या PHP स्रोत फ़ाइलों के लिए एक स्थिर विश्लेषण उपकरण है? द्विआधारी खुद वाक्यविन्यास त्रुटियों की जांच कर सकता है, लेकिन मैं कुछ ऐसी चीज की तलाश कर रहा हूं जो अधिक करता है, जैसे:

  • अप्रयुक्त चर कार्य
  • उन सरणियों को जिन्हें पहले आरंभीकृत किए बिना सौंपा गया है
  • और संभवतः कोड शैली चेतावनी
  • ...

57
राइट-ओ: एसओ द्वारा बंद, जब स्पष्ट रूप से इस तरह का जवाब अविश्वसनीय रूप से उपयोगी है।
इरा बैक्सटर

3
इस बात से सहमत। यह सवाल अहम है। php lint (php -l file) अन्य आधे को प्रदान करने में विफल रहता है: ऑटोलॉड चलाएं, सुनिश्चित करें कि एक फ़ंक्शन मौजूद है, जिसे चर मौजूद है, ऑब्जेक्ट गुण मौजूद हैं। आदि
मैक्स

6
@IraBaxter उपयोगी है, लेकिन नहीं, सख्ती से, विषय पर। softwarerecs.stackexchange.com शायद एक अधिक ऑन-टॉपिक स्थान है। बेशक यहाँ विडंबना यह है कि कई और डेवलपर्स एसओ से परिचित हैं क्योंकि यह भाई-बहन है ...
वेन वर्नर

7
तथ्य यह है कि इतने सारे लोग इस प्रकार के प्रश्न को उपयोगी पाते हैं, शायद इसीलिए सॉफ्टवेअर अब मौजूद हैं। यह निश्चित रूप से विषय पर वापस लग रहा था जब यह एकमात्र स्टैक एक्सचेंज साइट थी। अब जब कि इसके लिए एक स्पष्ट स्थान है, तो क्या यह माइग्रेट करने के लिए समझ में आता है?
eswald

4
ट्रिगर-हैप्पी क्लोजर्स के कारण बंद। बाह!
रोडवेल

जवाबों:


356

निष्पादन के बिना वाक्यविन्यास को मान्य करने के लिए कमांड लाइन से लिंट-मोड में php चलाएं:

php -l FILENAME

उच्च-स्तरीय स्थैतिक विश्लेषणकर्ताओं में शामिल हैं:

निचले स्तर के विश्लेषणकर्ताओं में शामिल हैं:

रनटाइम एनालाइज़र, जो कि PHP की गतिशील प्रकृति के कारण कुछ चीजों के लिए अधिक उपयोगी हैं, में शामिल हैं:

प्रलेखन पुस्तकालयों phpdoc और doxygen एक तरह का कोड विश्लेषण करते हैं। Doxygen, उदाहरण के लिए, graphviz के साथ अच्छा वंशानुक्रम रेखांकन प्रस्तुत करने के लिए कॉन्फ़िगर किया जा सकता है ।

एक अन्य विकल्प xhprof है , जो xdebug के समान है, लेकिन हल्का है, जो इसे उत्पादन सर्वर के लिए उपयुक्त बनाता है। उपकरण में एक PHP- आधारित इंटरफ़ेस शामिल है।


20
इन सभी अच्छाइयों को आजमाने में मेरे जीवन के 6 घंटे लग गए!
अबे पेट्रिलो

14
@dimitko: ऐसा इसलिए है क्योंकि php -lएक बार में केवल एक इनपुट फ़ाइल को पढ़ा जा सकता है (यदि आप ऐसा करते हैं तो यह काम नहीं करेगा php -l file1.php file2.php)। इसके बजाय आपको -n 1विकल्प का उपयोग करने की आवश्यकता है , जो xargsकेवल एक इनपुट लाइन प्रति कमांड प्रक्रिया का उपयोग करने के लिए कहता है। इसके बजाय php -l file1.phpइसके द्वारा php -l file2.phpअलग-अलग चलने का कारण होगा । एक ही समय में, आप -P <n>निष्पादन को समानांतर करने के लिए एक समय में "एन" प्रक्रियाओं को चलाने के लिए उपयोग कर सकते हैं :find . -name '*.inc' -o -name '*.php' -print0 | xargs -0 -n1 -P10 php -l
जो

11
find /your/path -name '*.php' -exec php -l {} \;विश्वसनीय काम करता है।
कोएन।

11
नायब : के लिए निर्मित फाहा समारोह ( php -lकाम करने के लिए), तो आप सेट करना होगा display_errors = onमें php.ini, अन्यथा आप केवल जा रहा है वाक्यविन्यास त्रुटियों वहाँ के बारे में एक सामान्य संदेश लेकिन क्या त्रुटि (एस) या क्या लाइन (रों) के बारे में कोई विवरण नहीं मिल जाएगा।
Synetech

8
सिनटेक - अच्छा। आप -dस्विच का उपयोग करते हुए कमांड लाइन पर सेटिंग को ओवरराइड कर सकते हैं । जैसेphp -l -d display_errors=on $FILENAME
ट्रोलेन्सन

38

ऑनलाइन PHP लिंट

PHPLint

अनियोजित वैरिएबल जाँच । लिंक 1 और 2 पहले से ही ऐसा लगता है कि यह ठीक है, हालांकि।

मैं यह नहीं कह सकता कि मैंने इनमें से किसी का भी गहन उपयोग किया है, हालांकि :)


उनके जवाब ने आज मेरा दिन महान बना दिया! +1
गुइलेरमे नैसिमेंटो


24

PHP मेस डिटेक्टर भयानक और तेज है।


7
धन्यवाद! मैं एक भयानक लग रही थी। वास्तव में, मैं कुछ भी लेकिन भयानक उपकरणों का उपयोग करने से इनकार करता हूं। :)
प्रो। फाल्कन कॉन्ट्रैक्ट ने

1
यह एक शुरुआत है, और ऐसा लगता है कि Netbeans क्या उपयोग करता है, लेकिन मैं इसे पूरी तरह से भरोसा नहीं करता। इसके कुछ विकल्प सीधे सादे हैं ("चेतावनी" यदि आप एक और बयान का उपयोग करते हैं ??), और इसके जासूसों में कई बड़े कीड़े हैं, तो डेवलपर्स से भी प्रतिक्रिया नहीं हुई है: github.com/phpmd / phpmd / मुद्दों
NoBugs

और साइक्लोमैटिक जटिलता को जोड़ता है और अक्सर बचने के लिए अलग-अलग लिखा जा सकता है। जैसे अगर (सच्चा) {$ x = 1; } और {$ x = 2; } फिर से लिखा जा सकता है: $ x = 2; अगर (सच) {$ x = 1; }
रिचर्डअटोम

17

मैंने $ php -l और कुछ अन्य टूल्स का उपयोग करने की कोशिश की है। हालांकि मेरे अनुभव में सबसे अच्छा (YMMV, निश्चित रूप से) pfff टूलसेट का स्कैच है । मैंने Quora ( http://www.quora.com/Is-there-a-good-PHP-lint-static-analysis-tool ) पर pfff के बारे में सुना।

आप इसे संकलित और स्थापित कर सकते हैं। कोई अच्छा पैकेज नहीं हैं (मेरे मिंट डेबियन पर, मुझे libpcre3-dev, ocaml, libcairo-dev, libgtk-3-dev और libgimp2.0-dev निर्भरताएँ पहले स्थापित करनी थीं), लेकिन एक इनसॉल के लायक होना चाहिए।

परिणाम की तरह रिपोर्ट कर रहे हैं

rjha@mint ~ $ ~/sw/pfff/scheck ~/code/github/sc/
login-now.php:7:4: CHECK: Unused Local variable $title
go-automatic.php:14:77: CHECK: Use of undeclared variable $goUrl.

धन्यवाद। यह हमारे गतिशील आयात के बारे में शिकायत करता रहता है, लेकिन इसकी अन्य क्षमताएं अब तक अच्छी हैं। मुझे बिनुटिल-गोल्ड स्थापित करने की भी आवश्यकता थी, और कस्टम पथ में स्थापित करने के लिए स्कैच की आवश्यकता थी, लेकिन अब यह काम करने लगता है।
eswd

1
@eswald अब मैं एक php मेस डिटेक्टर (phpmd) कन्वर्ट करता हूँ। मैंने अब तक जितने भी टूल आज़माए हैं उनमें से (php code sniffer, scheck, php -l, phpmd), IMHO, phpmd मेरे मामले के लिए सबसे अच्छा काम करता है।
rjha94

क्या आप जानते हैं कि स्कैच कहां से पाया जाए?
जॉर्ज कैटसनोस

1
@GeorgeKatsanos scheck pfff टूलसेट का हिस्सा है। github.com/facebook/pfff
rjha94

2
स्कैच हमेशा मुझे त्रुटि देता है "php चेकर को एक ग्राफ फ़ाइल की आवश्यकता है"। ज्यादातर गैर-मौजूद दस्तावेज का कोई उदाहरण नहीं है।
रॉबर्ट ब्रूस

14

सिमेंटिक डिज़ाइन्स ' क्लोन ' देखें , जो एक "क्लोन डिटेक्शन" टूल है जो कॉपी / पेस्ट / एडिट किए गए कोड को ढूंढता है। यह व्हॉट्सएप, टिप्पणियों और यहां तक ​​कि चर के नाम के बावजूद, सटीक और निकट कोड कोड मिल जाएगा। PHP के लिए एक नमूना जांच रिपोर्ट वेसाइट पर पाई जा सकती है। (मैं लेखक हूं)।


1
साइट को देखते हुए, यह एक अविश्वसनीय उपकरण की तरह लगता है। मैं बाद में करीब से देखूंगा! लिंक के लिए धन्यवाद (+1 "मैं लेखक हूं" के लिए भी)
एरिक कोप

किसी भी कंवर्जन अंडरग्राउंड का बैन।
wom

7

NetBeans IDE सिंटैक्स त्रुटियों, बेकार चर और इस तरह के लिए जाँच करता है। यह स्वचालित नहीं है, लेकिन छोटे या मध्यम परियोजनाओं के लिए ठीक काम करता है।


6

वहाँ एक नया उपकरण PHP के लिए nWire कहा जाता है । यह ग्रहण पीडीटी और ज़ेंड स्टूडियो 7.x के लिए एक कोड अन्वेषण प्लगइन है। यह PHP के लिए वास्तविक समय कोड विश्लेषण को सक्षम करता है और निम्नलिखित उपकरण प्रदान करता है:

  • कोड विज़ुअलाइज़ेशन - घटकों और संघों के इंटरैक्टिव चित्रमय प्रतिनिधित्व।
  • कोड नेविगेशन - अद्वितीय नेविगेशन दृश्य आपके साथ लिखते या पढ़ते समय सभी संघों और कार्यों को दिखाता है।
  • त्वरित खोज - आपके द्वारा लिखी गई विधियों, फ़ील्ड्स, फ़ाइल आदि के लिए खोजें।

1
सवाल का जवाब नहीं। जैसे उत्तर में नेटबीन्स आदि मौजूद होते हैं ..
योसेफ

5

PHPUnit के पूर्व भाग के रूप में PHP PMD (प्रोजेक्ट मेस डिटेक्टर) और PHP CPD (कॉपी पेस्ट डिटेक्टर)


4

नहीं है PHP स्क्रिप्ट में कमजोरियों के लिए एक स्थिर स्रोत कोड विश्लेषक - आरआईपीएसSourceForge पर उपलब्ध रिप्स के स्रोत ।

RIPS साइट से:

RIPS स्थिर कोड विश्लेषण का उपयोग करके PHP अनुप्रयोगों में कमजोरियों को खोजने के लिए PHP में लिखा गया एक उपकरण है। सभी स्रोत कोड फ़ाइलों को टोकन और पार्स करके, RIPS प्रोग्राम स्रोत में PHP स्रोत कोड को बदलने और संवेदनशील सिंक (संभावित रूप से कमजोर कार्यों) का पता लगाने में सक्षम है जो प्रोग्राम फ्लो के दौरान userinput (एक दुर्भावनापूर्ण उपयोगकर्ता द्वारा प्रभावित) द्वारा दागी जा सकती है। पाया कमजोरियों के संरचित उत्पादन के अलावा RIPS आगे मैनुअल विश्लेषण के लिए एक एकीकृत कोड ऑडिट फ्रेमवर्क भी प्रदान करता है।


RIPS एक अर्ध-मृत परियोजना है और यह केवल गैर-OOP php-code के साथ काम करती है।
एलेगेल

3

स्थिर कोड विश्लेषण के लिए बिल्कुल नया टूल है जिसे PHP एनालाइजर कहा जाता है

कई प्रकार के स्थैतिक विश्लेषणों में यह बुनियादी ऑटो-फिक्सिंग कार्यक्षमता भी प्रदान करता है, प्रलेखन देखें ।

अद्यतन: PHP-विश्लेषक अब पदावनत परियोजना है, लेकिन आप अभी भी इसे विरासत शाखा पर एक्सेस कर सकते हैं


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.