क्या फ़ाइल में शामिल करने का प्रयास करने के लिए PHP में कोई तरीका है, लेकिन अगर फ़ाइल में त्रुटियां हैं जो इसे संकलित करने से रोकती हैं तो बस उस फ़ाइल को शामिल करने से छोड़ दें?एक वर्ग की खराब प्रोग्रामिंग से एक वर्ग की रक्षा करना?
उत्तर
आप प्रश्न में फ़ाइल पर php -l को कॉल कर सकते हैं। हालांकि यह खोल जाएगा और धीमा होगा। हालांकि यह रनटाइम त्रुटियों को प्रबंधित नहीं करता है जैसे मर() हालांकि।
test.php:
<?php
function check_code_file($filename)
{
$filename = escapeshellcmd($filename);
system("php -l $filename 2>/dev/null 1>/dev/null", $status);
if ($status) return false;
return true;
}
if (check_code_file('test-good.php'))
{
include('test-good.php');
}
if (check_code_file('test-bad.php'))
{
include('test-bad.php');
}
print "finished\n";
परीक्षण good.php:
<?php
print "here\n";
परीक्षण bad.php:
<?php
die(
$ php test.php
here
finished
संकलन त्रुटियों के लिए नहीं। – Artefacto
हाँ क्षमा करें, टेस्ट केस थोड़ा सा पहुंचा, एक टाइपो था। काम करता है कि एक के साथ इसे redid। –
हालांकि यह समाधान महंगा हो सकता है हालांकि। –
PHP संस्करण के आधार पर आप php_check_syntax() (व्यावहारिक रूप से php -l के समान) का उपयोग कर सकते हैं।
लेकिन यह वास्तव में एक म्यू पॉइंट है .. या तो आपको अपनी सामग्री को शामिल करने की कोशिश करने की आवश्यकता है या आप इसे शामिल नहीं करते हैं।
मुझे उन चीज़ों की आवश्यकता नहीं है जिन्हें मैं शामिल करने का प्रयास कर रहा हूं, लेकिन यह कोड में कार्यक्षमता जोड़ता है। तो मैं सुरक्षित रूप से शामिल करने की कोशिश कर रहा हूं। इसके अलावा, मैंने अभी जांच की है, यह फ़ंक्शन 5.0.4 के रूप में बहिष्कृत है। उत्तर के लिए धन्यवाद! –
आदर्श समाधान से कम मैंने सोचा कि मैं यहां जन्म के लिए उल्लेख करूँगा। मूल विचार here है।
आप एक बुरी 'आवश्यकता' पर प्राप्त होने वाली E_PARSE त्रुटि को कैप्चर कर सकते हैं और इसे शटडाउन फ़ंक्शन पर सौंप सकते हैं। विचार पार्सिंग त्रुटि को दबाने के लिए है ...
register_shutdown_function('post_plugin_include');
@require 'bad_include.php';
फिर तथ्य के बाद अपना प्राथमिक निष्पादन करें।
function post_plugin_include() {
if(is_null($e = error_get_last()) === false) {
// do something else
}
}
जैसा कि मैंने कहा, आदर्श से कम लेकिन दिलचस्प है।
मैंने इसे पहले कभी नहीं देखा है, और यह कुछ रोचक विचार प्रदान करता है। साझा करने के लिए धन्यवाद। +1 –
@ मार्क टॉमलिन, निश्चित रूप से। – allnightgrocery
- 1. एक दुष्ट प्रोग्रामर से अजगर वर्ग चर की रक्षा कैसे करें?
- 2. वर्ग की तरह एक StringIO, कि django.core.files.File
- 3. एक वर्ग की प्रतिलिपि बनाएँ, सी #
- 4. प्रोग्रामिंग के लिए एक सी ++ वर्ग नाम पुनर्प्राप्त करना
- 5. Enum की तरह वर्ग
- 6. अंतर "वर्ग एक, वर्ग बी" और "वर्ग एक :: बी '
- 7. मुझे एक उदाहरण के साथ एक रैपर वर्ग की व्याख्या की आवश्यकता है कि एक बच्चे
- 8. LINQ क्वेरी सूची मैं 2 एक वर्ग की एक सूची
- 9. एक वर्ग
- 10. एक वर्ग
- 11. एक वर्ग
- 12. एक वर्ग
- 13. एक वर्ग
- 14. एक वर्ग
- 15. VB.NET एक वर्ग संपत्ति की जरूरत है एक सूची सरणी
- 16. मैं एक टेम्पलेट वर्ग से
- 17. एक सामान्य वर्ग की एक स्थिर संपत्ति का उपयोग करें?
- 18. एक DLL से एक सी ++ वर्ग निर्यात
- 19. सी # एक वर्ग वर्ग विधि से अधिक एक व्युत्पन्न वर्ग नीचे विरासत श्रृंखला
- 20. एक आंतरिक वर्ग से वंचित बाहरी वर्ग कैसे बनाया जाए?
- 21. एक अमूर्त वर्ग एक और अमूर्त वर्ग मुद्दा
- 22. अनुबंध वर्ग एक अमूर्त वर्ग होना चाहिए
- 23. इकाई वर्ग की तालिका नाम
- 24. मैं एक अमूर्त वर्ग है एक अमूर्त वर्ग
- 25. सीमा वर्ग एक वर्ग के निर्माण?
- 26. एक सिंगलटन वर्ग
- 27. एक अमूर्त वर्ग
- 28. numpy.ndarray: एक "सामान्य" वर्ग
- 29. एक पायथन वर्ग
- 30. एक पॉलिमॉर्फिक सी ++ वर्ग
यह एक दिलचस्प सवाल है, लेकिन क्या उस फ़ाइल पर निर्भर कुछ भी तोड़ने वाला नहीं होगा जिससे अधिक संकलन त्रुटियां हो सकती हैं? –
क्यों सुनिश्चित नहीं है कि हर कोई यूनिट परीक्षण का उपयोग कर रहा है और यह सत्यापित करने से पहले परीक्षण पास हो रहा है। यदि समस्याएं हैं, तो टूटी हुई कक्षा को ठीक होने तक मॉक करें। –
वास्तव में दिलचस्प सवाल है। हालांकि मैं उपयोग के मामले के बारे में सोच रहा हूँ। अगर कोई फ़ाइल संकलित नहीं होती है, तो यह स्पष्ट रूप से कभी भी नहीं चला है। यदि आप स्वयं फ़ाइल को शामिल करते हैं, तो आप आसानी से समस्याओं को ठीक करने में सक्षम होना चाहिए। या आप अपनी टीम पर दूसरों द्वारा किए गए खराब कोड से एप्लिकेशन की रक्षा करने की कोशिश कर रहे हैं? यदि यह चिंता का विषय है, तो समाधान को 'शामिल' से एचआर विभाग के साथ अधिक करना है। या आप गतिशील रूप से उपयोगकर्ता योगदान फ़ाइलों सहित हैं? तो यह मुद्दा शायद आपकी चिंताओं का कम से कम है। – deceze