PHP实现图片批量打包下载功能
上次遇到一个需要打包下载批量图片的问题,找了一下发现这个好方法,记录一下。
首先新建一个zipfile打包类:
代码如下 | 复制代码 |
<?php classzipfile { var$datasec=array(); var$ctrl_dir=array(); var$eof_ctrl_dir="\x50\x4b\x05\x06\x00\x00\x00\x00"; var$old_offset= 0;
functionunix2_dostime($unixtime= 0){ $timearray= ($unixtime== 0) ?getdate() :getdate($unixtime); if($timearray['year'] < 1980){ $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } return(($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); } functionadd_file($data,$name,$time= 0){ $name=str_replace('\\','/',$name);
$dtime=dechex($this->unix2_dostime($time)); $hexdtime='\x'.$dtime[6] .$dtime[7] .'\x'.$dtime[4] .$dtime[5] .'\x'.$dtime[2] .$dtime[3] .'\x'.$dtime[0] .$dtime[1]; eval('$hexdtime = "'.$hexdtime.'";');
$fr="\x50\x4b\x03\x04"; $fr.="\x14\x00"; $fr.="\x00\x00"; $fr.="\x08\x00"; $fr.=$hexdtime;
$unc_len=strlen($data); $crc= crc32($data); $zdata= gzcompress($data); $zdata=substr(substr($zdata, 0,strlen($zdata)- 4), 2); $c_len=strlen($zdata); $fr.= pack('V',$crc); $fr.= pack('V',$c_len); $fr.= pack('V',$unc_len); $fr.= pack('v',strlen($name)); $fr.= pack('v', 0); $fr.=$name;
$fr.=$zdata; $fr.= pack('V',$crc); $fr.= pack('V',$c_len); $fr.= pack('V',$unc_len);
$this->datasec [] =$fr;
$cdrec="\x50\x4b\x01\x02"; $cdrec.="\x00\x00"; $cdrec.="\x14\x00"; $cdrec.="\x00\x00"; $cdrec.="\x08\x00"; $cdrec.=$hexdtime; $cdrec.= pack('V',$crc); $cdrec.= pack('V',$c_len); $cdrec.= pack('V',$unc_len); $cdrec.= pack('v',strlen($name)); $cdrec.= pack('v', 0); $cdrec.= pack('v', 0); $cdrec.= pack('v', 0); $cdrec.= pack('v', 0); $cdrec.= pack('V', 32);
$cdrec.= pack('V',$this->old_offset); $this->old_offset +=strlen($fr);
$cdrec.=$name;
$this->ctrl_dir[] =$cdrec; } functionadd_path($path,$l= 0){ $d= @opendir($path); $l=$l> 0 ?$l:strlen($path) + 1; while($v= @readdir($d)){ if($v=='.'||$v=='..'){ continue; } $v=$path.'/'.$v; if(is_dir($v)){ $this->add_path($v,$l); }else{ $this->add_file(file_get_contents($v),substr($v,$l)); } } } functionfile(){ $data= implode('',$this->datasec); $ctrldir= implode('',$this->ctrl_dir); return$data.$ctrldir.$this->eof_ctrl_dir . pack('v', sizeof($this->ctrl_dir)) . pack('v', sizeof($this->ctrl_dir)) . pack('V',strlen($ctrldir)) . pack('V',strlen($data)) ."\x00\x00"; }
functionadd_files($files){ foreach($filesas$file){ if(is_file($file)){ $data= implode("", file($file)); $this->add_file($data,$file); } } } functionoutput($file){ $fp=fopen($file,"w"); fwrite($fp,$this->file ()); fclose($fp); } }
//下面是实例操作过程: $dfile= tempnam('/tmp','tmp');//产生一个临时文件,用于缓存下载文件 $zip=newzipfile(); //---------------------- $filename='image.zip'//下载的默认文件名
//以下是需要下载的图片数组信息,将需要下载的图片信息转化为类似即可 $image=array( array('image_src'=>'pic1.jpg','image_name'=>'图片1.jpg'), array('image_src'=>'pic2.jpg','image_name'=>'pic/图片2.jpg'), );
foreach($imageas$v){ $zip->add_file(file_get_contents($v['image_src']),$v['image_name']); // 添加打包的图片,第一个参数是图片内容,第二个参数是压缩包里面的显示的名称, 可包含路径 // 或是想打包整个目录 用 $zip->add_path($image_path); } //---------------------- $zip->output($dfile);
// 下载文件 ob_clean(); header('Pragma: public'); header('Last-Modified:'.gmdate('D, d M Y H:i:s') .'GMT'); header('Cache-Control:no-store, no-cache, must-revalidate'); header('Cache-Control:pre-check=0, post-check=0, max-age=0'); header('Content-Transfer-Encoding:binary'); header('Content-Encoding:none'); header('Content-type:multipart/form-data'); header('Content-Disposition:attachment; filename="'.$filename.'"');//设置下载的默认文件名 header('Content-length:'.filesize($dfile)); $fp=fopen($dfile,'r'); while(connection_status() == 0 &&$buf= @fread($fp, 8192)){ echo$buf; } fclose($fp); @unlink($dfile); @flush(); @ob_flush(); exit(); ?> |
本文介绍了PHP用正则匹配form表单中所有元素的类型和属性值实例代码,非常实用,有兴趣的同学快来看看吧
最近工作中遇到一个需求,需要在正则匹配页面中,所有可能存在的 form 表单的元素,可能有 input,action,select,textarea等等所有可能的元素,本文给出一个代码示例。感兴趣的朋友们可以参考学习。
实例代码如下
假设页面 1.html 的网页源代码是:
代码如下 | 复制代码 |
<!DOCTYPE html> <html> <head> <metacharset="utf-8"/> <title>一个含有 form 表单的登录注册页面</title> <styletype="text/css"> *{padding:0;margin:0;font-size:12px;} .tbl{margin:20px auto;border:1px solid #AACCEE;padding:30px 30px;border-radius:4px;} .tbl td{line-height:30px;vertical-align:top;} textarea{resize:none;height:60px;} </style> </head> <body> <formaction="register.php"method="post"> <inputtype="hidden"name="cookie"value="SJKjki80KJ8jkl2"/> <tablecellpadding="0"cellspacing="0"class="tbl"> <tr> <thcolspan="2">注册</th> </tr> <tr> <td>昵称:</td> <td><inputtype="text"name='name'required=""/></td> </tr> <tr> <td>密码:</td> <td><inputname="password"type="password"required="required"/></td> </tr> <tr> <td>年龄:</td> <td><inputname="age"value="22"required="required"></td> </tr> <tr> <td>性别:</td> <td> <inputtype="radio"name="sex"value="1"/> 男 <inputtype="radio"name="sex"value="0"/> 女 </td> </tr> <tr> <td>地区:</td> <td> <selectname="area"> <optionvalue="jiangsu">江苏</option> <optionvalue="shandong">山东</option> <optionvalue="fujian">福建</option> <optionvalue="beijing">北京</option> </select> </td> </tr> <tr> <td>城市:</td> <td> <selectname="city"> <optionvalue="qingdao">青岛</option> <optionvalue="longyan">龙岩</option> <optionvalue="beijing">北京</option> <optionvalue="wuxi">无锡</option> </select> </td> </tr> <tr> <td>兴趣:</td> <td> <inputtype="checkbox"name="xingqu[]"value="1"> 篮球 <inputtype="checkbox"name="xingqu[]"value="2"> 足球 <inputtype="checkbox"name="xingqu[]"value="3"> 跳高 </td> </tr> <tr> <td>照片:</td> <td><inputtype="file"name="photo"/></td> </tr> <tr> <td>简介:</td> <td><textareaname="summary"required="">这里填入个人简介</textarea></td> </tr> <tr> <td>备注:</td> <td><textareaname="remark"required="">1</textarea></td> </tr> <tr> <tdcolspan="2"><inputtype="submit"name="register"value="注册"></td> </tr> </table> </form> <formaction="login.php"method="post"> <tablecellpadding="0"cellspacing="0"class="tbl"> <tr> <thcolspan="2">登录</th> </tr> <tr> <td>昵称:</td> <td><inputtype="text"name='name'required="required"/></td> </tr> <tr> <td>密码:</td> <td><inputname="password"type="password"required="required"/></td> </tr> <tr> <td>备注:</td> <td><textareaname="remark"required="">2</textarea></td> </tr> <tr> <tdcolspan="2"><inputtype="submit"name="register"value="登录"></td> </tr> </table> </form> </body> </html> |
我们需要获取到这个页面所有 form 表单,及每个 form 表单所包含的各类表单元素,例如:input,select,textarea等等。
匹配的源代码是:
代码如下 | 复制代码 |
$content=file_get_contents('1.html'); $arr_form= get_page_form_data($content); if(empty($arr_form)) { echo'抱歉!未匹配到 form 表单元素'; }else { foreach($arr_formas$k=>$v) { echo'form'.($k+1).':<br />'; if(!empty($v['action'])) { echo'----action:<br />'; echo'--------'.$v['action'].'<br />'; } if(!empty($v['method'])) { echo'----method:<br />'; echo'--------'.$v['method'].'<br />'; } if(!empty($v['inputs'])) { echo'----inputs:<br />'; foreach($v['inputs']as$key=>$value) { echo'--------name:'.$value['name'].' type:'.$value['type'].' value:'.$value['value'].'<br />'; } } if(!empty($v['textarea'])) { echo'----textarea:<br />'; foreach($v['textarea']as$key=>$value) { echo'--------name:'.$value['name'].' value:'.$value['value'].'<br />'; } } if(!empty($v['select'])) { echo'----select:<br />'; for($m= 0;$m<count($v['select']);$m++) { echo'--------name:'.$v['select'][$m]['name'].'<br />'; if(!empty($v['select'][$m]['option'])) { foreach($v['select'][$m]['option']as$key=>$value) { echo'------------value:'.$value.'<br />'; } } } } } } // 获取页面中的 form 表单中的所有 input、textarea 元素中 name、value、type 等属性值 functionget_page_form_data($content) { $arr_form=array(); $form= regular_form_tags($content); for($i= 0;$i<count($form[0]);$i++) { $arr_form[$i]['action'] = regular_form_action($form[1][$i]); $arr_form[$i]['method'] = regular_form_method($form[1][$i]); $input= regular_input_tags($form[2][$i]); for($j= 0;$j<count($input[0]);$j++) { $arr_form[$i]['inputs'][$j]['name'] = regular_input_name($input[0][$j]); $arr_form[$i]['inputs'][$j]['type'] = regular_input_type($input[0][$j]); $arr_form[$i]['inputs'][$j]['value'] = regular_input_value($input[0][$j]); } $textarea= regular_textarea_tags($form[2][$i]); for($k= 0;$k<count($textarea);$k++) { $arr_form[$i]['textarea'][$k]['name'] = regular_textarea_name($textarea[$k]); $arr_form[$i]['textarea'][$k]['value'] = regular_textarea_value($textarea[$k]); } $select= regular_select_tags($form[2][$i]); for($l= 0;$l<count($select[0]);$l++) { $arr_form[$i]['select'][$l]['name'] = regular_select_name($select[1][$l]); $option= regular_option_tags($select[2][$l]); for($n= 0;$n<count($option[$l]);$n++) { $arr_form[$i]['select'][$l]['option'][$n] = regular_option_value($option[$l][$n]); } } } return$arr_form; } // 正则匹配 form 标签 functionregular_form_tags($string) { $pattern='/<form(.*?)>(.*?)<\/form>/si'; preg_match_all($pattern,$string,$result); return$result; } // 正则匹配 form 标签的 action 属性值 functionregular_form_action($string) { $pattern='/action[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 form 标签的 method 属性值 functionregular_form_method($string) { $pattern='/method[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 input 标签 functionregular_input_tags($string) { $pattern='/<input.*?\/?>/si'; if(preg_match_all($pattern,$string,$result)) { return$result; } returnnull; } // 正则匹配 input 标签的 name 属性值 functionregular_input_name($string) { $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull;
} // 正则匹配 input 标签的 type 属性值 functionregular_input_type($string) { $pattern='/type[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 input 标签的 value 属性值 functionregular_input_value($string) { $pattern='/value[\s]*?=[\s]*?([\'\"])(.*?)\1/'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 textarea 标签 functionregular_textarea_tags($string) { $pattern='/(<textarea.*?>.*?<\/textarea[\s]*?>)/si'; if(preg_match_all($pattern,$string,$result)) { return$result[1]; } returnnull; } // 正则匹配 textarea 标签的 name 属性值 functionregular_textarea_name($string) { $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 textarea 标签的 name 属性值 functionregular_textarea_value($string) { $pattern='/<textarea.*?>(.*?)<\/textarea>/si'; if(preg_match($pattern,$string,$result)) { return$result[1]; } returnnull; } // 正则匹配 select 标签 functionregular_select_tags($string) { $pattern='/<select(.*?)>(.*?)<\/select[\s]*?>/si'; preg_match_all($pattern,$string,$result); return$result; } // 正则匹配 select 标签的 option 子标签 functionregular_option_tags($string) { $pattern='/<option(.*?)>.*?<\/option[\s]*?>/si'; preg_match_all($pattern,$string,$result); return$result; } // 正则匹配 select 标签的 name 属性值 functionregular_select_name($string) { $pattern='/name[\s]*?=[\s]*?([\'\"])(.*?)\1/si'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } // 正则匹配 select 的子标签 option 的 value 属性值 functionregular_option_value($string) { $pattern='/value[\s]*?=[\s]*?([\'\"])(.*?)\1/si'; if(preg_match($pattern,$string,$result)) { return$result[2]; } returnnull; } |
运行效果如下图所示:
这样我们就可以实现获取任意一个页面中的 form 表单所有存在的元素啦!
Laravel相信很多人都知道,它在大家的生活中还是很常见得到。一些用户可能不知道Laravel提交表单怎么实现,下面文章就给大家带来Laravel实现表单提交教程,感兴趣的下面一起来看看。首先,先做一个简单的表单页面
代码如下 | 复制代码 |
<html> <head> </head> <body> <formaction="/submit"method="post"> <inputtype="text"name="a"></input> <inputtype="text"name="b"></input> <inputtype="text"name="c"></input> <inputtype="submit"></input> </form> </body> <html> |
编辑一条路由
代码如下 | 复制代码 |
Route::post('/submit','FormController@store'); |
创建一个控制器
代码如下 | 复制代码 |
<?php
namespaceApp\Http\Controllers;
//use Illuminate\Http\Request;
useApp\Http\Requests; useRequest;
classFormControllerextendsController { publicfunctionstore(){ //var_dump(Request::all()); $input=Request::all(); echo$input['a'].PHP_EOL; echo$input['b'].PHP_EOL; echo$input['c'].PHP_EOL; } } |
小编推荐的这篇文章介绍了php获取今日开始时间和结束时间的方法,非常实用,有兴趣的同学快来看看吧
代码如下 | 复制代码 |
$begintime=date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d'),date('Y'))); $endtime=date("Y-m-d H:i:s",mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1); |
相关文章
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- Photoshop的这一款软件小编相信很多的人都已经是使用过了吧,那么今天小编在这里就给大家带来了用Photoshop软件制作枪战电影海报的教程,想知道制作步骤的玩家们,那么下面...2016-09-14
- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
- 图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
- 共享一段使用PHP下载CSS文件中的图片的代码 复制代码 代码如下: <?php //note 设置PHP超时时间 set_time_limit(0); //note 取得样式文件内容 $styleFileContent = file_get_contents('images/style.css'); //not...2013-10-04
- 这篇文章主要为大家详细介绍了Visual Studio 2015下载和安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- PHP代码如下:复制代码 代码如下:if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) { $upload_file = $_FILES['Filedata']; $fil...2013-10-04
C#中图片旋转和翻转(RotateFlipType)用法分析
这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下...2020-06-25- 这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29
- ps软件是现在很多人比较喜欢的,有着非常不错的使用效果,这次文章就给大家介绍下ps怎么制作图片阴影效果,还不知道制作方法的赶紧来看看。 ps图片阴影效果怎么做方法/...2017-07-06
- 本文主要介绍用C#实现图片转换成字节流,字节流转换成图片,并根据图片路径返回图片的字节流,有需要的朋友可以参考下...2020-06-25
- 这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10