Rumah php教程 php手册 图解PHP文件下载原理实例

图解PHP文件下载原理实例

May 26, 2016 am 08:20 AM
fopen iconv Muat turun fail

有时为了安全及用户权限,我们不会直接把文件存在web路径用http给客户端下载,现在我们来讲讲如何php实现文件下载的原理及实例。

1、php下载原理图

图解PHP文件下载原理实例

 

2、文件下载源码:

<?php
$file_name = "哈哈.jpg"; //需要下载的文件
$file_name = iconv("utf-8", "gb2312", "$file_name");
$fp = fopen($file_name, "r+"); //下载文件必须先要将文件打开,写入内存
if (!file_exists($file_name)) { //判断文件是否存在
    echo "文件不存在";
    exit();
}
$file_size = filesize("a.jpg"); //判断文件大小
//返回的文件
Header("Content-type: application/octet-stream");
//按照字节格式返回
Header("Accept-Ranges: bytes");
//返回文件大小
Header("Accept-Length: " . $file_size);
//弹出客户端对话框,对应的文件名
Header("Content-Disposition: attachment; filename=" . $file_name);
//防止服务器瞬时压力增大,分段读取
$buffer = 1024;
while (!feof($fp)) {
    $file_data = fread($fp, $buffer);
    echo $file_data;
}
//关闭文件
fclose($fp);
?>
Salin selepas log masuk

3、文件编码问题解决方法:

如果文件名是中文,php的函数不能识别中文文件名,一般如果程序编码为utf-8,php的函数比较古老,只能识别gb2312编码的中文,所以把中文用iconv(“原编码”,”要转成的编码”,”要转码的字符串”)函数可以转码。

比如,把一个字符串从utf-8转码为gb2312

$file_name=iconv(“utf-8”,”gb2312”,”$file_name”);

PHP下载远程文件原理

<?php
/**
 * PHP下载远程文件到本地原理:通过PHP函数,先读取远程文件,然后在本地创建一个新的空文件,
 * 然后将已读取的远程文件的内容写入到新创建的文件当中,这样就可以达到远程文件下载功能
 * @author JackyLi
 *
 */
class DownloadFile {
    /**
     * @param string $file  远程需要下载的文件
     */
    public static function get_img_file($file) {
        $targetDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . "plupload" . DIRECTORY_SEPARATOR;
        if (!file_exists($targetDir)) { //检测临时下载目录是否存在,不存在,则新建一个
            @mkdir($targetDir);
        }
        if (!$file) {
            return false;
        }
        $ext = strrchr($file, "."); //取扩展名
        $filename = $targetDir . &#39;/&#39; . basename($file, $ext) . date("YmdHis") . $ext; //需要保存的文件名称(带完整路径)
        ob_start(); //开启output buffering
        readfile($file); //将文件读取buffering中
        $img = ob_get_contents(); //将buffering中的数据保存到变量当中,方便后续操作
        ob_end_clean(); //关闭output buffering
        $fp2 = @fopen($filename, "a"); //打开目标文件(马上被写入数据的文件)
        fwrite($fp2, $img); //写入数据到文件当中
        fclose($fp2); //关闭文件句柄
        //上面读取文件内容,可以直接用下面两行代替
        //    $file = file_get_contents($file);
        //    file_put_contents($filename,$file);
        return true;
    }
}
$download = new DownloadFile();
$download->get_img_file(&#39;http://news.sina.com.cn/c/2011-09-16/021323162600.shtml&#39;);
Salin selepas log masuk


文章地址:

转载随意^^请带上本文地址!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Operasi pembukaan Python selepas memuat turun fail Operasi pembukaan Python selepas memuat turun fail Apr 03, 2024 pm 03:39 PM

Python menyediakan pilihan berikut untuk membuka fail yang dimuat turun: open() function: buka fail menggunakan laluan dan mod yang ditentukan (seperti 'r', 'w', 'a'). Pustaka permintaan: Gunakan kaedah muat turun() untuk memberikan nama secara automatik dan membuka fail secara terus. Pustaka Pathlib: Gunakan kaedah write_bytes() dan read_text() untuk menulis dan membaca kandungan fail.

Cara menggunakan Laravel untuk melaksanakan fungsi muat naik dan muat turun fail Cara menggunakan Laravel untuk melaksanakan fungsi muat naik dan muat turun fail Nov 02, 2023 pm 04:36 PM

Cara menggunakan Laravel untuk melaksanakan fungsi muat naik dan muat turun fail Laravel ialah rangka kerja Web PHP popular yang menyediakan pelbagai fungsi dan alatan untuk menjadikan pembangunan aplikasi Web lebih mudah dan cekap. Salah satu fungsi yang biasa digunakan ialah muat naik dan muat turun fail. Artikel ini akan memperkenalkan cara menggunakan Laravel untuk melaksanakan fungsi muat naik dan muat turun fail, serta menyediakan contoh kod khusus. Muat naik fail Muat naik fail merujuk kepada memuat naik fail tempatan ke pelayan untuk penyimpanan. Dalam Laravel kita boleh menggunakan muat naik fail

Bagaimana untuk menggunakan fungsi PHP untuk memuat naik dan memuat turun lampiran untuk menghantar dan menerima e-mel? Bagaimana untuk menggunakan fungsi PHP untuk memuat naik dan memuat turun lampiran untuk menghantar dan menerima e-mel? Jul 25, 2023 pm 08:17 PM

Bagaimana untuk menggunakan fungsi PHP untuk memuat naik dan memuat turun lampiran untuk menghantar dan menerima e-mel? Dengan perkembangan pesat teknologi komunikasi moden, e-mel telah menjadi cara penting untuk orang ramai berkomunikasi dan menghantar maklumat dalam kehidupan seharian. Dalam pembangunan web, kami sering menghadapi keperluan untuk menghantar dan menerima e-mel dengan lampiran. Sebagai bahasa skrip sebelah pelayan yang berkuasa, PHP menyediakan pelbagai fungsi dan perpustakaan kelas yang boleh memudahkan proses pemprosesan e-mel. Artikel ini akan memperkenalkan cara menggunakan fungsi PHP untuk memuat naik dan memuat turun lampiran untuk menghantar dan menerima e-mel. Emel dihantar dahulu, kami

Laksanakan muat naik dan muat turun fail dalam dokumen Workerman Laksanakan muat naik dan muat turun fail dalam dokumen Workerman Nov 08, 2023 pm 06:02 PM

Untuk melaksanakan muat naik dan muat turun fail dalam dokumen Workerman, contoh kod khusus diperlukan. Pengenalan: Workerman ialah rangka kerja komunikasi rangkaian tak segerak PHP berprestasi tinggi yang ringkas, cekap dan mudah digunakan. Dalam pembangunan sebenar, muat naik dan muat turun fail adalah keperluan fungsi biasa Artikel ini akan memperkenalkan cara menggunakan rangka kerja Workerman untuk melaksanakan muat naik dan muat turun fail, dan memberikan contoh kod khusus. 1. Muat naik fail: Muat naik fail merujuk kepada operasi memindahkan fail pada komputer tempatan ke pelayan. Yang berikut digunakan

Bagaimana untuk menyelesaikan Amaran PHP: fopen(): gagal membuka strim: Tiada fail atau direktori sedemikian Bagaimana untuk menyelesaikan Amaran PHP: fopen(): gagal membuka strim: Tiada fail atau direktori sedemikian Aug 19, 2023 am 10:44 AM

Bagaimana untuk menyelesaikan PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory Dalam proses menggunakan pembangunan PHP, kita sering menghadapi beberapa masalah pengendalian fail, salah satunya ialah "PHPWarning:fopen():failedtoopenstream:Nosuchfileordirectory"

Cara menyelesaikan Amaran PHP: fopen(): Operasi SSL gagal dalam file.php pada baris X Cara menyelesaikan Amaran PHP: fopen(): Operasi SSL gagal dalam file.php pada baris X Aug 25, 2023 am 09:22 AM

Bagaimana untuk menyelesaikan PHPWarning:fopen():SSLoperationfailedinfile.phponlineX Dalam pengaturcaraan PHP, kami sering menggunakan fungsi fopen untuk membuka fail atau URL dan melaksanakan operasi yang berkaitan. Walau bagaimanapun, apabila menggunakan fungsi fopen, kadangkala anda akan menghadapi sesuatu yang serupa dengan Warning:fopen():SSLoperationfailedinfile.p

Cara menyelesaikan PHP Amaran: fopen(): gagal membuka strim: Kebenaran ditolak Cara menyelesaikan PHP Amaran: fopen(): gagal membuka strim: Kebenaran ditolak Aug 20, 2023 pm 01:45 PM

Bagaimana untuk menyelesaikan PHPWarning:fopen():failedtoopenstream:Permissiondenied Dalam proses membangunkan atur cara PHP, kita sering menghadapi beberapa mesej ralat, seperti PHPWarning:fopen():failedtoopenstream:Permissiondenied. Ralat ini biasanya disebabkan oleh kebenaran fail atau direktori yang salah

Cara menggunakan rangka kerja Hyperf untuk memuat turun fail Cara menggunakan rangka kerja Hyperf untuk memuat turun fail Oct 21, 2023 am 08:23 AM

Cara menggunakan rangka kerja Hyperf untuk memuat turun fail Pengenalan: Muat turun fail adalah keperluan biasa apabila membangunkan aplikasi web menggunakan rangka kerja Hyperf. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Hyperf untuk memuat turun fail, termasuk contoh kod khusus. 1. Persediaan Sebelum memulakan, pastikan anda telah memasang rangka kerja Hyperf dan berjaya mencipta aplikasi Hyperf. 2. Buat pengawal muat turun fail Mula-mula, kita perlu mencipta pengawal untuk mengendalikan permintaan muat turun fail. Buka terminal dan masuk

See all articles