Pemprosesan Fail Menggunakan File_get_contents Menghadapi Keletihan Memori
Apabila bekerja dengan fail besar dalam PHP, menggunakan file_get_contents berfungsi untuk mengambil keseluruhan kandungan fail ke dalam pembolehubah boleh menyebabkan ralat keletihan ingatan. Ini kerana pembolehubah yang mengandungi kandungan fail berada dalam ingatan, dan untuk fail yang besar, had memori yang diperuntukkan boleh dilebihi.
Untuk mengatasi isu ini, pendekatan yang lebih cekap ialah menggunakan penunjuk fail dan memproses fail dalam ketulan. Dengan cara ini, hanya bahagian semasa fail disimpan dalam ingatan pada bila-bila masa.
Berikut ialah fungsi tersuai yang melaksanakan pemprosesan fail bongkah ini:
<code class="php">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; } }</code>
Untuk menggunakan fungsi ini, tentukan fungsi panggil balik untuk mengendalikan setiap bahagian data:
<code class="php">$success = file_get_contents_chunked("my/large/file", 4096, function($chunk, &$handle, $iteration) { // Perform file processing here });</code>
Selain itu, pertimbangkan untuk memfaktorkan semula operasi regex anda untuk menggunakan fungsi rentetan asli seperti strpos, substr, trim dan explode. Ini boleh meningkatkan prestasi dengan ketara apabila bekerja dengan fail besar.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Keletihan Memori Semasa Memproses Fail Besar dalam PHP Menggunakan File_get_contents?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!