查询优化,善用索引
1、在优化关联查询时,**只有在被驱动表上建立索引才有效!**
2、left join时,左侧的为驱动表,右侧为被驱动表! 1、在优化关联查询时,**只有在被驱动表上建立索引才有效!**
2、left join时,左侧的为驱动表,右侧为被驱动表! 1、直接浏览器输出(后台使用可用_blank直接跳走):
protected function put_csv($list,$title)
{
set_time_limit(0);//防止超时
//ini_set("memory_limit", "512M");//防止内存溢出
$file_name = "exam".time().".csv";
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename='.$file_name );
header('Cache-Control: max-age=0');
$file = fopen('php://output',"a");
$limit = 100000;
$calc = 0;
foreach ($title as $v){
$tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);
}
fputcsv($file,$tit);
foreach ($list as $v){
$calc++;
if($limit == $calc){
ob_flush();
flush();
$calc = 0;
}
foreach($v as $t){
$tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
}
fputcsv($file,$tarr);
unset($tarr);
}
unset($list);
fclose($file);
exit();
}
public function daochu()
{
set_time_limit(0);//防止超时
//ini_set("memory_limit", "512M");//防止内存溢出
$headList = array('姓名', '电话', '密码', '新老');
$dataList = Db::table('up_z_old_user')->field('u_name,u_phone,u_pass,u_old')
->page(1,100000)
->select();
$this->put_csv($dataList, $headList);
}2、ajax直接保存然后返回路径(这个比较全,可以把要转换的字段对应关系做进去)
function exportExcel($file_name1,$file_name2,$title,$list,$status='',$values='')
{
set_time_limit(0);//防止超时
//ini_set("memory_limit", "512M");//防止内存溢出
$date = date('Ymd');
$dir = ROOT_PATH . 'public' . DS . 'excel/' . $date;
if(!file_exists($dir)){
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir($dir, 0700,true);
}
$file_name = $file_name1 . $file_name2 . '.csv';
$path = ("{$dir}/".iconv('UTF-8','gb2312',$file_name));
$file = fopen($path, 'w');
$limit = 100000;
$calc = 0;
foreach ($title as $v){
$tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);
}
fputcsv($file,$tit);
foreach ($list as $v){
$calc++;
if($limit == $calc){
ob_flush();
flush();
$calc = 0;
}
foreach($v as $kk => $t){
if($status){
if(in_array($kk,$status) && isset($values[$kk][$t]) && $values[$kk][$t]){
$t = $values[$kk][$t];
}
}
$tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
}
fputcsv($file,$tarr);
unset($tarr);
}
unset($list);
fclose($file);
$filePath = 'excel/' . $date . '/' . $file_name;
$result = array( 'code' => 200, 'msg' =>"/".$filePath );
return $result;
}
public function daochu()
{
set_time_limit(0);//防止超时
//ini_set("memory_limit", "512M");//防止内存溢出
if($data){
$cellname = [
'流水单号', '金额', '类型', '订单类型', '支付方式', '用户名称', '用户电话', '时间'
];
$status = ['revenue_type','pay_type','revenue_one_type'];
$values = [
'revenue_type' => [1 => '收入',2 => '退款']
,'pay_type' => [1 => '微信',2 => '支付宝',3 => '银联']
,'revenue_one_type' => [1 => '自营订单',2 => '增补订单',3 => '统购订单',4 => '取消订单']
];
$res = exportExcel('财务流水',date('Ymd'),$cellname,$data,$status,$values);
return json($res);
}else{
return json(['code'=>0,'msg'=>'此条件下无数据']);
}
} $subQuery = $db2->table("app_register_info")
->where('update_time','>=','2018-06-20 23:59:59')
->order('update_time desc')
->buildSql();
$data = $db2->table($subQuery."a")
->field("a.loginTel u_phone,concat('用户',a.loginTel) u_name,a.loginPWD u_pass,a.update_time u_time")
->group('loginTel')
->order('update_time desc')
->select(); 1、因为oneinstack的证书是自动更新的,所以查看定时任务能找到自动更新的命令:crontab -e
58 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null(目录在/root/.acme.sh;更新命令是引号里的,要带引号);
因为 LNMP 的 Let’sEncrypt 证书支持,用的是 acme.sh 程序,证书失效是acme.sh 程序9月份人家就升级 API CDN 接口了,所以升级acme.sh程序就行了:
1、cd /root/.acme.sh(根据定时任务里的目录)
2、acme.sh --upgrade(不行的话可以这样:./acme.sh --upgrade)2、升级完再手动更新一次就行了:(或者重新安装一下网站)
"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" 3、如果不能访问,别忘了开启443端口
PS:如果说是too many什么的就等一个小时,然后把/root/.acme.sh/网站 给删掉,重新装网站
PS2:如果是验证失败,把域名配置文件里的root地址链接后面的内容先去掉,更新成功了再加上
$path = 'http://221.231.139.177/appimage/allschool/CCM1201/900.jpg'; //yes
// $path = 'http://221.231.139.177/appimage/allschool/KWK25N00Y/900.jpg'; //no
$endtype = explode('.',$path);
$type = end($endtype);
$rand = time() . rand(100000,999999);
$image_name = ROOT_PATH . 'public' . DS . 'uploads/images/'.$rand.'.'.$type;
$ch = curl_init ($path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$img = curl_exec ($ch);
curl_close ($ch);
try{
//$image_name就是要保存到什么路径,默认只写文件名的话保存到根目录
$fp = fopen($image_name,'w');//保存的文件名称用的是链接里面的名称
fwrite($fp, $img);
fclose($fp);
//
//组装图片名
$key = md5(time().uuid()).'.'.$type;
$up = new Qiniu();
$data = $up->uploadFile($image_name,$key);
echo config('qiniu.domain') . $data;
unlink($image_name);
}catch(\Exception $e){
echo 'error';
}