त्रुटि उत्पन्न करने के दौरान PHP पर संभव अपवाद कैसे प्राप्त करें?अपर्याप्त अपवाद कैसे पकड़ें?
12
A
उत्तर
8
नहीं, आप इसे पकड़ नहीं सकते, unserialize()
अपवाद नहीं फेंकता है।
यदि पारित स्ट्रिंग अचूक नहीं है, तो FALSE वापस कर दिया गया है और E_NOTICE जारी किया गया है।
आप सभी त्रुटियों को संभालने के लिए एक कस्टम अपवाद हैंडलर सेट कर सकते हैं:
function exception_error_handler($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
3
Convert सभी पीएचपी त्रुटियों अपवादों को (चेतावनी नोटिस आदि)। उदाहरण here है।
9
एक आसान तरीका है:
$ret = @unserialize($foo);
if($ret === null){
//Error case
}
लेकिन यह सबसे आधुनिक समाधान नहीं है।
कस्टम त्रुटि/अपवाद हैंडलर (न केवल इस मामले के लिए) होने से पहले सबसे अच्छा तरीका बताया गया है। लेकिन आप जो कर रहे हैं उसके आधार पर यह अधिक हो सकता है।
2
एक पूर्ण समाधान निम्नलिखित दिखाई देगा:
<?php
// As mentioned in the top answer, we need to set up
// some general error handling
function exception_error_handler($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
// Note, there are two types of way it could fail,
// the fail2 fail is when try to unserialise just
// false, it should fail. Also note, what you
// do when something fails is up to your app.
// So replace var_dump("fail...") with your
// own app logic for error handling
function unserializeSensible($value) {
$caught = false;
try {
$unserialised = unserialize($value);
} catch(ErrorException $e) {
var_dump("fail");
$caught = true;
}
// PHP doesn't have a try .. else block like Python
if(!$caught) {
if($unserialised === false && $value !== serialize(false)) {
var_dump("fail2");
} else {
var_dump("pass");
return $unserialised;
}
}
}
unserializeSensible('b:0;'); // Should pass
unserializeSensible('b:1;'); // Should pass
unserializeSensible('a:2:{s:1:"a";b:0;s:1:"b";s:3:"foo";}'); // Should pass
unserializeSensible('a:2:{s:1:"a";b:0;s:1:"b";s:3:1111111111111111;}'); // Should fail
unserializeSensible(123); // Should fail
unserializeSensible("Gday"); // Should fail
unserializeSensible(false); // Should fail2
unserializeSensible(true); // Should fail
प्रलेखन प्रति
संबंधित मुद्दे
- 1. वाक्यविन्यास अपवाद को कैसे पकड़ें
- 2. UrlFetchApp.fetch अपवाद को कैसे पकड़ें
- 3. एमवीसी व्यू के अपवाद को कैसे पकड़ें?
- 4. एक घातक अपवाद पकड़ें और
- 5. जावास्क्रिप्ट कोशिश/पकड़ें: त्रुटियां या अपवाद?
- 6. लूप के अंदर अपवाद कब पकड़ें?
- 7. अपवाद पकड़ें, इनपुट या दोनों मान्य करें?
- 8. अपवादों को कैसे पकड़ें
- 9. एंड्रॉइड: रिक्त स्थान के साथ जेसन स्ट्रिंग "अपर्याप्त ऑब्जेक्ट" अपवाद
- 10. अज्ञात अपवाद को कैसे पकड़ें और इसे प्रिंट करें
- 11. Clojurescript में किसी भी जावास्क्रिप्ट अपवाद को कैसे पकड़ें?
- 12. विज़ुअल सी ++ कंसोल ऐप में कंट्रोल-सी अपवाद कैसे पकड़ें?
- 13. पायथन: इस तरह के अपवाद को कैसे पकड़ें?
- 14. इंडेंटेशन एरर को कैसे पकड़ें
- 15. डिकंप्रेस IOError को कैसे पकड़ें?
- 16. pg_connect() फ़ंक्शन त्रुटि कैसे पकड़ें?
- 17. PHP ldap_modify अपर्याप्त पहुंच
- 18. आईफ़्रेम अपवादों को पकड़ें
- 19. इसे फिर से फेंकने के लिए अपवाद क्यों पकड़ें?
- 20. इनपुटमैस्चैच अपवाद के साथ प्रयास/पकड़ें अनंत लूप
- 21. दबाएं या पकड़ें अपवाद जो कभी नहीं हो सकता है?
- 22. नेस्टेड कोशिश करें ... सी ++ अपवाद हैंडलर के अंदर पकड़ें?
- 23. एक exisiting, अपर्याप्त डेटा फ्रेम
- 24. कोडइग्निटर - डीबी त्रुटियों को कैसे पकड़ें?
- 25. स्कैला - निकालने वाला अपर्याप्त भ्रम
- 26. सबसे व्युत्पन्न अपवादों को पकड़ें?
- 27. नेस्टेड कोशिश करें/पकड़ें
- 28. "कोशिश करें ... पकड़ें" ब्लॉक में कोड कैसे एक अनचाहे अपवाद फेंक सकता है?
- 29. एफ # में चेतावनी के बिना किसी अपवाद (सिस्टम.एक्सप्शन) को कैसे पकड़ें?
- 30. जावा में ब्लॉक वैरिएबल चेतावनी को पकड़ें
: मामले में स्ट्रिंग पारित unserializeable नहीं है, गलत दिया जाता है। सौभाग्य से कुछ लोग 'serialize (false) ' – gfaceless
करेंगे" यदि पारित स्ट्रिंग अचूक नहीं है, तो FALSE वापस कर दिया गया है ** और E_NOTICE जारी किया गया है **। " एक ई_ भी फेंक दिया जाता है। – zedee