Saya ingin meminta file untuk diunduh saat pengguna mengunjungi halaman web dengan PHP. Saya pikir itu ada hubungannya dengan file_get_contents
, tetapi saya tidak yakin bagaimana menjalankannya.
$url = "http://example.com/go.exe";
Setelah mengunduh file header(location)
dengannya tidak mengarahkan ke halaman lain. Itu berhenti begitu saja.
Jawaban:
Baca dokumen tentang readfile fungsi PHP bawaan
Pastikan juga untuk menambahkan jenis konten yang tepat berdasarkan aplikasi file / zip, aplikasi / pdf, dll. - tetapi hanya jika Anda tidak ingin memicu dialog simpan-sebagai.
sumber
Atau, jika file tidak dapat dibuka dengan browser, Anda dapat menggunakan
Location
header:sumber
$file
(yang berisi bagian http) tetapi nama file yang valid.benar
atau lebih baik untuk jenis file exe
sumber
Tampilkan file Anda terlebih dahulu dan atur nilainya menjadi url.
index.php
download.php
sumber
Jika Anda harus mengunduh file dengan ukuran lebih besar dari batas memori yang diizinkan (
memory_limit
pengaturan ini), yang akan menyebabkanPHP Fatal error: Allowed memory size of 5242880 bytes exhausted
kesalahan, Anda dapat melakukan ini:sumber
ob_flush()
mungkin ada kesalahan: ob_flush (): gagal membersihkan buffer. Tidak ada buffer untuk disiram . membungkusnya denganif (ob_get_level() > 0) {ob_flush();}
(Referensi stackoverflow.com/a/9182133/128761 )Modifikasi jawaban yang diterima di atas, yang juga mendeteksi jenis MIME dalam runtime:
sumber
Kode berikut adalah cara yang benar untuk mengimplementasikan layanan unduhan di php seperti yang dijelaskan dalam tutorial berikut
sumber
file_name
danfilePath
. Praktik pengkodean yang tidak terlalu baik. Apalagi tanpa penjelasan. Menautkan ke tutorial eksternal tidak membantu.coba ini:
sumber
http://php.net/manual/en/function.readfile.php
Hanya itu yang Anda butuhkan. "Monkey.gif" berubah menjadi nama file Anda. Jika Anda perlu mengunduh dari server lain, "monkey.gif" ubah menjadi " http://www.exsample.com/go.exe "
sumber
Anda juga dapat melakukan streaming unduhan yang akan menghabiskan lebih sedikit sumber daya. contoh:
Dalam contoh di atas, saya mengunduh test.zip (yang sebenarnya adalah zip studio android di mesin lokal saya). php: // output adalah aliran hanya-tulis (umumnya digunakan oleh echo atau print). setelah itu, Anda hanya perlu menyetel header yang diperlukan dan memanggil stream_copy_to_stream (sumber, tujuan). metode stream_copy_to_stream () bertindak sebagai pipa yang mengambil input dari aliran sumber (aliran baca) dan menyalurkannya ke aliran tujuan (aliran tulis) dan juga menghindari masalah kehabisan memori yang diizinkan sehingga Anda benar-benar dapat mengunduh file yang lebih besar daripada PHP Anda
memory_limit
.sumber
Jawaban di atas saya berhasil. Tapi, saya ingin menyumbangkan metode tentang bagaimana melakukannya menggunakan GET
di halaman html / php Anda
dan
download.php
berisiini harus bekerja pada semua jenis file. ini tidak diuji menggunakan POST, tetapi dapat berhasil.
sumber