当前位置: 首页 > 编程日记 > 正文

基于php下载文件的详解

基于php下载文件的详解
本篇文章是对php下载文件进行了详细的分析介绍,需要的朋友参考下
php下载文件,比如txt文件。
出现的效果就是,弹出浏览器自带的下载框,出现另存为操作。有时候会出现内存溢出和超时的现象。
超时的话,设置set_time_limit(0);
出现内存溢出的话,有可能是因为从数据库中取出的数据量太大导致的。
如果是从文件中读取的话,出现内存溢出的话,就是代码读取方式不正确,调用files或者file_get_contens才会
如果是fopen的话,就给一个缓冲区,固定大小,读入然后写入,不会出现内存溢出的情况。
代码:<?php
if (file_exists($file_path)) { //如果文件存在
$handle = fopen($file_path, "r");
while (!feof($handle)) {
$content = fgets($handle, 4096); //读取一行
echo $content//输出到缓冲区,即php://stdout。达到缓冲区设置值后由tcp传给浏览器进行输出  一般到512字节就会通过网络输出给浏览器
//by www.jbxue.com
fclose($handle);
}
?>
但是在输出之前,要调用一次,@ob_end_flush();不能循环调用,只调用一次就好。
@ob_end_flush();//冲刷出(送出)输出缓冲区内容并关闭缓冲
文件下载:
content-type://下载的格式,浏览器不能解析的格式就会弹出下载框
<?php
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
Header("Content-type: application/octet-stream");  //响应内容类型  
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($filename). ' bytes');
Header('Content-Disposition: attachment; filename='.$filename);  //HTTP响应头
?>
posted on 2013-08-01 05:24 snowfly123 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/linuxnotes/p/3229181.html

相关文章:

C#中DateTime.Now.Ticks的用法和说明

在C#中DateTime.Now.Ticks的常用于标示&#xff1a; 自 0001 年 1 月 1 日午夜 12:00:00以来&#xff0c;到当前时间为止&#xff1a;以0.1纳秒(1纳秒0.00000 0001秒)为单位的时间间隔数。用于非常精确的计算中使用。转载于:https://www.cnblogs.com/woaic/archive/2012/09/13/…

spring入门(二) 使用注解代替xml配置

1.导包(略) 2.applicationContext.xml如下: 1 <?xml version"1.0" encoding"UTF-8"?>2 <beans xmlns"http://www.springframework.org/schema/beans"3 xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"4 …

qt 找不到 -lpulse-mainloop-glib,找不到 -lpulse问题

问题&#xff1a;使用 QT 编写视频展现程序报错找不到运行时库文件 解决办法&#xff1a; 首先 sudo find / -name libpulse.so* 然后 sudo cp /usr/lib/x86_64-linux-gnu/libpulse.so.0 /usr/lib/libpulse.so 对于libpulse-mainloop-glib 首先find / -name libpulse-mainl…

INNO SETUP 获得命令行参数

INNO SETUP 获得命令行参数 原文 http://www.cnblogs.com/ahuo/archive/2009/07/30/1534998.html [Code]function GetMyParam(PName:String):String;var CmdLine :String; CmdLineLen :Integer; i :Integer;begin CmdLineLen:ParamCount(); fori:0to CmdLineLen dobeg…

java父子表_数据库二维表转父子关系,java,stream,list

需求描述&#xff1a;把数据库中的省市二维表&#xff0c;查询到内存中后&#xff0c;转换为父子层级关系。通过jdk8中的stream方式实现。数据关系&#xff1a;320004 福建省 320507 南平市430000 湖南省 430100 长沙市320000 江苏省 320583 昆山市…

java 概述

概述&#xff1a; 1.在java中&#xff0c;数据类型具有固定的大小&#xff0c;这消除了代码移植时令人头痛的主要问题。2.在网页中运行java程序成为applet3.public成为访问修饰符&#xff0c;它用于控制程序的其它部分对这段代码的访问级别。4.单引号的数据是char类型&#xff…

HOOK 技术

在介绍 截获系统消息钩子 之前&#xff0c;这几个函数是密切相关的&#xff1a; SetWindowsHookEx() 介绍&#xff1a; 功能&#xff1a;将应用程序定义的挂钩过程安装到挂钩链中。 函数原型&#xff1a;HHOOK SetWindowsHookEx( int idHook, // 钩子类型。…

QT 中使用 OpenCv 的 CascadeClassifier 报错

问题 在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候&#xff0c;在构造函数中进行检测器的初始化&#xff0c;随后调用相机读取图片的时候就会报错&#xff0c;报的错误是 Segment Fault &#xff08;段错误&#xff09; 解决 尝试使用 gdb&#xff0c;va…

java vuser脚本_loadrunner12中JavaVuser脚本的编写

1、环境准备&#xff1a;友情提示&#xff1a;用本地环境&#xff0c;不要用虚拟机LoadRunner11----->对应JDK1.6版本(32位)LoadRunner12----->对应JDK1.7版本(32位)(一)、JDK下载安装完成后&#xff0c;配置环境变量&#xff1a;1)、系统变量→新建 JAVA_HOME 变量 &…

IT阅读——关于“业务”

本文转自http://www.cnblogs.com/beijiguangyong/archive/2012/11/12/2767054.html 开发当中常常听说“业务”这个词&#xff0c;什么“业务为王”之类的词不绝于耳&#xff0c;那么什么是业务&#xff1f; 百度上的解释是&#xff1a;“‘业务’更白话一些来说&#xff0c;就是…

SSH无需密码密钥登录

2019独角兽企业重金招聘Python工程师标准>>> 无密码ssh登录的主要操作简单概述为&#xff0c;将本机中的ssh密钥对中的公钥如id_rsa.pub拷贝到目标机器的ssh验证文件authorized_keys中。 1、简洁操作步骤 摘录一 &#xff1a;使用ssh-copy-id 在192.168.42.142机器…

5-4 图片修补

import cv2 import numpy as np img cv2.imread(image0.jpg,1) for i in range(200,300): # 直接修改像素值 从200画到300这样一个位置上img[i,200] (255,255,255)#当前这样一根线占三个像素img[i,2001] (255,255,255)img[i,200-1] (255,255,255) for i in range(150,250):…

OpenCV 像素存储

像素存储 OpenCV 中图像矩阵的大小取决于所用的颜色模型&#xff0c;更准确的说是取决于图像所用到的通道数。 如果使用的是灰度图&#xff0c;矩阵大概如图所示&#xff1a; 如果使用的是多通道的图像&#xff0c;矩阵中的列会包含多个子列&#xff0c;子列的个数和通道数相…

java反射用在哪里_Java反射

昨天去参加比赛了&#xff0c;所以没有进行博客迁移。人生中的第一场健体比赛&#xff0c;虽然没得奖&#xff0c;但是收获和带来的思考颇丰。意外地进入了男子B组(174以上)的半决赛&#xff0c;然后在半决赛的时候还被裁判员点名出去单独比较&#xff0c;这个很让我惊喜。最后…

html中锚点的应用【本页面跳转】

设置锚点 <a name"top"></a> 同页跳转 <a href"#top">返回顶部</a> 不同页跳转 <a href"test.htm#top>跳转到test.htm页面顶部</a> 转载于:https://www.cnblogs.com/wangmars/p/3241855.html

SQL2005CLR函数扩展-正则表达式

用过Oracle的人都知道Oracle有四个正则表达函数REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和EGEXP_REPLACE&#xff0c;而SQLServer却无法完全实现上面的功能。以前我们知道用sp_OAxxx系列函数来调用js组建实现正则&#xff0c;现在我们可以通过CLR扩展来借助.Net实现。 ※ 代…

ROW_NUMBER() OVER函数的基本用法

简单的说row_number()从1开始&#xff0c;为每一条分组记录返回一个数字&#xff0c;这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序&#xff0c;再为降序以后的没条xlh记录返回一个序号。 2row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1…

OpenC 仿射变换

仿射变换&#xff08;Affine Transformation&#xff09;又称仿射映射&#xff0c;是指在几何中&#xff0c;一个向量空间进行一次线性变化并加上一个平移&#xff0c;变换位另一个的向量空间的过程。 一个任意的仿射变换都能够表示为乘以一个矩阵&#xff08;线性变换&#xf…

做acm 需要学的算法

做acm 需要学的算法 转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什么就眼红, 发挥自己的长处,这才是重要的. 第一阶段&#xff1a;练经典常用算法&am…

java实现七日股票问题_七日打卡--JAVA资源限制

资源限制资源限制是指在进行并发编程时&#xff0c;程序的执行速度受限于计算机硬件资源或软件资源。 例如服务器的带宽只有2Mb/s&#xff0c;某个资源的下载速度是1Mb/s每秒&#xff0c;系统启动10个线程下载资源&#xff0c;下载速度不会变成10Mb/s&#xff0c;所以在进行并发…

Cassandra 可视化工具

2019独角兽企业重金招聘Python工程师标准>>> 最近开始接触Cassandra&#xff0c;这些天在cassandra的wiki发现了一些可视化工具的推荐。现在也把这个链接推荐给大家&#xff1a;http://wiki.apache.org/cassandra/Administration%20Tools 。 几番折腾之后&#xff0…

Linux软件的安装,更新与卸载

linux软件的安装&#xff0c;更新与卸载 Linux常见的安装为tar&#xff0c;zip&#xff0c;gz&#xff0c;rpm&#xff0c;deb&#xff0c;bin等。我们可以简单的分为三类. 第一&#xff1a;打包或压缩文件tar&#xff0c;zip&#xff0c;gz等&#xff0c;一般解压后即可&#…

因链接静态库先后顺序不正确,引起符号定义找不到

问题 项目中需要链接多个静态库&#xff0c;在编译的时候报错如下 sdi_io.cpp:(.text._ZN13sdi_H264EncIO7DataPopEPm0x30)&#xff1a;对‘H264ENC_StatusGet(H264ENC_Status_t&)’未定义的引用可能原因是符号确实没有定义&#xff0c;而本文出现这个问题的原因是&#…

java中后台是那一部分_一套Java后台管理系统,拿来即用(附项目地址)

前言这套Base Admin是一套简单通用的后台管理系统&#xff0c;主要功能有&#xff1a;权限管理、菜单管理、用户管理&#xff0c;系统设置、实时日志&#xff0c;实时监控&#xff0c;API加密&#xff0c;以及登录用户修改密码、配置个性菜单等技术栈前端&#xff1a;layuijava…

基础 HTML之目录问题(相对路径和绝对路径区别)

一、相对路径和绝对路径 相对路径&#xff1a;以引用文件之网页所在位置为参考基础&#xff0c;而建立出的目录路径。因此&#xff0c;当保存于不同目录的网页引用同一个文件时&#xff0c;所使用的路径将不相同&#xff0c;故称之为相对。 绝对路径&#xff1a;以Web站点根目录…

[转]android selector 背景选择器

关于listview和button都要改变android原来控件的背景&#xff0c;在网上查找了一些资料不是很全&#xff0c;所以现在总结一下android的selector的用法。首先android的selector是在drawable/xxx.xml中配置的。先看一下listview中的状态&#xff1a;把下面的XML文件保存成你自己…

牛客国庆集训派对Day6 B.Board

链接 [https://www.nowcoder.com/acm/contest/206/B] 分析 只要在n*n范围内随便找一个斜对角的一个格子去计算就知道了 具体看代码体会吧 代码 #include<bits/stdc.h> using namespace std; int a[1010][1010];int main(){int n,i,j,x,y;//freopen("in.txt",&q…

java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了!

最近阿粉接到一个需求&#xff0c;需要从文件读取数据&#xff0c;然后经过业务处理之后存储到数据库中。这个需求&#xff0c;说实话不是很难&#xff0c;阿粉很快完成了第一个版本。内存读取第一个版本&#xff0c;阿粉采用内存读取的方式&#xff0c;所有的数据首先读读取到…

Cmake 实例学习 一

一. 第一个简单的例子 在一个目录下面实现一个简单的 hello world 程序 使用cmake进行构建的时候&#xff0c;每个目录下面都要有一个 CMakeLists.txt 的文件 如果是一个稍微大的工程&#xff0c;有多级目录&#xff0c;在上级目录中的 CMakeLists.txt 中会有定义要求编译子目…

ORA-19502: write error on file xxxxx, block number xxxx

错误现象&#xff1a; 在ORACLE 10g下为表空间IGNITE_EGVSQL01增加数据文件时&#xff0c;报如下错误&#xff1a; SQL> ALTER TABLESPACE IGNITE_EGVSQL01 ADD DATAFILE /oradata/ignt/ignite_egvsql01_d02.dbf SIZE 4096M AUTOEXTEND OFF; ERROR at line 1: O…