मेमोरी थकावट के बिना PHP का उपयोग करके बड़ी फ़ाइलों को संभालना
PHP में बड़ी फ़ाइलों को पढ़ना और संसाधित करना मेमोरी सीमाओं के कारण चुनौतीपूर्ण हो सकता है। अनुमति से अधिक मेमोरी का उपभोग करने वाली बड़ी फ़ाइलों से निपटने के दौरान file_get_contents() फ़ंक्शन "मेमोरी समाप्त हो गई" त्रुटि को ट्रिगर कर सकता है।
मेमोरी आवंटन को समझना
file_get_contents का उपयोग करते समय( ), संपूर्ण फ़ाइल को मेमोरी में एक स्ट्रिंग के रूप में पढ़ा और संग्रहीत किया जाता है। बड़ी फ़ाइलों के लिए, यह आवंटित मेमोरी को पार कर सकता है और त्रुटि का कारण बन सकता है।
वैकल्पिक दृष्टिकोण: खंडित फ़ाइल पढ़ना
इस समस्या से बचने के लिए, वैकल्पिक तरीकों का उपयोग करने पर विचार करें फ़ाइल को टुकड़ों में पढ़ने के लिए fopen() और fread() के रूप में। यह आपको मेमोरी उपयोग को प्रभावी ढंग से प्रबंधित करते हुए, एक समय में फ़ाइल के छोटे अनुभागों को संसाधित करने की अनुमति देता है। यहां एक फ़ंक्शन है जो इस दृष्टिकोण को लागू करता है:
function file_get_contents_chunked($file, $chunk_size, $callback)
{
try {
$handle = fopen($file, "r");
$i = 0;
while (!feof($handle)) {
call_user_func_array($callback, [fread($handle, $chunk_size), &$handle, $i]);
$i ;
}
fclose($handle);
return true;
} catch (Exception $e) {
trigger_error("file_get_contents_chunked::" . $e->getMessage(), E_USER_NOTICE);
return false;
}
}
उदाहरण उपयोग
इस फ़ंक्शन का उपयोग करने के लिए, एक कॉलबैक परिभाषित करें जो चंक को संभालता है और आवश्यक पैरामीटर प्रदान करता है:
$success = file_get_contents_chunked("my/large/file", 4096, function ($chunk, &$handle, $iteration) {
/* Do something with the chunk */
});
अतिरिक्त विचार
एक अन्य अनुकूलन जटिल नियमित अभिव्यक्तियों का उपयोग करने से बचना है, जो बड़े इनपुट पर लागू होने पर महत्वपूर्ण मेमोरी का उपभोग कर सकते हैं। इसके बजाय स्ट्रॉप्स, सबस्ट्र और विस्फोट जैसे मूल स्ट्रिंग फ़ंक्शंस का उपयोग करने पर विचार करें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3