मैं कमांड लाइन से नीचे PHP कोड चला रहा हूं। मुद्दा यह है कि इसकी याददाश्त इसकी तुलना में कहीं अधिक है। मैं नहीं कर सकता, मेरे जीवन के लिए, पता लगाएं कि स्मृति कहाँ खाई जा रही है।PHP स्क्रिप्ट मेमोरी लीक मुद्दा
for ($i=0;$i<100;$i++)
{
$classObject = $classObjects[$i];
echo $i . " : " . memory_get_usage(true) . "\n";
$classDOM = $scraper->scrapeClassInfo($classObject,$termMap,$subjectMap);
unset($classDOM);
}
मेरे अनुसार, स्मृति मेरी स्क्रिप्ट से भस्म पाश के हर यात्रा के बाद कम या ज्यादा स्थिर रहना चाहिए। $scraper->scrapeClassInfo()
द्वारा खपत कोई भी स्मृति मुक्त होनी चाहिए जब उसके सदस्य गुंजाइश से बाहर हो जाएं।
यह मुझे प्राप्त आउटपुट फ़ाइल है। संक्षिप्तता के लिए, मैं उत्पादन के हर 10 वीं लाइन दिखा रही है:
0 : 5767168
10 : 12058624
20 : 18350080
30 : 24903680
40 : 30932992
50 : 37748736
60 : 43778048
70 : 49807360
80 : 55836672
90 : 62914560
97 : 66846720
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 44 bytes) in /home/content/60/8349160/html/drexel/simple_html_dom.php on line 1255
अंत में, जहाँ तक मैं देख सकते हैं, क्या $scraper->scrapeClassInfo()
वास्तव में अपराधी नहीं होना चाहिए क्या कर रही है, लेकिन सिर्फ मामले में, यहाँ कोड है:
function scrapeClassInfo($class,$termMap,$subjectMap)
{
$ckfile = tempnam ("/tmp", "CURLCOOKIE");
$ckfile2 = tempnam ("/tmp", "CURLCOOKIE2");
$ckfile3 = tempnam ("/tmp", "CURLCOOKIE3");
$termpage = $termMap[$class['termcode']];
$subjectpage = $subjectMap[$class['subjectcode']];
$classpage = $class['classlink'];
//hit the main page and get cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $this->mainURL);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_exec($ch);
curl_close($ch);
//hit the term page and get cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $termpage);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_exec($ch);
curl_close($ch);
//hit the subject page and get cookie
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile3);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $subjectpage);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_exec($ch);
curl_close($ch);
//hit the class page and scrape
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile3);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $classpage);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
return str_get_html($result);
}
विधि अंतिम पंक्ति में कहा जाता है, str_get_html()
Simple HTML DOM Parser
के एक सदस्य इससे कोई फर्क करना चाहिए है, यह कैसे मैं अपने स्क्रिप्ट बोल रहा हूँ है:
/usr/local/php5/bin/php index.php 2>&1 1>output
बग क्या है? –
जब मैंने "CURLOPT_RETURNTRANSFER को सत्य पर सेट करना" लिखा था, तो मुझे लिखना था कि "CURLOPT_RETURNTRANSFER को वास्तविक कारणों से भारी मेमोरी लीक सेट करना" लिखना है। संपादित। – xbonez
आह। स्पष्टीकरण के लिए +1। –