Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Memaksa Muat Turun Fail dengan Amanah Menggunakan Fungsi `header()` PHP?

Bagaimanakah Saya Boleh Memaksa Muat Turun Fail dengan Amanah Menggunakan Fungsi `header()` PHP?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-29 02:08:11630semak imbas

How Can I Reliably Force File Downloads Using PHP's `header()` Function?

Paksa Muat Turun Fail Menggunakan Fungsi pengepala() PHP

Apabila cuba menawarkan muat turun fail kepada pengguna dari pelayan anda, anda mungkin menghadapi cabaran yang tidak dijangka . Dalam PHP, fungsi header() biasanya digunakan untuk tujuan ini, tetapi pelbagai contoh kod selalunya memberikan hasil yang mengecewakan.

Sebagai contoh, pertimbangkan kod berikut:

$size = filesize("Image.png");

header('Content-Description: File Transfer');
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="Image.png"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size);
readfile("Image.png");

Walaupun menetapkan pengepala yang diperlukan, termasuk Pelupusan Kandungan yang betul untuk mencetuskan dialog muat turun fail, tingkah laku yang diingini gagal berlaku.

Penyelesaian:

Untuk membetulkan isu ini, pastikan pengepala Jenis Kandungan ditetapkan kepada "aplikasi/oktet-strim" dan bukannya "imej/png " atau mana-mana jenis mime lain. Sebagai contoh, pengepala berikut harus memaksa muat turun fail secara konsisten:

$quoted = sprintf('"%s"', addcslashes(basename($file), '"\'));
$size   = filesize($file);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $quoted);
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $size);

Dengan menggunakan pengepala ini, anda seharusnya boleh memaksa muat turun fail daripada aplikasi web PHP anda dengan pasti.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memaksa Muat Turun Fail dengan Amanah Menggunakan Fungsi `header()` 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