التعامل مع الملفات الكبيرة باستخدام 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 بدلاً من ذلك.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3