自用PHP在线Access转html表格小功能(快速预览access)

自用PHP在线Access转html表格小功能(支持大文件上传,得到一表一文件)
本工具用于Access数据表转html下载供预览,特别适合各类程序员。
开发环境(可能只支持)Windows IIS PHP5.4 其他系统或新版本都不支持

<?php
/*
//自用PHP在线Access转html表格小功能(支持大文件上传,得到一表一文件)
//本工具用于Access数据表转html下载供预览,特别适合各类程序员。
//作者信息:yujianyue<15058593138@qq.com> 请保留版权信息
//开发环境(可能只支持)Windows IIS PHP5.4 其他系统或新版本都不支持
//不定期更新详情关注:https://Access2html.96448.cn/
*//*
广告:易名一口价出售珍藏域名
网址:https://135634.shop.ename.com/
域名	简介	类型	注册时间
yichabiao.cn	易查表(格)	易名一口价	2020/4/20
maLide.cn	码立得	易名一口价	2020/4/22
echafen.cn		易名一口价	2016/8/29
11170.cn	5数客服米	易名一口价	2012/9/5
aiyaha.com	哎呀哈	易名一口价	2014/10/9
mabida.com		易名一口价	2015/4/5
saoLide.cn	扫(码)立得	易名一口价	2021/4/21
Lidehui.cn	立得惠	易名一口价	2021/6/4
96448.cn	谐音:就来试试吧	易名一口价	2011/9/28
souLide.cn	搜立得	易名一口价	2020/4/9
*///error_reporting(0);
$biaoti = "自用PHP在线Access转html表格小功能(Access2html)";
$dlimi = "1"; //分片大小MB
$zlimi = "10"; //总文件限制MB
$upext = ".mdb|.asa";//上传格式限定;|隔开
$upexe = str_replace("|",",",$upext);//上传格式限定
$tima = date("YmdHis");
//以下只为获得功能页面网址用于上传文件网址拼接
$iport = $_SERVER['SERVER_PORT'];
$indes = $_SERVER['SCRIPT_NAME'];
$inder = dirname($_SERVER['PHP_SELF']);
$ihost = $_SERVER['HTTP_HOST'];
if(stristr("-443-","-$iport-")){
$ihosts = "https://$ihost{$inder}";
}elseif(stristr("-80-","-$iport-")){
$ihosts = "http://$ihost{$inder}";
}else{
$ihosts = "http://$ihost:{$iport}{$inder}";
}
/*
免费查询系统下载: http://96448.cn
php+mysql系列查询系统 http://sql.chalide.cn
php+Txt系列查询系统 http://txt.chalide.cn
一站式万用查询平台1:http://chalide.com
一站式万用查询平台2:http://add.12391.net
*/
$css = "<meta charset=\"utf-8\" />";
$css .= "<style>\r\n *{margin:0; padding:0; font-size:12px;}";
$css .= "table{margin:5px auto;border-left:1px solid #a2c6d3;border-top:3px solid #0180CF;width:96vw;}";
$css .= "table td{border-right:1px solid #a2c6d3;border-bottom:1px solid #a2c6d3;}";
$css .= "table td{padding:5px;word-wrap:break-word;word-break:break-all;max-width:300px;}";
$css .= ".tt{background:#e5f2fa;line-height:150%;font-size:14px;padding:5px 9px;}";
$css .= "</style>";
function jsonMsg($code,$msg,$url=''){$arr = []; $arr['code'] = $code; $arr['msg'] = $msg; $arr['url'] = $url;header('Content-type: application/json');exit(json_encode($arr));
}
function heFile($filebath,$bnum)  {$wfp = fopen($filebath, $bnum == 1 ? "wb" : "ab");$rfp = fopen($_FILES['file']['tmp_name'], "rb");$bool = false;while ($buff = fread($rfp, 4096)) {if(!$bool = fwrite($wfp, $buff)) return $bool;}fclose($wfp);fclose($rfp);return $bool;
}
function characet($data){if(!empty($data) ){    $fileType = mb_detect_encoding($data , array('UTF-8','GBK','LATIN1','BIG5')) ;   if( $fileType != 'UTF-8'){   $data = mb_convert_encoding($data ,'utf-8' , $fileType);   }   }   return $data;    
}
//如果含html则替换<>'"
function reps($stext){
$stext = str_replace(array("<", ">",), array("&lt;", "&gt;"), $stext);
$stext = str_replace(array("\r\n","\r","\n"),"<br />",$stext);
return characet($stext);
}
function db2zip($zipfile,$dbsname,$tima){
global $css;
if(!file_exists($dbsname)){ exit("存储路径出错!"); }$shuoy = "<h1>$dbsname</h1>";  $zip = new ZipArchive;
$res = $zip->open($zipfile, ZipArchive::CREATE);
if ($res === TRUE) {
//当前读取无密码数据文件
$cstr = "DRIVER=Microsoft Access Driver (*.mdb);DBQ={$dbsname}"; 
$conn = @odbc_connect($cstr,"","",SQL_CUR_USE_ODBC ) or die ("数据库连接错误!"); 
$result = odbc_tables($conn); $table=[];
while (odbc_fetch_row($result)){
if(odbc_result($result,"TABLE_TYPE")=="TABLE") $table[] =odbc_result($result,"TABLE_NAME");
}odbc_close($conn);if(count($table)<1){ exit("读取失败:空白数据表!");}
foreach($table as $rowname){$rawhtml = showbiao($dbsname,$rowname);$zip->addFromString("$rowname.html", "$css".$rawhtml);$shuoy .= "<p><a href=\"$rowname.html\" target='_blank'>$rowname</a></p>\r\n";
}
//$zip->addFile("chalide.zip","chalide.zip");
$zip->addFromString("_ReadMe.txt", $shuoy);
$zip->close(); 
} else {
exit("fail zip:ZipArchive failure");
}
}
function showbiao($dbsname,$rewname){
$cstr = "DRIVER=Microsoft Access Driver (*.mdb);DBQ={$dbsname}"; 
$conn = @odbc_connect($cstr,"","",SQL_CUR_USE_ODBC ) or die ("数据库连接错误!"); 
$query = @odbc_do($conn, "select * from [{$rewname}]"); 
$fieldcount = odbc_num_fields($query); 
$h .= "<table cellspacing=\"0\" class=\"table\"> \r\n";
$h .= "<caption>表:$rewname ({$fieldcount}列)</caption>";
$h .= '<tr class="tt">';
for( $i=0; $i<$fieldcount; $i++){ 
$info = reps(odbc_field_name($query,$i+1)); 
$h .= "<td><nobr>$info</nobr></td>";
} 
$h .= '</tr>';
while ($row = odbc_fetch_row($query)){
$iy++;  $h .= '<tr>';
for( $i=0; $i<$fieldcount; $i++){ 
$info = reps(odbc_result($query,$i+1)); 
$h .= "<td>$info</td>";
} 
$h .= '</tr>';
} 
if($iy<1){ $h .= "<tr><td colspan={$i}>没有查询到相关信息哦</td></tr>"; }
$h .= '</table>';
odbc_close($conn);
return $h;
}if($_FILES['file']['tmp_name'] && $_POST['blob_num']){$filex = $_FILES['file'];$filen = (isset($_POST['file_name']))?Trim($_POST['file_name']):'';$timen = (isset($_POST['nowYmd']))?Trim($_POST['nowYmd']):date("YmdHis").$uniqid();
if ($filex["error"] > 0){
$fer = []; $ercode = $filex["error"];
$fer["1"] = '上传的文件超过了upload_max_filesize选项限制的值';
$fer["2"] = '上传文件的大小超过了表单MAX_FILE_SIZE选项指定的值';
$fer["3"] = '上传异常,文件只有部分被上传';
$fer["4"] = '文件空白或者说没有文件被上传';
$fer["6"] = '上传的临时文件丢失';
$fer["7"] = '文件写入失败建议检查文件夹读写权限';
if($fer[$ercode]){
jsonMsg("0","Error 00".$ercode.":".$fer[$ercode]);
}else{
jsonMsg("0","Error 00".$ercode.":未知上传错误!");
}
}else{
$info = pathinfo($filen); $tape = strtolower($info['extension']);
if(!stristr("|$upext|","|.{$tape}|")){ jsonMsg("0","Error 010,后缀.{$tape}不支持!");}
if($filex["size"]>$dlimi*1024*1024){ jsonMsg("0","Error 011,单片文件大小超{$dlimi}MB!");}
if($_POST["filesize"]>$zlimi*1024*1024){ jsonMsg("0","Error 012,文件总大小超{$zlimi}MB!");}
$filepath = "./upload/";  //存储路径
if(!is_dir($filepath)) { @mkdir($filepath,0755,true);}
if(!is_dir($filepath)) { jsonMsg("0","Error 015,文件夹失败{$filepath}!");}
$filebath = $filepath . "$timen.$tape";
$bnum = (isset($_POST['blob_num']))?addslashes($_POST['blob_num']):'';
$tnum = (isset($_POST['total_blob_num']))?addslashes($_POST['total_blob_num']):'';
$fnum = (isset($_POST['filesize']))?addslashes($_POST['filesize']):'0';
if(!is_numeric($bnum) || !is_numeric($tnum)) jsonMsg("0","Error 0161,分片参数得数字!");
if(!is_numeric($fnum) ) jsonMsg("0","Error 0162,参数filesize得数字!");$urlx = $ihosts.Ltrim($filebath,".").".zip";
if("@$bnum" == "@1" && "@$tnum"=="@1"){move_uploaded_file($_FILES['file']['tmp_name'],$filebath);//直接更名保存$fsize=filesize($filebath);$fzip = db2zip($filebath.".zip",$filebath,$tima);if($fnum==$fsize) jsonMsg("2","OK",$urlx); else jsonMsg("2","可能异常!",$urlx);
}elseif($bnum<$tnum && $tnum>1){heFile($filebath,$bnum);jsonMsg("1","waiting $bnum/$tnum !");
}elseif($bnum==$tnum && $tnum>1){heFile($filebath,$bnum);$fsize=filesize($filebath);$fzip = db2zip($filebath.".zip",$filebath,$tima);if($fnum==$fsize) jsonMsg("2","OK@$filebath",$urlx); else jsonMsg("2","可能异常!",$urlx);
}else{jsonMsg("0","Error 017,分片异常:$bnum / $tnum!");
}
}
}?>
<!DOCTYPE html>
<html>
<head><title><?php echo "$biaoti"; ?></title><style type="text/css">body {font-family: Arial, sans-serif;font-size: 14px;background-color: #f2f2f2;}h3{margin: 0;font-size: 18px;line-height: 1.8;color: blue;}p {margin: 0; font-size: 14px; line-height: 1.5;}#urls {color: blue;}.container {margin: 50px auto;padding: 20px 20px 50px 20px;background-color: #fff;border-radius: 5px;box-shadow: 0 0 10px rgba(0,0,0,0.3);max-width: 775px;}#mask{position: fixed;   top: 0;   left: 0;   width: 100%;   height: 100%;background-color: rgba(0,0,0,0.5);   display: none;}#dialog{position: fixed;   top: 50%;   left: 50%;min-width: 300px;   transform: translate(-50%,-50%);background-color: #fff;   padding: 20px;   border-radius: 5px;box-shadow: 0 0 10px rgba(0,0,0,0.5);   display: none;}#dialog .btn, .bts{display: flex;   float: left;   padding: 5px 8px;background-color: #007bff;   color: #fff;   border-radius: 3px;cursor: pointer;   margin: 10px 10px 10px 0;}#dialog .btn:hover, .bts:hover{background-color: #0069d9;}#progress{width: 100%; min-width: 300px;  height: 20px;background-color: #f7f7f7;box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);border-radius: 4px;background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);}.finish {background-color: #149bdf;background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size: 20px 20px;height: 100%;}</style>
</head>
<body>
<div class="container"><h3><?php echo "$biaoti"; ?></h3><p>自用在线Access转html表格小功能(支持大文件上传,得到一表一文件)</p><p>说明:限制大小<?php echo $zlimi;?>Mb;支持<?php echo $upexe?>格式上传!</p><?php echo '<p>作用:上传Access数据得到各表html表格数据!</p>'; ?><?php echo '<p>环境:可能仅支持WIN PHP5.4/Linux不支持/高版本PHP不支持!</p>'; ?><div style="margin-bottom:20px;display:block;"><button onclick="up('file')" class="bts">上传</button></div><input type="file" id="file" accept="<?php echo $upexe?>" style="display:none;">
</div><div id="mask"></div><div id="dialog"><div id="progress"><div id="uend" class="finish" style="width: 0%;" progress="0"></div></div><div id="back"></div><div id="buts"><button class="btn" id="ok" onclick="hideDialog()">确定</button></div></div><script type="text/javascript">
function $(Obj){return document.getElementById(Obj);}
function up(Obj){ $(Obj).value=""; $(Obj).click();}var mask = $('mask');function showDialog(){mask.style.display = 'block';dialog.style.display = 'block';}function hideDialog(){mask.style.display = 'none';dialog.style.display = 'none';}var tici = Date.parse(new Date())/1000;var ufile = $("file");var jdt_s = $('uend');var ipt_s = $('back');ufile.onchange = function () {tici = tici + 1; $("back").innerHTML="";jdt_s.style.width = "1%";  jdt_s.innerHTML = "";showDialog();var vupload = new Upload(jdt_s, ipt_s);//后移解决二次选择文件上传失败vupload.addFileAndSend(this);};function Upload(jdt, ipt) {const LENGTH = 1024 * 1024 * <?php echo $dlimi;?>;//分片上传每片数量MBvar start = 0; var end = start + LENGTH;var blob; var blob_num = 1;this.addFileAndSend = function (that) {var file = that.files[0];
if(!file){ ipt_s.innerHTML = "<b>未上传:</b>未选择文件!"; return false;}
if (!/(<?php echo $upext;?>)$/.test(file.name)){ipt_s.innerHTML = '<b>未上传:</b>仅支持后缀格式(<?php echo $upexe;?>)!'; return false;
}
if (file.size > <?php echo $zlimi;?> * 1024 * 1024){ipt_s.innerHTML = '<b>未上传:</b>文件大小超<?php echo $zlimi;?>MB限制!'; return false;
}blob = cutFile(file);sendFile(blob, file);blob_num += 1;};function cutFile(file) {var file_blob = file.slice(start, end);start = end;  end = start + LENGTH;return file_blob;}function sendFile(blob, file) {var xhr = new XMLHttpRequest();var fdata = new FormData();var total_blob_num = Math.ceil(file.size / LENGTH);fdata.append('file', blob);fdata.append('blob_num', blob_num);fdata.append('filesize', file.size);fdata.append('nowYmd', tici);fdata.append('total_blob_num', total_blob_num);fdata.append('file_name', file.name);xhr.open('POST', '?act=up&t='+Math.random(), false);xhr.onreadystatechange = function () {var progress;  var progressObj = jdt;if (total_blob_num === 1) {progress = '100%';} else {progress = Math.ceil((blob_num / total_blob_num) * 10000) / 100 + '%';}progressObj.style.width = progress;progressObj.innerHTML = progress;var tt = setTimeout(function () {var jj = JSON.parse(xhr.response);console.log(jj);if (jj.code == 2 || jj.code == 1) {if (start < file.size) {blob = cutFile(file);sendFile(blob, file);blob_num += 1;}
if (jj.code == 2){ $("back").innerHTML='<h3>上传成功:</h3>下载:<a href="'+jj.url+'" target="_blank">'+jj.url+'</a>';}}
if (jj.code == 0){ $("back").innerHTML='<h3>上传失败:</h3><b>'+jj.msg+'</b>';}xhr = undefined;fdata = undefined;}, 500);};xhr.send(fdata);}}
</script></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇五分生信临床模型预测文章代码复现——Figure 10.机制及肿瘤免疫浸润(十)——Cibersort——完结

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

关于目标检测中按照比例将数据集随机划分成训练集和测试集

1. 前言 在做目标检测任务的时候&#xff0c;不少网上的数据&#xff0c;没有划分数据集&#xff0c;只是将数据和标签放在不同的文件夹下&#xff0c;没有划分数据集 虽然代码简单&#xff0c;每次重新编写还是颇为麻烦&#xff0c;这里记录一下 如下&#xff0c;有的数据集…

常见的缓存淘汰算法

FIFO、LRU、LFU 和 WindowTinyLFU 是常见的缓存淘汰算法&#xff0c;用于决定在缓存容量不足时应该如何选择要淘汰的数据。 常见的缓存淘汰算法包括&#xff1a; FIFO&#xff08;先进先出&#xff09;算法&#xff1a;按照数据最早进入缓存的顺序进行淘汰。即&#xff0c;最先…

HNU-数据库系统-实验3-数据库设计

数据库系统 课程实验3数据库设计 计科210X 甘晴void 202108010XXX 目录 文章目录 数据库系统 课程实验3<br>数据库设计实验目的实验内容实验重难点实验环境实验过程&#xff08;0&#xff09;数据库需求描述&#xff08;1&#xff09;数据库概念结构设计E-R图实体图书馆…

openGauss学习笔记-188 openGauss 数据库运维-常见故障定位案例-core问题定位

文章目录 openGauss学习笔记-188 openGauss 数据库运维-常见故障定位案例-core问题定位188.1 磁盘满故障引起的core问题188.1.1 问题现象188.1.2 原因分析188.1.3 处理办法 188.2 GUC参数log_directory设置不正确引起的core问题188.2.1 问题现象188.2.2 原因分析188.2.3 处理办…

利用ChatGLM3构建Prompt实现Text2SQL

之前使用ChatGLM3的自定义工具实现了查询MySQL数据库&#xff0c;但感觉功能还是比较受限。 https://blog.csdn.net/weixin_44455388/article/details/135270879?spm1001.2014.3001.5501 使用ChatGLM3实现Text2SQL 前言Text2SQL的构建第一阶段&#xff1a;SQL脚本构建&#xf…

软件工程_复习

软件工程 软件危机(1968 60年代) 产生软件危机的原因: 一方面与软件本身的特点有关,另一方面也和软件开发和维护的方法不正确有关。 与软件本身特点有关: 1.软件不同于硬件,软件是计算机系统中的逻辑部件,缺乏“可见性”,管理和控制软件开发过程相当困难 2.软件在运行过…

Python笔记06-文件操作

文章目录 文件的编码文件读取文件写入文件追加 文件的编码 编码技术即&#xff1a;翻译的规则&#xff0c;记录了如何将内容翻译成二进制&#xff0c;以及如何将二进制翻译回可识别内容。算机中有许多可用编码&#xff1a;UTF-8、GBK、Big5等 不同的编码&#xff0c;将内容翻译…

typescript递归处理

typescript是一种类型强约束的语言&#xff0c;一般来讲定义类型时都要明确指定类型的数据结构。而如果数据结构中涉及到不知道基层嵌套的递归时&#xff0c;就会有一些麻烦。 在 https://stackoverflow.com/questions/51657815/recursive-array-type-typescript 有一个回答…

Java Swing手搓坦克大战遇到的问题和思考

1.游戏中的坐标系颇为复杂 像素坐标系还有行列坐标&#xff0c;都要使用&#xff0c;这之间的互相转化使用也要注意 2.游戏中坦克拐弯的处理&#xff0c;非常重要 由于坦克中心点是要严格对齐到一条网格线&#xff0c;并沿着这条线前进的&#xff0c;如果拐弯不做处理&#…

柠檬Lemon测评机的配置和测试方法

柠檬Lemon测评机的配置和测试方法 只需3步,即可配置好柠檬 第一步:选择g++,点击下一步 第二步:找到g++的目录,添加编译器,点击下一步 第三步:检查结果,点击完成。(此时,配置完成) 只需3步,即可用柠檬做考试测试 第一步:新建比赛

SpringCloud系列篇:核心组件之注册中心组件

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.注册中心组件是什么 二.注册中心…

大模型机器人原理解析:如何从RT/RT2、Berkeley Gello到发展到斯坦福Mobile ALOHA、Google家务机器人

前言 23年7月&#xff0c;我在朋友圈评估Google的RT2说道&#xff1a; “大模型正在革新一切领域啊&#xff0c;超帅&#xff0c;通过大模型不仅能理解“人话”&#xff0c;还能对“人话”进行推理&#xff0c;并转变为机器人能理解的指令&#xff0c;从而分阶段完成任务。回…

opencv006图像处理之仿射变换(旋转,缩放,平移)

空间变换中的仿射变换对应着五种变换&#xff0c;平移&#xff0c;缩放&#xff0c;旋转&#xff0c;翻转&#xff0c;错切。而这五种变化由原图像转变到变换图像的过程&#xff0c;可以用仿射变换矩阵进行描述。而这个变换过程可以用一个2*3的矩阵与原图进行相乘得到。关键就是…

5年经验之谈 —— 探索自动化测试用例设计粒度!

自动化测试用例的粒度指的是测试用例的细致程度&#xff0c;即每个测试用例检查的功能点的数量和范围。 通常&#xff0c;根据测试用例的粒度&#xff0c;可以被分为3种不同的层次&#xff0c;从更低层次的细粒度到更高层次的粗粒度。 第一种&#xff1a;单元测试 - 细粒度 单…

16、Kubernetes核心技术 - 节点选择器、亲和和反亲和

目录 一、概述 二、节点名称 - nodeName 二、节点选择器 - nodeSelector 三、节点亲和性和反亲和性 3.1、亲和性和反亲和性 3.2、节点硬亲和性 3.3、节点软亲和性 3.4、节点反亲和性 3.5、注意点 四、Pod亲和性和反亲和性 4.1、亲和性和反亲和性 4.2、Pod亲和性/反…

chatGPT带你学习设计模式 (二)抽象工厂模式(创建型模式) GURU

深入理解抽象工厂模式 引言 在面向对象编程中&#xff0c;对象的创建是一个常见且关键的挑战。尤其在需要管理一系列相关对象的创建时&#xff0c;传统的对象创建方法&#xff08;如直接使用 new 关键字&#xff09;可能导致代码的高耦合和低灵活性。这时&#xff0c;抽象工厂…

jmeter连接数据库

下载jdbc 在浏览器输入 mysql jdbc官网 &#xff1b; 网址&#xff1a;MySQL :: MySQL Connectors 点击 Download 查看自己mysql服务的版本&#xff0c;找到对应版本的jdbc 所以下载5版本的jdbc 安装jdbc&#xff08;绿色版安装&#xff09; 操作jmeter 打开jmeter&#xff0…

前端框架中的状态管理(State Management)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

GEE:随机数

作者&#xff1a;CSDN _养乐多_ 本文将介绍在 Google Earth Engine&#xff08;GEE&#xff09;上生成随机数的 API&#xff0c;可以指定随机数的生成范围、类型&#xff08;整型、浮点型&#xff09;、分布方式&#xff08;均匀分布、正态分布&#xff09;。 文章目录 一、随…