php 上传文件 cvs文件
2016-07-08 21:57
489 查看
html代码:
target="uploadcvs",添加target时调试代码不好调试,建议调试时去掉这行代码
php代码:
js代码:
Upload.php文件
转载自:http://www.9958.pw/post/php_upload_cvs
<form action="/message/index/csv" encType="multipart/form-data" method="post" target="uploadcvs"> <div><input type="file" name="csvfile"/> <input type="submit" value="上传"></div> <div id="upload_info" style="width:100%;border:1px solid #809db9;display:none" ></div> </form>
target="uploadcvs",添加target时调试代码不好调试,建议调试时去掉这行代码
php代码:
public function csvAction(){ //获取上传文件名$fileinfo,包含文件的扩展 $fileinfo = pathinfo($_FILES['csvfile']['name']); //判断文件扩展是不是csv if(!in_array(strtolower($fileinfo['extension']),array('csv'))){ $feed = array('status'=>'ext'); //判断文件的大小 }else if($_FILES['csvfile']['size'] > 1*1024*1024){ $feed = array('status'=>'size'); }else{ //成功时数组 $succdata = array(); //错误时数组 $errdata = array(); //计数,计算多少行 $count = 0; //打开临时文件,只读形式 $handle = fopen($_FILES['csvfile']['tmp_name'],"r"); //获取数据库中的username信息 $userMongo = new Application_Model_DbTable_MongoUsers(); $dbUsers = $userMongo->findAll(array(),array('login.username'=>true)); //把用户的username信息写入$users $users = array(); foreach($dbUsers as $user){ if(isset($user['login']['username'])) $users[] = $user['login']['username']; } //逐行读取csv文件信息fgetcsv,fgetcsv($handle) while ($row = fgetcsv($handle)) { //读一行count就累加,这样就可以知道读了多少行 $count ++ ; foreach($users as $user){ //判断$row[0]是不是手机号&&$row[0]是不是等于$user也就是$users中是否有这条记录 //判断成功时,把这条手机号写入数组$succdata if(preg_match('/^1(3|4|5|8)\d{9}$/',$row[0]) && $user==$row[0]){ $succdata[$row[0]] = (string)$row[0]; break; } } //判断$succdata[$row[0]]是否存在,不存在写入$errdata if(!isset($succdata[$row[0]])){ $errdata[$row[0]] = $row[0]; } } //关闭文件 fclose($handle); //把上传的cvs文件存到自己的项目中 $url = $this->_helper->Upload->msgcsv($_FILES['csvfile'], $succdata, $errdata); //$count信息是关于csv文件有多少行记录,成功多少行,失败多少行 $count = array('original'=>$count, 'success'=>count($succdata), 'error'=>count($errdata)); //$feed,这里状态是成功的,count, 与 url 。 //count是为了查看是否有失败的,url是为了查看失败的列表信息(因为上传时换回了3个文件,查看失败文件) $feed = array('status'=>'succ','count'=>$count, 'url'=>$url); } //把数组json化 json_encode() json_encode()json编码 $feed = json_encode($feed); //callback()函数 <script>parent.callback(".$feed.")</script> echo "<script>parent.callback(".$feed.")</script>"; exit; }
js代码:
//data就是".$feed." function callback(data){ try{ if(data.status =='ext'){ alert('文件类型不正确'); return false; }else if(data.status == 'size'){ alert('文件不能超过1M'); return false; }else if(data.status == 'succ'){ //parseInt将字符串转化为整型 parseInt var html = parseInt(data.count.error) > 0 ? ' <a href="<?php echo UPLOAD_IMAGE_PATH;?>'+data.url.error+'">查看失败列表</a>' : ''; //成功的条数,失败的条数 $('#upload_info').html('成功导入:'+data.count.success+';失败:'+data.count.error+html); $('#upload_info').show(); $('input[name=step3_hidden]').val(data.url.success); } }catch(e){ alert('解析出错,请检查文件格式.'); } return false; }
Upload.php文件
<?php //上传处理 class Ata_Controller_Action_Helper_Upload extends Zend_Controller_Action_Helper_Abstract { //通知csv文件 public function MsgCsv(&$source, $succdata, $errdata){ //原cvs保留 //文件存放目录 $publicPath = realpath(APPLICATION_PATH."/../public/upload").'/'; $csvPath = "msgcsv/".date('Y').'/'.date('m')."/"; $path = $publicPath.$csvPath; //创建目录 $this->mkdirs($path); //uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。uniqid() $filename = uniqid(); //获取文件的扩展名 $ext = pathinfo($source['name'], PATHINFO_EXTENSION); //创建空文件,目录,文件名,扩展 $filepath = $path.$filename.'_org.'.$ext; //move_uploaded_file(),将上传的文件移动到新位置 move_uploaded_file($source['tmp_name'], $filepath); //正确csv创建 $content = ''; //创建空文件,目录,文件名,扩展 $succfile = $path.$filename.'_succ.'.$ext; //把$succdata的内容写入$content; foreach($succdata as $row){ //连接字符串等同$content = $content.$row."\n" $content .= $row."\n"; } $content = trim($content,"\n"); //file_put_contents(),把一个字符串写入文件中 file_put_contents($succfile, $content); //错误csv创建 $content = ''; $errfile = $path.$filename.'_err.'.$ext; foreach($errdata as $row){ $content .= $row."\n"; } $content = trim($content,"\n"); file_put_contents($errfile, $content); //返回3个文件(用于查看失败列表与把成功的列表内容写入隐藏域中传递到数据库中) return array( 'orginal' => $csvPath.$filename.'_org.'.$ext, 'success' => $csvPath.$filename.'_succ.'.$ext, 'error' => $csvPath.$filename.'_err.'.$ext ); } //删除文件 //获取csv文件的前缀名 public function rmMsgCsv($path){ //$prefix获取csv文件的前缀名 $prefix = str_replace('_succ.csv','',$path); //删除三个文件 unlink($prefix.'_org.csv'); unlink($prefix.'_succ.csv'); unlink($prefix.'_err.csv'); } public function mkdirs($dir, $mode = 0777) { return is_dir($dir) or ($this->mkdirs(dirname($dir)) and mkdir($dir, $mode)); } }
转载自:http://www.9958.pw/post/php_upload_cvs
相关文章推荐
- PHP面向对象知识总结
- H264 RTP封包原理(转载)
- 切莫让CDN缓存你的动态文件
- php中将12567890装化为1,234,567,890
- 将一个字符串(1234567890)转换成(1,234,567,890)每三个一组用逗号隔开
- 写一个方法,将一个字符串(1234567890)转换成(1,234,567,890)每三个一组用逗号隔开()
- laravel中邮件的发送以及model的使用
- Yii 2 load() 和 save()
- 6步实现laravel图片上传
- php+jq(plupload插件)+ajax多图上传并入库
- 5 个 Laravel Eloquent 小技巧
- InputStreamReader和OutputStreamWriter的用法
- PHP报错“Parse error: syntax error, unexpected T_VARIABLE”的解决办法
- PHP之双向链表(SplDoublyLinkedList)简介
- 配置云服务器 FTP 服务
- Snoopy.class.php
- 我的第一个thinkphp
- php 学习之对象
- laravel的模板中修改编辑的view表单form需要注意的问题
- php三元运算符?:的简写形式