php处理excel大文件,请问PHP数组的最大存储容量??
我现在处理一个excel文件,但是那个excel文件特别大,有好几个工作表,大概都有240000条数据,我的程序如下
public function _excel_read_activity($_filePath) {
// 过滤数据,写入数据库
$_data = Tool::_filter_trim($_POST);
Read_Excel_File(PATH.'/'.$_data['path'],$_excelHandle);
$_excelData = array();
// 循环Excle表
foreach ($_excelHandle as $_excelTable) {
// 移除第一行的表头
array_shift($_excelTable);
// 遍历每个表的行
foreach ($_excelTable as $_excelLine) {
// 如果每个值都是空表则跳过
if (Tool::_array_empty($_excelLine)) continue;
// 过滤两边的空格
// $_newExcelLine = Tool::_filter_trim($_excelLine);
// 内部判断未详细
$_excelData['customer_name'] = read_html_code($_excelLine[0]);//客户姓名
$_excelData['customer_tel'] = $_excelLine[1];//客户手机
$_excelData['staff_id'] = $_data['staff_id'];//员工表id,先默认为0
$_excelData['tpl_id'] = $_data['tpl_id'];//模板id
$_excelData['activity_id'] = $_data['activity_id'];//模板id
$_excelData['mark'] = 1;//发送标记1为未发送的短信
$_excelData['status'] = 2;//完成认证
print_r($_excelData);
// 写入数据库
$_status = $this->table(C('DB_PREFIX').'records')->data($_excelData)->add();
// 错误返回错误信息
if (!$_status) return Tool::_return_check(false,'Excel文件写入数据库失败,错误姓名'.$_excelData['customer_name'].',请检查!!!');
}
}
注:这里面$_data,是其它数据,可以不用考虑,但是我这样也在Read_Excel_File(PATH.'/'.$_data['path'],$_excelHandle);的时候,也就是将这个文件赋值给了一个数组,现在老是感觉超时了,我担心是不是php容量问题?我是用ajax发送的,请问有什么更好的办法吗???还有如果哪位大哥能给个更好的php处理excel的类文件吗???
Answers
之前,我也用phpExcel这个生成过excel工作簿,我当时的单元格数应该没有超过240000,但没有遇到超时的问题。因为,我在代码头部加了下面代码。
另外,不能用浏览器触发这个代码,将大数据量生成excel,较耗时,如果用浏览器访问,容易超时或匆操作导致浏览器断开与服务器的连接。所以,生成excel时,最好在命令行下面。
当时用,phpexcel遇到的难题是内存问题。phpexcel这个库,非常费内存,我当时有费过2G的情况。
在代码里,放开内存。
如果,内存已经放的不能再大了,你只能想办法,减少数据量或者换其它的生成excel工具。
可以试试:http://lib.open-open.com/view/open1343177889084.html
另外,生成excel过程中,及时,观察内存使用情况。我当时是在linux下,用top就可以。
还有,尽量不要构造大数组。