Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana Memproses Rentetan Besar Tanpa Melebihi Had Memori?

Bagaimana Memproses Rentetan Besar Tanpa Melebihi Had Memori?

Linda Hamilton
Linda Hamiltonasal
2024-11-13 06:37:021052semak imbas

How to Process Huge Strings Without Exceeding Memory Limits?

Memanipulasi Rentetan Melebihi Had Memori

Apabila mengendalikan rentetan yang terlalu besar, seperti dalam kes fail CSV 30 juta aksara, ralat peruntukan memori boleh timbul. Untuk menangani isu ini, elakkan daripada memuatkan keseluruhan rentetan ke dalam memori. Sebaliknya, gunakan strategi alternatif untuk memproses data tanpa melebihi had memori.

Pendekatan Alternatif:

  1. Gunakan CURLOPT_FILE: Gunakan CURLOPT_FILE pilihan bersama CURL untuk menentukan fail sasaran di mana data harus ditulis. Pendekatan ini membolehkan untuk menulis data terus ke fail, mengelakkan kekangan memori.
  2. Buat Pembungkus Strim Tersuai: Dengan mencipta pembungkus strim tersuai, anda boleh mengendalikan data dalam memori apabila ia tiba daripada menyimpan keseluruhan rentetan dalam ingatan. Kaedah ini membolehkan anda memproses data dalam ketulan, mengurangkan penggunaan memori.

Contoh Pelaksanaan Menggunakan Stream Wrapper:

class MyStream {
    protected $buffer;

    function stream_open($path, $mode, $options, &$opened_path) {
        // Has to be declared, it seems...
        return true;
    }

    public function stream_write($data) {
        $lines = explode("\n", $data);
        $lines[0] = $this->buffer . $lines[0];
        $nb_lines = count($lines);
        $this->buffer = $lines[$nb_lines-1];
        unset($lines[$nb_lines-1]);
        var_dump($lines); // Process data as needed
        echo '<hr />';
        return strlen($data);
    }
}

// Register custom stream
stream_wrapper_register("test", "MyStream");

// Configure curl with target "file"
$fp = fopen("test://MyTestVariableInMemory", "r+");
curl_setopt($ch, CURLOPT_FILE, $fp); // Data will be sent directly to stream

curl_exec($ch);
curl_close($ch); // Don't forget to close file / stream
fclose($fp);

Strategi ini membolehkan anda memproses data secara berperingkat apabila ia tiba, mengelakkan isu peruntukan memori.

Atas ialah kandungan terperinci Bagaimana Memproses Rentetan Besar Tanpa Melebihi Had Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn