Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Menstrim Fail Besar dengan Cekap dalam PHP untuk Mengelakkan Keletihan Memori?

Bagaimanakah Saya Boleh Menstrim Fail Besar dengan Cekap dalam PHP untuk Mengelakkan Keletihan Memori?

Patricia Arquette
Lepaskan: 2024-12-05 14:38:15
asal
496 orang telah melayarinya

How Can I Efficiently Stream Large Files in PHP to Avoid Memory Exhaustion?

Menstrim Fail Besar dengan PHP

Dalam senario di mana anda ingin menawarkan pengguna muat turun satu kali fail besar-besaran dengan selamat tanpa menggunakan yang berlebihan ingatan, persoalan timbul: bagaimana anda boleh menstrim fail dengan cekap?

Pendekatan konvensional menggunakan file_get_contents() untuk mendapatkan semula keseluruhan kandungan fail secara serentak terbukti tidak praktikal kerana potensi had memori. Untuk menangani isu ini, pertimbangkan untuk menggunakan kaedah penstriman yang menghantar data dalam ketulan terurus.

Satu penyelesaian, seperti yang dicadangkan dalam sumber dalam talian, ialah menggunakan fungsi readfile_chunked(). Fungsi ini membolehkan anda menentukan saiz ketulan dan membaca dan mengeluarkan kandungan fail secara berulang, mengelakkan beban memori yang berlebihan.

Sampel kod yang disediakan menunjukkan pelaksanaan pendekatan ini:

// Define the chunk size in bytes
define('CHUNK_SIZE', 1024*1024);

// Function to read a file and display its content chunk by chunk
function readfile_chunked($filename, $retbytes = TRUE) {
    $buffer = '';
    $cnt = 0;
    $handle = fopen($filename, 'rb');

    if ($handle === false) {
        return false;
    }

    while (!feof($handle)) {
        $buffer = fread($handle, CHUNK_SIZE);
        echo $buffer;
        ob_flush();
        flush();

        if ($retbytes) {
            $cnt += strlen($buffer);
        }
    }

    $status = fclose($handle);

    if ($retbytes & $status) {
        return $cnt; // Return the number of bytes delivered.
    }

    return $status;
}

// Restrict access to logged-in users
if ($logged_in) {
    $filename = 'path/to/your/file';
    $mimetype = 'mime/type';
    header('Content-Type: '.$mimetype );
    readfile_chunked($filename);
} else {
    echo 'Access denied.';
}
Salin selepas log masuk

Pendekatan ini menstrim fail dalam bahagian yang boleh diurus, mengelakkan kekangan memori dan menghantar fail kepada pengguna dengan cekap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Fail Besar dengan Cekap dalam PHP untuk Mengelakkan Keletihan Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan