Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Menstrim Fail Besar dalam PHP Tanpa Melebihi Had Memori?

Bagaimanakah Saya Boleh Menstrim Fail Besar dalam PHP Tanpa Melebihi Had Memori?

Barbara Streisand
Lepaskan: 2024-12-06 03:21:11
asal
617 orang telah melayarinya

How Can I Stream Large Files in PHP Without Exceeding Memory Limits?

Menstrim Fail Besar dengan PHP

Apabila berurusan dengan fail besar yang melebihi had memori PHP, ia menjadi perlu untuk menstrim fail terus ke pelayar pengguna tanpa memuatkannya sepenuhnya ke dalam memori. Teknik ini membolehkan pengendalian data besar yang cekap tanpa menyebabkan masalah keletihan memori.

Satu pendekatan untuk menstrim fail ialah dengan menggunakan fungsi file_get_contents(). Walau bagaimanapun, kaedah ini memerlukan keseluruhan fail dimuatkan ke dalam memori, yang tidak sesuai untuk fail besar.

Untuk mengatasi had ini, kami boleh melaksanakan pendekatan chunking, di mana fail dibahagikan kepada ketulan yang lebih kecil dan distrim secara berurutan. Berikut ialah pendekatan yang disyorkan:

define('CHUNK_SIZE', 1024*1024); // Size (in bytes) of tiles chunk

// 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 num. bytes delivered like readfile() does.
    }

    return $status;
}

if (/* User is 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

Dalam kod ini, fungsi readfile_chunked() membahagikan fail kepada ketulan 1MB dan menstrim setiap bahagian ke penyemak imbas pengguna. Pencairan penimbal output memastikan bahawa ketulan dihantar serta-merta tanpa menunggu keseluruhan fail dibaca.

Dengan melaksanakan pendekatan ini, anda boleh menstrim fail besar dengan cekap kepada pengguna tanpa menghadapi masalah memori.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Fail Besar dalam PHP Tanpa Melebihi Had 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