2011-11-15 12 views
7

के लिए PHP परीक्षण यह एक लंबा शॉट है, लेकिन मुझे लगा कि मैं वैसे भी पूछूंगा। मेरे पास एक ऐसा एप्लिकेशन है जिसमें एसीई संपादक का उपयोग करके, गिटूब पर मिलते-जुलते वेब-आधारित कोड संपादन हैं। समस्या यह है कि, एप्लिकेशन के भीतर कोड को संपादित करना संभव है।घातक त्रुटि

मैंने फ़ाइल को सहेजने से पहले पार्स त्रुटियों का पता लगाने में कामयाब रहा है, जो बहुत अच्छा काम करता है, लेकिन यदि उपयोगकर्ता रनटाइम त्रुटि बनाता है, जैसे MyClass extends NonExistentClass, फ़ाइल पार्स चेक पास करती है, लेकिन फाइल सिस्टम को सहेजती है, एप्लिकेशन को मारती है।

क्या यह जांचने के लिए वैसे भी है कि क्या नया कोड फाइल सिस्टम में सहेजने से पहले रनटाइम त्रुटि का कारण बनता है? पूरी तरह से प्रतिद्वंद्वी लगता है, लेकिन मुझे लगा कि मैं पूछूंगा।

+0

वाह। यह थोड़ी देर के लिए इस साइट में मैंने देखा सबसे अच्छा प्रश्न है। मैं खुद को एक जवाब की उम्मीद करूँगा। शायद 'eval()' लायक जांच के साथ कुछ। –

उत्तर

2

संभावित रूप से घातक त्रुटि के बारे में जानकारी वाले JSON ऑब्जेक्ट को बनाने के लिए register_shutdown_function का उपयोग करें। फिर फ़ाइल का परीक्षण करने के लिए एक AJAX कॉल का उपयोग करें; यह देखने के लिए कि क्या कोई त्रुटि है, कॉल से लौटाए गए मूल्य को पार्स करें। (जाहिर है आप भी PHP फ़ाइल चलाने के लिए और AJAX का उपयोग किए बिना JSON ऑब्जेक्ट पार्स, बस क्या एक UX दृष्टि से सबसे अच्छा होगा के बारे में सोच सकता है)

function my_shutdown() { 
    $error = error_get_last(); 
    if($error['type'] == 1) { 
     echo json_encode($error); 
    } 
} 
register_shutdown_function('my_shutdown'); 

विल उत्पादन कुछ

तरह
{"type":1,"message":"Fatal error message","line":1} 

प्रारंभ में लगा कि परीक्षण फ़ाइल की शुरुआत में, फिर:

$.post('/test.php', function(data) { 
    var json = $.parseJSON(data); 
    if(json.type == 1) { 
     // Don't allow test file to save? 
    } 
}); 
+0

इसे प्यार करो। धन्यवाद। – UncleCheese

+0

परीक्षण नहीं किया गया है, इसलिए कोई गारंटी नहीं है कि यह काम करेगा ... मैं कुछ समय के लिए खुला प्रश्न छोड़ दूंगा ताकि यह देखने के लिए कि दूसरों के विचार क्या हो सकते हैं। – andrewtweber

0

शायद पहले एक अलग फ़ाइल में कोड चला रहा है और यह जांचने के लिए नीचे दिए गए कुछ निश्चित कोड संलग्न करें?

2

संभवतः सहायक: php -f <file> रनटाइम त्रुटि होने पर एक गैर-शून्य निकास कोड वापस कर देगा।

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