php导出csv并保存在服务器,返回csv的文件路径
<?php namespace app\common\controller; use think\Controller;
use think\Db; class Csv extends Controller
{
public static function putCsv($condition, $action, $file_name)
{
set_time_limit(0);
switch ($action) {
case "web":
$field = [
'A' => [
"tid",
"Transaction Number"
],
'B' => [
"create_date",
"Time"
],
'C' => [
"full_name",
"Card Name"
],
'D' => [
"face_value",
"Face Value($)"
],
'E' => [
"price_sgd",
"Cost($)"
],
'F' => [
"price_rmb",
"Cost(¥)"
],
'G' => [
"mobile",
"Top-up Number"
],
'H' => [
"Status",
"Status"
],
'I' => [
"ip",
"IP"
],
'J' => [
"email",
"Email"
]
];
$file_name = "web" . $file_name . "order_list";
$builder = Db::table("Transactions")
->field("tid,create_date,menu_id as full_name,tag as face_value,price_sgd,price_rmb,mobile,status,user_ip,email")
->where($condition)
->select();
$list = collection($builder)->each(function ($item) {
//csv导出数字满15位之后自动省略---科学计算法,加上"\t"则可以完整导出
$item['create_date'] .= "\t";
$item['mobile'] .= "\t";
$product_info = getProdInfoByMenuId($item['full_name'], true);
$item['full_name'] = $product_info['full_name'];
$item['face_value'] = number_format($product_info['card_val'] / 100, 2);
if ($item['status'] == '1') $item['status'] = "Success";
if ($item['status'] == '0') $item['status'] = "Pending";
if ($item['status'] == '102') $item['status'] = "Fail"; unset($item['menu_id']);
return $item;
});
//dump($list);exit;
break;
case "wechat":
$file_name = "wechat" . $file_name . "order_list";
$field = [
'A' => [
"tid",
"Transaction Number"
],
'B' => [
"uid",
"Wechat uid"
],
'C' => [
"create_date",
"Time"
],
'D' => [
"mobile",
"Top-up Number"
],
'E' => [
"pid",
"Product pid"
],
'F' => [
"state",
"Status"
],
'G' => [
"upid_lst",
"Red Packet"
],
'H' => [
"admin_note",
"Remark"
]
];
$builder = Db::table("WXTrans")
->field("tid,uid,create_date,mobile,pid,state,upid_lst,admin_note")
->where("uid <> 13")
->where("uid <> 15")
->where("total_fee > 1")
->where("mode != 1")
->where($condition)
->select();
$list = collection($builder)->each(function ($item) {
$item['tid'] = "wx_" . $item['tid'];
$item['create_date'] .= "\t";
$item['mobile'] .= "\t";
$item['upid_lst'] = str_replace(",", " ", $item['upid_lst']);
if ($item['state'] == 3) $item['state'] = "Success";
if ($item['state'] == 2) $item['state'] = "Pending";
if ($item['state'] == 102) $item['state'] = "Fail";
if ($item['state'] == 200) $item['state'] = "Refund";
return $item;
});
break;
case "client":
$file_name = "API" . $file_name . "order_list";
$field = [
'A' => [
"ctime",
"Time"
],
'B' => [
"full_name",
"Card Name"
],
'C' => [
"face_value",
" Face Value($)" ],
'D' => [
"price_sgd",
"Cost($)"
],
'E' => [
"mobile",
"Top-up Number"
],
'F' => [
"err_code",
"Status"
],
'G' => [
"order_id",
"Transaction Number" ],
'H' => [
"client_id",
"API Client" ],
];
if (isset($condition['client_id'])) {
$file_name = $condition['client_id'] . $file_name . "order_list";
} else {
$file_name = "API" . $file_name . "order_list";
}
$builder = Db::table("ApiTrans")
//->fetchSql(true)
->field("ctime,pid as full_name,amount as face_value,price_sgd,mobile,err_code,tid as order_id,client_tag,client_id")
->where("category = 'topup' or category is NULL")
->whereNotLike("client_id", "%_test%")
->where($condition)
->select();
//echo $builder;exit;
$list = collection($builder)->each(function ($item) {
$item['order_id'] = "Our Transaction Number:" . $item['order_id'] . "\n" . "API Transaction Number:" . $item['client_tag'];
$item['price_sgd'] = number_format($item['price_sgd'] / 100, 2);
$item['ctime'] .= "\t";
$item['mobile'] .= "\t";
if ($item['err_code'] == 0) {
$item['err_code'] = "Success";
} elseif ($item['err_code'] == 311) {
$item['err_code'] = "Pending";
} else {
$item['err_code'] = "Fail";
}
$product_info = getProdInfo($item['full_name'], true);
$item['full_name'] = $product_info['full_name'];
$item['face_value'] = number_format($product_info['card_val'] / 100, 2);
unset($item['client_tag']);
//dump($item);exit;
return $item;
});
break;
case "alipay":
$file_name = "alipay" . $file_name . "order_list";
$field = [
'A' => [
"uid",
"Wechat uid"
],
'B' => [
"tid",
"Transaction Number"
],
'C' => [
"ctime",
"Time"
],
'D' => [
"mobile",
"Top-up Number"
],
'E' => [
"pid",
"Product pid"
],
'F' => [
"state",
"Status"
],
'G' => [
"upid_lst",
"Red Packet"
],
'H' => [
"admin_note",
"Remark"
]
];
$builder = Db::table("cz_alipay_trans")
->field("tid,source_uid as uid,ctime,mobile,pid,state,upid_lst,admin_note")
->where($condition)
->select();
$list = collection($builder)->each(function ($item) {
$item['tid'] = "ap_" . $item['tid'];
$item['ctime'] .= "\t";
$item['mobile'] .= "\t";
$item['upid_lst'] = str_replace(",", " ", $item['upid_lst']);
$item['uid'] = getUidByOpenid($item['uid'])['uid'];
if ($item['state'] == 3) $item['state'] = "Success";
if ($item['state'] == 2) $item['state'] = "Pending";
if ($item['state'] == 102) $item['state'] = "Fail";
if ($item['state'] == 200) $item['state'] = "Refund";
return $item;
});
break;
default:
break;
}
$file_name = $file_name . ".csv";
//$file_name = time() . ".csv"; $file_path= $_SERVER['DOCUMENT_ROOT'] . "/uploads/csv/" . $file_name;
if (file_exists($file_path)) {
unlink($file_path);
}
$file_path="/uploads/csv/" . $file_name;
$fp = fopen("." . $file_path, "a");
$limit = 10000; $calc = 0;
foreach ($field as $k => $v) {
//$tit[] = iconv("UTF-8", "GB2312//IGNORE", $v[1]);
//外国不支持UTF-8,需要转换成utf-8 with bom
$tit[] = "\xEF\xBB\xBF".$v[1];
} fputcsv($fp, $tit);
foreach ($list as $v) {
$calc ++;
if ($limit == $calc) {
ob_flush();
flush();
$calc = 0;
}
foreach ($v as $_v) {
//$tarr[] = iconv("UTF-8", "GB2312//IGNORE", $_v);
$tarr[] = $_v;
}
fputcsv($fp, $tarr);
unset($tarr);
}
unset($list);
fclose($fp); return ["code" => 1, "msg" => "获取成功", "url" => $_SERVER['HTTP_HOST'] . $file_path];
}
}
新建一个类如上,然后在需要用到的地方调用这个类里面的方法即可。
php导出csv并保存在服务器,返回csv的文件路径的更多相关文章
- C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法
最近在做项目的时候需要操作ftp进行文件的上传下载,但在调用using (var response = (FtpWebResponse)FtpWebRequest.GetResponse())的时候总 ...
- C# FTP远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)
今天用代码删除FTP服务器上的目录时候,报错:远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件). 习惯性的google,不外乎以下几点: 1.URL路径不对,看看有没有多加 ...
- js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中
ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId ...
- SQL2012还原数据库操作在本地服务器上操作和用别的电脑远程连接到服务器进行操作的文件路径差异
在数据库服务器上想还原一个数据库到某个备份文件时期的,服务器的数据库文件本身是保存在 D:\DEVDB目录 通过开发电脑上的MS manager来连接数据库服务器操作还原 虽发现文件卡项上,原始文件名 ...
- django项目部署在Apache服务器中,静态文件路径的注意点
django Apache部署静态文件的路径注意点 静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中. 当 DEBUG = True 时, ...
- 【linux】find命令仅返回文件名 不用返回完整的文件路径
正常查询 find /apps/swapping -name '*swapping*.jar' 在/apps/swapping 目录下 查找 文件名为 '包含swapping的并且以.java结尾的文 ...
- 数据以Excel形式导出导服务器,再将文件读取到客户端另存 以HSSFWorkbook方式实现
public void exportExcel(List<P2pInfo> repayXist,HttpServletRequest request,HttpServletResponse ...
- fft 远程服务器返回错误 550返回码
"远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)"时,可能是如下原因: 1.URL路径不对,看看有没有多加空格,或者大小写问题 2.权限是否足 3.需 ...
- js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)
js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可) 一.总 ...
随机推荐
- im开发总结:netty的使用
最近公司在做一个im群聊的开发,技术使用得非常多,各种代码封装得也是十分优美,使用到了netty,zookeeper,redis,线程池·,mongdb,lua,等系列的技术 netty是对nio的一 ...
- suffixes - 列出文件后缀。
DESCRIPTION [描述] 文件后缀与文件名之间以点(.)间隔,通常包括一个或多个字母. 我们用文件后缀来描述文件的内容.很多标准的实用程序,如编译器,以后缀来识别文件类型. make(1) 就 ...
- windows 之间远程大文件传输问题解决
今天我在远程登录另一台windows的时候,需要传输一个大约3GB的文件,但是每每经过了一会儿,就会提示我未知错误问题. 我在网上找了一下,本问题的解决方法如下. 1.打开远程登录的对话窗口 2.选择 ...
- Redux DevTools Extension 的使用
网址 https://github.com/zalmoxisus/redux-devtools-extension 1.const composeEnhancers = window.__REDUX ...
- vue 初始化rem
在assets => js => rem.js export default { init () { let sw = document.documentElement.clientWid ...
- centos7 nodejs二进制安装
1.安装文件下载 1.下载地址:http://nodejs.cn/download/ 2.选择一个合适的版本下载 2.安装步骤 1.将安装包上传到指定位置(我习惯放到:/usr/local/appli ...
- mysql类型转换函数convert与cast的用法,及SQL server的区别
首先,convert函数 字符集转换 : CONVERT(xxx USING gb2312) 类型转换和SQL Server一样,不过类型参数上有不同: CAST(xxx AS 类型) ...
- centos 单用户登陆模式操作
在centos中因为安装java而配置 jdk环境变量的原因,对/etc/profile文件进行了编辑 错误的环境变量配置导致在第一次修改profile文件并保存后,执行source /etc/pro ...
- rstrip
====== rstrip ====== Description Returns a copy of the string with trailing characters removed. Synt ...
- 关于计算机学习的书(doc,mobi,epub,pdf四种格式)
关于计算机学习的书(doc,mobi,epub,pdf四种格式) <html> <body> <div> 21天学通C+ +2016/6/22 18:47文條 30 ...