Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk menutup muat turun pelayar menggunakan php

Bagaimana untuk menutup muat turun pelayar menggunakan php

PHPz
PHPzasal
2023-03-29 11:33:45616semak imbas

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.

  1. Menggunakan pengepala HTTP

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 = &#39;sample.pdf&#39;;

header(&#39;Content-type: application/pdf&#39;);
header(&#39;Content-Disposition: inline; filename="&#39; . $file . &#39;"&#39;);
header(&#39;Content-Transfer-Encoding: binary&#39;);
header(&#39;Content-Length: &#39; . filesize($file));
header(&#39;Accept-Ranges: bytes&#39;);

@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.

  1. Mengendalikan jenis fail yang berbeza

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
PDF 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 = &#39;sample.jpg&#39;;

header(&#39;Content-type: image/jpeg&#39;);
header(&#39;Content-Disposition: inline; filename="&#39; . $file . &#39;"&#39;);
header(&#39;Content-Transfer-Encoding: binary&#39;);
header(&#39;Content-Length: &#39; . filesize($file));
header(&#39;Accept-Ranges: bytes&#39;);

@readfile($file);
?>
  1. Muat turun fail

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 = &#39;sample.zip&#39;;
$filename = &#39;download.zip&#39;;

header(&#39;Content-type: application/zip&#39;);
header(&#39;Content-Disposition: attachment; filename="&#39; . $filename . &#39;"&#39;);
header(&#39;Content-Transfer-Encoding: binary&#39;);
header(&#39;Content-Length: &#39; . filesize($file));
header(&#39;Accept-Ranges: bytes&#39;);

@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.

  1. Memproses fail besar

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 = &#39;bigfile.zip&#39;;
$filename = &#39;download.zip&#39;;
$chunksize = 4096;

header(&#39;Content-type: application/zip&#39;);
header(&#39;Content-Disposition: attachment; filename="&#39; . $filename . &#39;"&#39;);
header(&#39;Content-Transfer-Encoding: binary&#39;);
header(&#39;Accept-Ranges: bytes&#39;);
header(&#39;Content-Length: &#39; . filesize($file));

$handle = fopen($file, &#39;rb&#39;);

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!

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