"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية التعامل مع الملفات الكبيرة في PHP بكفاءة دون التسبب في استنفاد الذاكرة؟

كيفية التعامل مع الملفات الكبيرة في PHP بكفاءة دون التسبب في استنفاد الذاكرة؟

تم النشر بتاريخ 2024-10-31
تصفح:212

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 */
});

اعتبارات إضافية

التحسين الآخر هو تجنب استخدام التعبيرات العادية المعقدة، والتي يمكن أن تستهلك ذاكرة كبيرة عند تطبيقها على المدخلات الكبيرة. فكر في استخدام دوال السلسلة الأصلية مثل strpos، وsubstr، وBlade بدلاً من ذلك.

بيان الافراج أعيد طبع هذه المقالة على: 1729143617 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3