"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मेमोरी ख़त्म हुए बिना PHP में बड़ी फ़ाइलों को कुशलतापूर्वक कैसे संभालें?

मेमोरी ख़त्म हुए बिना PHP में बड़ी फ़ाइलों को कुशलतापूर्वक कैसे संभालें?

2024-10-31 को प्रकाशित
ब्राउज़ करें:699

How to Handle Large Files in PHP Efficiently without Causing Memory Exhaustion?

मेमोरी थकावट के बिना 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 */
});

अतिरिक्त विचार

एक अन्य अनुकूलन जटिल नियमित अभिव्यक्तियों का उपयोग करने से बचना है, जो बड़े इनपुट पर लागू होने पर महत्वपूर्ण मेमोरी का उपभोग कर सकते हैं। इसके बजाय स्ट्रॉप्स, सबस्ट्र और विस्फोट जैसे मूल स्ट्रिंग फ़ंक्शंस का उपयोग करने पर विचार करें।

विज्ञप्ति वक्तव्य यह आलेख यहां पुनर्मुद्रित है: 1729143617 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3