Dalam pembangunan web, kadangkala ia perlu untuk memaparkan fail dalam penyemak imbas dan bukannya membenarkan penyemak imbas memuat turun fail secara setempat. Proses ini boleh dicapai melalui kod PHP, dan artikel ini akan memperincikan cara menggunakan PHP untuk mematikan muat turun penyemak imbas.
Pengepala HTTP ialah sebahagian daripada permintaan dan respons HTTP dan mengandungi maklumat yang diperlukan untuk respons HTTP. Kita boleh menggunakan fungsi pengepala dalam PHP untuk menetapkan fail pengepala HTTP untuk membuka fail dalam penyemak imbas.
Berikut ialah contoh mudah yang menunjukkan cara menggunakan fungsi pengepala untuk memaparkan fail PDF dalam penyemak imbas:
<?php $file = 'sample.pdf'; header('Content-type: application/pdf'); header('Content-Disposition: inline; filename="' . $file . '"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($file)); header('Accept-Ranges: bytes'); @readfile($file); ?>
Kod ini mula-mula membuka fail PDF, dan kemudian menggunakan pengepala berfungsi untuk menetapkan fail pengepala HTTP. Antaranya, Content-type memberitahu penyemak imbas bahawa kandungan respons adalah dalam format PDF Content-Disposition: inline membolehkan penyemak imbas memaparkan fail sebaris dalam halaman: perduaan menentukan bahawa fail dipindahkan dalam binari mod. Kandungan -Length menentukan saiz data respons, dan Accept-Ranges: bait menentukan bahawa pelayan menyokong permintaan dalam julat bait.
Akhir sekali, gunakan fungsi readfile untuk membaca kandungan fail dan memaparkannya dalam pelayar dalam format HTML.
Selain PDF, kami juga boleh menggunakan fungsi pengepala untuk memaparkan jenis fail lain, seperti gambar, audio, video, dsb. . Hanya tentukan jenis fail dalam Jenis kandungan.
Berikut ialah beberapa jenis fail biasa dan nilai jenis Kandungannya:
文件类型 | Content-type |
---|---|
图片 | image/jpeg, image/png, image/gif, image/bmp |
application/pdf | |
文本文件 | text/plain |
音频 | audio/mpeg, audio/ogg, audio/wav |
视频 | video/mp4, video/ogg, video/webm |
Berikut ialah contoh yang menunjukkan cara memaparkan imej dalam penyemak imbas:
<?php $file = 'sample.jpg'; header('Content-type: image/jpeg'); header('Content-Disposition: inline; filename="' . $file . '"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($file)); header('Accept-Ranges: bytes'); @readfile($file); ?>
Jika anda perlu memuat turun fail dan bukannya memaparkannya dalam penyemak imbas, kami boleh menggunakan pengepala Content-Disposition untuk memberitahu penyemak imbas memuat turun fail.
Berikut ialah contoh yang menunjukkan cara memuat turun fail dalam penyemak imbas:
<?php $file = 'sample.zip'; $filename = 'download.zip'; header('Content-type: application/zip'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($file)); header('Accept-Ranges: bytes'); @readfile($file); ?>
Dalam contoh ini, kami menetapkan pengepala Pelupusan Kandungan untuk mengarahkan penyemak imbas memuat turun fail. Parameter nama fail digunakan untuk menentukan nama fail fail yang dimuat turun.
Untuk fail besar, kita perlu mempertimbangkan isu prestasi dan tidak boleh membaca keseluruhan fail ke dalam memori pada satu masa. Masalah ini boleh diselesaikan melalui penimbal keluaran PHP (ob_*) dan fungsi flush. Kaedah khusus adalah untuk mengeluarkan fail pengepala HTTP dahulu, kemudian mengeluarkan blok kandungan fail demi blok, dan menggunakan fungsi siram untuk menolak kandungan ke penyemak imbas untuk setiap bahagian output.
Berikut ialah contoh yang menunjukkan cara memproses fail besar:
<?php $file = 'bigfile.zip'; $filename = 'download.zip'; $chunksize = 4096; header('Content-type: application/zip'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Transfer-Encoding: binary'); header('Accept-Ranges: bytes'); header('Content-Length: ' . filesize($file)); $handle = fopen($file, 'rb'); while (!feof($handle)) { $buffer = fread($handle, $chunksize); echo $buffer; ob_flush(); flush(); } fclose($handle); ?>
Dalam contoh ini, kami membaca kandungan fail 4096 bait setiap kali dan kemudian mengeluarkannya sekatan demi blok. Perhatikan bahawa di dalam gelung, kami menggunakan fungsi ob_flush dan flush untuk menolak kandungan penimbal ke penyemak imbas.
Ringkasan: Gunakan PHP untuk mematikan muat turun penyemak imbas
Dalam artikel ini, kami memperkenalkan cara menggunakan PHP untuk mematikan muat turun penyemak imbas, termasuk memaparkan fail, mengendalikan jenis fail yang berbeza, memuat turun fail dan memproses fail besar. Pengetahuan ini sangat penting untuk pembangun web saya harap artikel ini dapat membantu anda.
Atas ialah kandungan terperinci Bagaimana untuk menutup muat turun pelayar menggunakan php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!