जारी रखें, मुझे पता है कि, इसकी परिभाषा के अनुसार, एक घातक अपवाद निष्पादन को मारना है, और इसे दबाया नहीं जाना चाहिए, लेकिन यहां समस्या है।एक घातक अपवाद पकड़ें और
मैं एक ऐसी स्क्रिप्ट चला रहा हूं जो डीबी में लगभग 10,000 पृष्ठों को स्क्रैप, पार्स और स्टोर करता है। इसमें कुछ घंटे लगते हैं, और दुर्लभ मामलों में (1000 में 1) एक पृष्ठ पार्सिंग में विफल रहता है और घातक अपवाद फेंकता है।
वर्तमान में, मैं यह कर रहा हूँ:
for ($i=0;$i<$count;$i++)
{
$classObject = $classObjects[$i];
echo $i . " : " . memory_get_usage(true) . "\n";
$classDOM = $scraper->scrapeClassInfo($classObject,$termMap,$subjectMap);
$class = $parser->parseClassInfo($classDOM);
$dbmanager->storeClassInfo($class);
unset($classDOM,$class,$classObject);
}
मैं की तरह
for ($i=0;$i<$count;$i++)
{
$classObject = $classObjects[$i];
echo $i . " : " . memory_get_usage(true) . "\n";
try
{
$classDOM = $scraper->scrapeClassInfo($classObject,$termMap,$subjectMap);
$class = $parser->parseClassInfo($classDOM);
$dbmanager->storeClassInfo($class);
unset($classDOM,$class,$classObject);
}
catch (Exception $e)
{
//log the error here
continue;
}
}
कुछ कोड ऊपर fatal exceptions
के लिए काम नहीं करता है कर सकते हैं।
क्या ऐसा कुछ करना संभव होगा: यदि मैंने मुख्य लूप को विधि में ले जाया है, और फिर register_shutdown_function
से विधि को कॉल करें?
इस तरह:
Fatal error: Call to a member function find() on a non-object in ...
मैं इस उपरोक्त संदेश जब एक पृष्ठ को पार्स करने योग्य नहीं है विधि मैं द्वारा की उम्मीद:
function do($start)
{
for($i=$start;$i<$count;$i++)
{
//do stuff here
}
}
register_shutdown_function('shutdown');
function shutdown()
{
do();
}
यह संदेश है कि उत्पादन जब निष्पादन बंद हो जाता है उपयोग कर रहा हूँ मैं बस उस पृष्ठ को छोड़कर लूप के अगले पुनरावृत्ति पर जाने के साथ ठीक हूं।
'घातक अपवाद' क्या है? आपका कैच (अपवाद $ ई) कैसे काम नहीं कर रहा है? – cspray
दरअसल ..... क्या कोई ऐसा कुछ फेंक रहा है जो 'अपवाद' का विस्तार नहीं करता है? – Wrikken
... इस मामले में, क्या आप सिर्फ '} पकड़ नहीं सकते ($ e) {'? – DaveRandom