In this tutorial you will learn how to force download a file using PHP. Downloading Files with PHPNormally, you don't necessarily need to use any server side scripting language like PHP to download images, zip files, pdf documents, exe files, etc. If such kind of file is stored in a public accessible folder, you can just create a hyperlink pointing to that file, and whenever a user click on the link, browser will automatically downloads that file.
Clicking a link that points to a PDF or an Image file will not cause it to download to your hard drive directly. It will only open the file in your browser. Further you can save it to your hard drive. However, zip and exe files are downloaded automatically to the hard drive by default. Forcing a Download Using PHPYou can force images or other kind of files to download directly to the user's hard drive using the PHP Let's create a file named "image-gallery.php" and place the following code inside it.
If you see the above example code carefully, you'll find the download link pints to a "download.php" file, the URL also contains image file name as a query string. Also, we've used PHP Here's the complete code of "download.php" file, which force image download.
Similarly, you can force download other files formats like word doc, pdf files, etc. The regular expression in the above example (line no-8) will simply not allow those files whose name starts or ends with a dot character ( Please check out the tutorial on regular expressions to learn the regular expressions in details. Saya memberikan tautan file pdf di halaman web saya untuk diunduh, seperti di bawah ini
Masalahnya adalah ketika pengguna mengklik tautan ini
Tapi saya ingin selalu muncul untuk pengguna untuk diunduh, terlepas dari "Adobe acrobat" diinstal atau tidak. Tolong beritahu saya bagaimana saya bisa melakukan ini? Alih-alih menautkan ke file .PDF, lakukan sesuatu seperti
yang menghasilkan header khusus, membuka PDF (binary safe) dan mencetak data ke browser pengguna, lalu mereka dapat memilih untuk menyimpan PDF meskipun pengaturan browser mereka. Pdf_server.php akan terlihat seperti ini:
PS: dan jelas menjalankan beberapa pemeriksaan kewarasan pada variabel "file" untuk mencegah orang mencuri file Anda seperti tidak menerima ekstensi file, menolak garis miring, tambahkan .pdf ke nilai Ini adalah masalah umum tetapi hanya sedikit orang yang tahu ada solusi HTML 5 sederhana:
Di mana
Kompatibilitas: Saya menguji ini pada Firefox 21 dan Iron, keduanya bekerja dengan baik. Ini mungkin tidak berfungsi pada browser HTML5-tidak kompatibel atau usang. Satu-satunya browser yang saya uji yang tidak memaksa unduhan adalah IE ... Periksa kompatibilitas di sini: http://caniuse.com/#feat=download Jangan loop melalui setiap baris file . Sebaliknya, gunakan readfile, ini lebih cepat. Ini dari situs php: http://php.net/manual/en/function.readfile.php
Pastikan untuk membersihkan variabel get Anda karena seseorang dapat mengunduh beberapa file php ... Alih-alih menggunakan skrip PHP, untuk membaca dan membersihkan file, lebih rapi menulis ulang header menggunakan
Saya menemukan cara untuk melakukannya dengan HTML lama biasa dan JavaScript/jQuery yang menurun dengan anggun. Diuji dalam IE7-10, Safari, Chrome, dan FF: Tautan HTML untuk unduhan:
jQuery (kode JavaScript murni akan lebih verbose) yang mensimulasikan mengklik tautan setelah jeda kecil:
Untuk membuat ini lebih kuat, Anda dapat menambahkan deteksi fitur HTML5 dan jika tidak ada di sana maka gunakan Ada cara yang lebih mudah di HTML5:
Tambahkan atribut Ini didukung oleh sebagian besar browser modern.
Ini kuncinya:
Aplikasi tipe-konten/x-pdf-dokumen atau aplikasi/pdf dikirim saat mengirim file PDF. Adobe Reader biasanya menetapkan handler untuk tipe MIME ini sehingga browser akan meneruskan dokumen ke Adobe Reader ketika salah satu dari PDF jenis MIME diterima. Saya tahu saya sangat terlambat untuk menjawab ini tetapi saya menemukan peretasan untuk melakukan ini dalam javascript.
Coba ini:
Kode di dalam pdf_server_with_path.php adalah:
jika Anda perlu membatasi kecepatan unduh, gunakan kode ini !!
Untuk informasi lebih lanjut klik di sini Saya memecahkan masalah saya menggunakan seluruh url file PDF (Alih-alih hanya menempatkan nama file atau lokasi ke href): a href = "domain. com/pdf/filename.pdf"
Ini pendekatan yang berbeda. Saya lebih suka daripada mengandalkan dukungan browser, atau alamat ini di lapisan aplikasi, untuk menggunakan logika server web. Jika Anda menggunakan Apache, dan dapat meletakkan file .htaccess di direktori yang relevan, Anda dapat menggunakan kode di bawah ini. Tentu saja, Anda bisa meletakkan ini di httpd.conf juga, jika Anda memiliki akses ke sana.
Arahan FilesMatch hanya sebuah regex sehingga bisa diatur secara terperinci seperti yang Anda inginkan, atau Anda bisa menambahkan ekstensi lain. Baris Header melakukan hal yang sama dengan baris pertama dalam skrip PHP di atas. Jika Anda perlu mengatur baris Tipe Konten juga, Anda bisa melakukannya dengan cara yang sama, tetapi saya belum menganggapnya perlu. |