当前位置: 编程技术>php
本页文章导读:
▪php下载文件的问题分析 在用php实现下载文件时,弹出浏览器自带的下载框,出现另存为操作。有时会出现内存溢出和超时的现象。
超时的话,可以设置set_time_limit(0);
出现内存溢出的话,有可能是因为从数据库中取.........
▪php导出excel(不断刷新缓冲区)的实例代码 php导出excel文件,代码:
<?php
require('./db.class.php');
$DB = new db();
$DB->connect();//数据库链接
header("Content-Type: text/csv");
header("Content-Disposition:filename=php100.csv");
$sql = "select order_sn,consignee,ad.........
▪php 求数组差集的自定义函数(效率优于array_diff函数) php求数组差集,代码如下:
<?php
/**
* func: array_different
* 功能:求数组的差集
* edit:www.
*/
function array_different($array_1, $array_2) {
$array_2 = array_flip($array_2); //将数组键值调换
foreach ($array.........
[1]php下载文件的问题分析
来源: 互联网 发布时间: 2013-12-24
在用php实现下载文件时,弹出浏览器自带的下载框,出现另存为操作。有时会出现内存溢出和超时的现象。
超时的话,可以设置set_time_limit(0);
出现内存溢出的话,有可能是因为从数据库中取出的数据量太大导致的。
如果是从文件中读取的话,出现内存溢出的话,就是代码读取方式不正确,调用files或者filegetcontens才会。
如果是fopen的话,就给一个缓冲区,固定大小,读入然后写入,不会出现内存溢出的情况。
代码:
<?php //php下载文件 //by www. if (file_exists($file_path)) { //如果文件存在 $handle = fopen($file_path, "r"); while (!feof($handle)) { $content = fgets($handle, 4096); //读取一行 echo $content; //输出到缓冲区,即php://stdout。 //达到缓冲区设置值后由tcp传给浏览器进行输出,一般到512字节就会通过网络输出给浏览器。 } fclose($handle); } ?>
注意:
在输出之前,要调用一次,@ob_end_flush();不能循环调用,只调用一次就好。
@ob_end_flush();//冲刷出(送出)输出缓冲区内容并关闭缓冲。
文件下载:
content-type://下载的格式,浏览器不能解析的格式就会弹出下载框
<?php //php下载文件 //by www. 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响应头 ?>
[2]php导出excel(不断刷新缓冲区)的实例代码
来源: 互联网 发布时间: 2013-12-24
php导出excel文件,代码:
<?php require('./db.class.php'); $DB = new db(); $DB->connect();//数据库链接 header("Content-Type: text/csv"); header("Content-Disposition:filename=php100.csv"); $sql = "select order_sn,consignee,address,tel,mobile,email,order_amount,add_time from order_info";//查询数据 $order = $DB->fetch_all($sql); // 打开PHP文件句柄,php://output 表示直接输出到浏览器 $fp = fopen('php://output', 'a'); // 输出Excel列名信息 foreach($order[0] as $key=>$value){ $head[] = iconv('utf-8', 'gbk', $key);//头信息 } // 将数据通过fputcsv写到文件句柄 //fputcsv($fp, $head); // 计数器 $cnt = 0; // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小 $limit = 100000; // 逐行取出数据,不浪费内存 $count = count($order); for($t=0;$t<$count;$t++) { $cnt ++; if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题 ob_flush(); flush(); $cnt = 0; } foreach ($order[$t] as $i => $v) { if($i == 'add_time') { $row[$i] = iconv('utf-8', 'gbk', date('Y-m-d H:i:s',$v)); }else{ $row[$i] = iconv('utf-8', 'gbk', $v); } } fputcsv($fp, $row); unset($row); } ?>
[3]php 求数组差集的自定义函数(效率优于array_diff函数)
来源: 互联网 发布时间: 2013-12-24
php求数组差集,代码如下:
<?php /** * func: array_different * 功能:求数组的差集 * edit:www. */ function array_different($array_1, $array_2) { $array_2 = array_flip($array_2); //将数组键值调换 foreach ($array_1 as $key => $val) { if (isset($array_2[$val])) { unset($array_1[$key]); } } return $array_1; } function runtime($mode = 0) { static $t; if (!$mode) { $t = microtime(); return; } $t1 = microtime(); list($m0, $s0) = explode(" ", $t); list($m1, $s1) = explode(" ", $t1); return sprintf("%.3f", ($s1 + $m1 - $s0 - $m0) * 1000); } $array_1 = array(); $array_2 = array(); for ($i = 0; $i <= 5000; $i++) { $array_1[$i] = mt_rand(0, 100); $array_2[$i] = mt_rand(0, 100); } runtime(); //计时开始 $arr_diff = array_diff($array_1, $array_2); echo runtime(1); //计时结束并输出计时结果 echo '<br>'; foreach ($arr_diff as $key => $val) { echo $val.','; } runtime(); //计时开始 $arr_diff2 = array_different($array_1, $array_2); echo runtime(2); //计时结束并且输出计时结果 foreach ($arr_diff2 as $key => $val) { echo $val.','; } ?>
最新技术文章: