php文件下载的超过程分析
客户端下载服务器端文件的过程分析:浏览器发送请求访问服务器中的Web页面(如:PHP),Web页面的代码如下所示。
服务器接受请求后,它立即跑down.php文件
运行文件时,必须读取将下载到内存中的文件(这里是圣诞节嘉年华会)。在这里,我们完成这个动作由fopen()函数。
注意:任何从服务器下载的文件操作要求文件在服务器中首先读入内存。
现在,该文件在内存中,需要从内存读取文件并通过fread()函数完成动作。
需要注意的是,如果文件很大,则应该将文件分成多个段返回到客户机,而不是等待在读取服务结束后一次将文件返回给客户机,因为这将增加服务器的负载。
因此,我们需要设置要在PHP代码中读取的字节数。例如,我在下一个代码中设置了缓冲区= 1024中读取一次的字节数,并且输出数据一次读一次,也就是返回到浏览器。
流程图 uff1a
复制代码代码如下所示:
< PHP
标题(内容类型:文本/ HTML;字符集= UTF-8);
小饼 / / $ file_name =;
$file_name= Christmas Carnival.Jpg;
为了解决中文显示问题
file_name美元= iconv(UTF-8
file_sub_path美元美元'document_root_server { } =。marcofly / / / PHPstudy / ;
file_path美元= file_sub_path file_name美元美元;
必须首先确定给定文件是否存在。
如果(!file_exists($ file_path)){
没有文件文件;
返回;
}
$ FP = fopen(file_path美元,R);
file_size美元=文件大小($ file_path);
下载文件需要使用头部
标题(内容类型:应用程序/字节流);
标头(接受范围:字节);
标题(接受长度:。file_size美元);
Header (Content-Disposition: attachment; filename=.$file_name);
$缓冲区=1024;
file_count = 0美元;
将数据返回给浏览器。
而(!Feof(FP file_count美元美元美元)<< file_size){
file_con美元= fread(FP美元美元,缓冲);
file_count美元= $缓冲;
echo $ file_con;
}
Fclose($ FP);
>
几个注意事项:
标题的作用(内容类型:文本/ HTML;字符集= UTF-8):当服务器对浏览器的请求做出回应,它告诉浏览器以UTF-8编码格式显示内容。
关于file_exists()函数不支持中文路径的问题:因为PHP函数不支持早期,中国,所以如果如果字符编码的转换需要下载的文件名是中文的,或file_exists()函数不能确定,你可以使用iconv()函数编码转换
file_sub_path美元()我使用绝对路径,和执行效率高于相对路径。
标题的作用(内容类型:应用程序/字节流):通过这个代码的客户端浏览器,你可以知道形式的文件服务器返回的
标题(接受范围:字节)的作用:告诉客户机客户端浏览器返回的文件的大小是以字节计算的。
标题的作用(接受长度:。file_size美元):对文件的大小告诉浏览器返回
标题的作用(内容配置:依恋;文件名= 。file_name美元):告诉该文件的名称由浏览器返回
以上四个头()是必需的
Fclose($ FP)可以输出最后剩下的数据缓冲区中的磁盘文件和释放文件指针和相关的缓冲区