php 文件操作-PHP利用http请求头实现文件下载

我们都知道php非常依赖http契约,像java或者asp.net在某些情况下是不能依赖http的,比如asp.net的winform,对于php来说php 文件操作,文件下载可以使用http请求头加php IO即可取得成就

1.首先查看下载时要使用的请求头

 header("Content-type:application/octet-stream");
 header("Accept-Ranges:bytes");
 header("Accept-Length:".$file_Size);
 header("Content-Disposition: attachment; filename=".$filename);

内容类型将不再解释。 Accept-Ranges 指示接收数据的类型或范围。 图片是二进制的,因此需要以字节的形式传输。 Accept-Length表示接收到的大小。 PHP文件下载需要告诉浏览器下载的文件有多大,最后一个是附件,过去只需要给出文件名,这个名称就是下载时显示的文件名。

操作文件的步骤_操作文件管理的主要功能_php 文件操作

2、php的文件操作出现得比较早。 当文件名是英文时php 文件操作,需要注意转码

$filename=iconv("UTF-8","GB2312",$filename);

3、php的文件下载机制是apcahe首先将文件信息读取到服务器显存中,然后利用请求头将文件的二进制信息通过浏览器发送给客户端

//判断路径是否存在
     
     if(!file_exists($filepath)){
        echo "文件不存在";
        return;
     }
     $fp=fopen($filepath,"r");
     //取得文件大小
     $file_Size=filesize($filepath);
      
     header("Content-type:application/octet-stream");
     header("Accept-Ranges:bytes");
     header("Accept-Length:".$file_Size);
     header("Content-Disposition: attachment; filename=".$filename);
     $buffer=1024;
     $buffer_count=0;
    
     while(!feof($fp)&&$file_Size-$buffer_count>0){
       $data=fread($fp,$buffer);
        $buffer_count+=$buffer;
       echo $data;
       
     }
   
     fclose($fp);

feof用于判断文件是否读到末尾,fread用于将文件读入缓冲区,缓冲区大小为1024,读取时将数据输出到浏览器。 为了下载的安全,每次读取数据时都会进行字节计数。读取文件后关闭输入流

3.有时候里面的代码不太好用。 您可以清除(擦除)输出缓冲区并使用下面的代码

ob_clean();

看一下运行效果图

下载文件后没有问题

下面是完整的代码

0){
       $data=fread($fp,$buffer);
        $buffer_count+=$buffer;
       echo $data;
       
     }
   
     fclose($fp);
      
     
   }
   downloadFile("桌面截图.png");
?>