基于phpexcel的php导出excel类,附注释和调用方法
以前我们写过一个PHP通过链式操作将数据输出excel(csv)格式,http://www.111cn.net/phper/php-cy/72796.htm,现在我们来学习写一个php基于phpexcel制作的导出excel类
代码如下 | 复制代码 |
<?php /* *@使用方法。 *引入类库。 *$excel = news excelC(); *$excel->fileName = '文件名称';//设置文件名称,默认为时间戳 *$excel->format = '2007';//文件类型,默认为2007,其他为excel5 *$record = array( 'delKey'=>array('id','addTime','status'),//如果数据$data中有不需要显示的列,可以在此说明。删除不需要导出的键值 'sort' =>array( 'keyName'=>array('subjectName','flag'),//按keyName列排序,如果不存在则不排序。 //'reorder'=>'DESC',//排序方式,DESC为倒序,ASC为正序。如果keyName存在则排序keyName,如果不存在则按数组的键名排序,如果reorder不存在则不排序 ),//排序 如果sort存在则排序,否则不排序,如果keyName存在则按设置排序,如果不存在则按字符排序,如果reorder不存在或为空或为DES则正序,等于DESC为倒序。 'excelStyle' =>array( 'setName'=>'Arial',//字体样式 'setSize'=>'12',//字体大小 ),//表格全局样式 'title' =>array('tableName'=>'学科列表','center'=>true,'direction'=>'right','merge'=>'2','setSize'=>'30'),//标题,center垂直,direction为合并方向。right,left,up,down。 merge为合并几个单元格,setSize为字体大小 'data' =>array( array('tableName'=>'科目名称','width'=>'30','setName'=>'宋体','setSize'=>'20','background'=>'red','textColor'=>'white','bold'=>true,'underline'=>true,'borderColor'=>'cyan','center'=>true,), array('tableName'=>'学科','width'=>'50','center'=>true),//颜色表是:black,white,red,green,blue,yellow,magenta,cyan ),//表名称 tableName为名称,width为表格宽度,setName为字体样式,background为背景颜色,textColor为字体颜色,bold为加粗,underline为下划线,borderColor为边框颜色. 'merge' =>array( //'flag'=>array('keyword'=>'初','direction'=>'right','merge'=>'2'),merge的键值为需要处理数据数组的键值,keyword为如果存在此关键字才执行其他样式操作,如果keyword不存在则执行所有键值为flag的单元格。 'all'=>array('width'=>'30','setName'=>'宋体','setSize'=>'20','background'=>'red','textColor'=>'white','bold'=>true,'underline'=>true,'borderColor'=>'cyan','center'=>true,), ),// );//导出配置 *$excel->export($record,$data);//$record为导出配置,$data为数据库的数据,$data可以为数组,也可以为对象。 * * * */ $address = dirname(dirname(__FILE__)).'/PHPExcel'; include $address.'/PHPExcel.class.php'; include $address.'/PHPExcel/Writer/Excel2007.php'; include $address.'/PHPExcel/Writer/Excel5.php'; include $address.'/PHPExcel/IOFactory.php'; /**************************** *生成excel文档。 */ class excelC { public $format = '2007';//转换格式,默认为2007版本,其他版本,请输入不是2007的数字 public $fileName;//文件名称默认为时间戳。 private $objExcel; private $letters; public function __construct() { $this->fileName = time(); $this->fileTitle = '导出数据'; $this->objExcel = new PHPExcel(); $this->letters = $this->letter(); } //导出excel的属性 private function attribute(){ $this->objExcel->getProperties()->setCreator("力达行有限公司");//创建人 $this->objExcel->getProperties()->setLastModifiedBy("力达行有限公司");//最后修改人 $this->objExcel->getProperties()->setTitle("导出数据");//标题 $this->objExcel->getProperties()->setSubject("导出数据");//题目 $this->objExcel->getProperties()->setDescription("数据导出");//描述 $this->objExcel->getProperties()->setKeywords("office 导出");//关键字 $this->objExcel->getProperties()->setCategory("excel");//种类 } //设置表(如果只有一个sheet可以忽略该函数,将默认创建。) private function sheet(){ $this->objExcel->setActiveSheetIndex(0);//设置当前的表 $this->objExcel->getActiveSheet()->setTitle('excel');//设置表名称。 } /*************************** *导出excel *@attr $record为表头及样式设置 *@attr $data为需要导出的数据 */ public function export($record=array(),$data=array()){ if(!$data)return false; if(!is_array($record))return false;//表样式及其他设置 //处理获取到的数据 $data = $this->maniData($record,$data); //获取整体样式。 $this->excelData($record,$data); //$this->objExcel->getActiveSheet()->setCellValue('A1', '季度'); $this->down();//导出下载 } /* *处理表格 */ private function excelData(&$record,&$data){ $this->attribute();//设置属性 $this->sheet();//设置表 $this->whole($record);//设置整体样式 $this->tableHeader($record);//设置表格头。 $this->tableContent($record,$data);//设置表格 $this->excelTitle($record,2);//设置标题 } /* *设置表格整体样式 */ private function whole(&$record){ if(!array_key_exists('excelStyle',$record))return false; $excelStyle = $record['excelStyle']; $default = $this->objExcel->getDefaultStyle(); if(array_key_exists('setName',$excelStyle)) $default->getFont()->setName($excelStyle['setName']);//设置字体样式 if(array_key_exists('setSize',$excelStyle)) $default->getFont()->setSize($excelStyle['setSize']);//设置字体大小 } /* *设置标题 */ private function excelTitle($record,$num){ $titleL = $this->letters[0]; if(!array_key_exists('title',$record))return false; $this->appOintStyle($titleL ,1,$record['title']); } /* *设置表格头。 */ private function tableHeader($record){ if(!array_key_exists('data',$record))return false; $objExcel = $this->objExcel; $letters = $this->letters; if(!is_array($record['data']))return false; $i = 0; $hang = 2; foreach($record['data'] as $k=>$v){ $this->appOintStyle($letters[$i],$hang,$v); $i++; } } private function setCellValue($letter,$data){ if(@$data) $this->objExcel->getActiveSheet()->setCellValue($letter, $data);//填充值 return $this; } private function getColumnDimension($letter,$data){ if(@$data) $this->objExcel->getActiveSheet()->getColumnDimension($letter)->setWidth($data);//设置宽度 return $this; } private function setName($letter,$data){ if(@$data) $this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->setName($data);//设置字体 return $this; } private function setSize($letter,$data){ if(@$data) $this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->setSize($data);//设置字体大小 return $this; } private function background($letter,$data){ if(@$data){ $this->objExcel->getActiveSheet()->getStyle($letter)->getFill()->getStartColor()->setARGB($this->backColor($data)); $this->objExcel->getActiveSheet()->getStyle($letter)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//设置背景色样式,无样式将不显示背景色。 } return $this; } private function textColor($letter,$data){ if(@$data){ $this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->getColor()->setARGB($data);//字体颜色 } return $this; } private function setBold($letter,$data){ if(@$data){ $this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->setBold(true);//加粗 } return $this; } private function setUnderline($letter,$data){ if(@$data){ $this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);//下划线 } return $this; } private function border($letter,$data){ if(@$data){ $styleThinBlackBorderOutline = array( 'borders' => array ( 'outline' => array ( 'style' => PHPExcel_Style_Border::BORDER_THIN, //设置border样式 'color' => array ('argb' => $data), //设置border颜色 ), ), ); $this->objExcel->getActiveSheet()->getStyle($letter)->applyFromArray($styleThinBlackBorderOutline); } return $this; } /* *合并 */ private function mergeCells($letters,$hang,$direction,$merge){ $merge = $merge-1; if($merge > 0 && $direction){ //print_r($this->letters); $l = array_flip($this->letters); $ln = $l[$letters]; switch ($direction) { case 'left': $signal = $this->letters[($ln-$merge)].$hang.':'.$letters.$hang; break; case 'right': $signal = $letters.$hang.':'.$this->letters[($ln+$merge)].$hang; break; case 'up': $signal = $letters.($hang-$merge).':'.$letters.$hang; break; case 'down': $signal = $letters.$hang.':'.$letters.($hang+$merge); break; default: $signal = ''; } if($signal){ $this->objExcel->getActiveSheet()->mergeCells($signal); } } return $this; } /* *垂直居中 */ private function setVertical($letter,$data){ if($data){ $this->objExcel->getActiveSheet()->getStyle($letter)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->objExcel->getActiveSheet()->getStyle($letter)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } return $this; } /* *设置颜色 */ private function backColor($color){ $array = array( 'black' => 'FF000000', // System Colour #1 - Black 'white' => 'FFFFFFFF', // System Colour #2 - White 'red' => 'FFFF0000', // System Colour #3 - Red 'green' => 'FF00FF00', // System Colour #4 - Green 'blue' => 'FF0000FF', // System Colour #5 - Blue 'yellow' => 'FFFFFF00', // System Colour #6 - Yellow 'magenta' => 'FFFF00FF', // System Colour #7- Magenta 'cyan' => 'FF00FFFF', // System Colour #8- Cyan ); if(array_key_exists($color,$array)){ return $array[$color]; } else { return false; } } /* *设置表 */ private function tableContent(&$record,&$data){ $objExcel = $this->objExcel; $letters = $this->letters; if(array_key_exists('merge',$record)) $merge = $record['merge']; else $merge = ''; $hang = 2; foreach($data as $k=>$v){ $i=0; $hang++; foreach($v as $kk=>$vv){ $this->setCellValue($letters[$i].$hang, $vv);//设置内容 $this->Appoint($kk,$vv,$letters[$i],$hang,$merge); $i++; } } } /* *设置表指定样式 */ private function Appoint($kk,$vv,$letters,$hang,$merge){ if(!$merge)return false; if(array_key_exists($kk,$merge)){ $v = $merge[$kk]; if(array_key_exists('keyword',$v)){ if(strpos($vv,$v['keyword']) > -1){ $this->appOintStyle($letters,$hang,$v); } } else { $this->appOintStyle($letters,$hang,$v); } } else if(array_key_exists('all',$merge)){ $v = $merge['all']; if(array_key_exists('keyword',$v)){ if(strpos($vv,$v['keyword']) > -1){ $this->appOintStyle($letters,$hang,$v); } } else { $this->appOintStyle($letters,$hang,$v); } } } /* *终极样式 */ private function appOintStyle($letters,$hang,$v){ $this ->setCellValue($letters.$hang,@$v['tableName']) ->getColumnDimension($letters,@$v['width']) ->setName($letters.$hang,@$v['setName']) ->setSize($letters.$hang,@$v['setSize']) ->background($letters.$hang,@$v['background']) ->textColor($letters.$hang,$this->backColor(@$v['textColor'])) ->setBold($letters.$hang,@$v['bold']) ->setUnderline($letters.$hang,@$v['underline']) ->border($letters.$hang,$this->backColor(@$v['borderColor'])) ->mergeCells($letters,$hang,@$v['direction'],@$v['merge']) ->setVertical($letters.$hang,@$v['center']); } /* *应为字母列表 */ public function letter(){ return array('A','B','C','D','F','G','H','I','G','K','L','M','N','O','P','Q','R','S','T','U','V','W','H','Y','Z'); } /**************************** *处理数据,排序及删除字段 */ private function maniData($record,$data){ if(!$data)return false; if(!is_array($record))return false;//表样式及其他设置 $data = $this->objectToArray($data);//对象转数组 $delKey = (array_key_exists('delKey',$record))?$record['delKey']:'';//是否删除关键字 $sort = (array_key_exists('sort',$record))?$record['sort']:'';//是否排序 $data = $this->delSort($data,$delKey,$sort); return $data; } /**************************** *对象转数组 */ private function objectToArray($data){ if(!$data)return false; $data = (array)$data; foreach($data as $k=>$v){ if(is_object($v) || is_array($v)){ $data[$k] = (array)$this->objectToArray($v); } } return $data; } /**************************** *删除键值,并排序 */ private function delSort($data,$delKey='',$sort=''){ if(!$data)return false; $array = array(); foreach($data as $k=>$v){ //删除数据中的某个键值 $delData = $this->delData($v,$delKey); //按设定键值排序 $sortData = $this->sortData($delData,$sort); $array[$k] = $sortData; } return $array; } /**************************** *删除键值 */ public function delData($data,&$delKey){ if($delKey){ foreach($delKey as $delVal){ if(array_key_exists($delVal,$data))//判断键值是否存在 unset($data[$delVal]);//清除键名。 } } return $data; } /**************************** *键值排序 */ public function sortData($data,&$sort){ $array = array(); if($sort){ if(array_key_exists('keyName',$sort)){ $keyName = $sort['keyName']; if(array_key_exists('reorder',$sort)){ if($sort['reorder'] == 'DESC'){ krsort($keyName); } else if($sort['reorder'] == 'ASC'){ ksort($keyName); } } foreach($keyName as $vn){ $array[$vn] = (array_key_exists($vn,$data))?$data[$vn]:''; } } else { if(array_key_exists('reorder',$sort)){ if($sort['reorder'] == 'DESC'){ krsort($data); } else if($sort['reorder'] == 'ASC'){ ksort($data); } $array = $data; } } } return $array; } //导出下载 private function down(){ if($this->format == '2007'): header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); $excel = 'Excel2007'; else: header('Content-Type: application/vnd.ms-excel'); $excel = 'Excel5'; endif; header("Content-Disposition: attachment; filename="$this->fileName""); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($this->objExcel, $excel); $objWriter->save('php://output'); } } |
我在phpclasses.org上面偶然发现一个很有用的,由Bakr Alsharif开发的可以帮助开发者基于皮肤像素点来检测图片裸照的类文件.
它会分析在一张图片的不同部分使用的颜色,并决定其是否匹配人类皮肤颜色的色调.
作为分析的结果,他会返回一个反映图片包含裸露的可能性的分值.
此外,他还可以输出被分析的图片,上面对使用给定颜色的肤色的像素进行了标记.
当前它可以对PNG,GIF和JPEG图片进行分析.
PHP
下面展示了如何使用这个PHP类.
让我们先从包含裸体过滤器,nf.php文件开始.
代码如下 | 复制代码 |
include ('nf.php'); |
接下来,创建一个新的名叫ImageFilter的类,然后把它放到一个叫做$filter的变量中.
代码如下 | 复制代码 |
$filter = new ImageFilter; |
获取图片的分值并将其放到一个$score变量中.
$score = $filter -> GetScore($_FILES['img']['tmp_name']);
如果图片分值大于或等于60%,那就展示一条(告警)消息.
代码如下 | 复制代码 |
if($score >= 60){ /*Message*/ } |
下面是所有的PHP代码:
代码如下 | 复制代码 |
<?php /*Include the Nudity Filter file*/ include ('nf.php'); /*Create a new class called $filter*/ $filter = new ImageFilter; /*Get the score of the image*/ $score = $filter -> GetScore($_FILES['img']['tmp_name']); /*If the $score variable is set*/ if (isset($score)) { /*If the image contains nudity, display image score and message. Score value if more than 60%, it is considered an adult image.*/ if ($score >= 60) { echo "Image scored " . $score . "%, It seems that you have uploaded a nude picture."; /*If the image doesn't contain nudity*/ } else if ($score < 0) { echo "Congratulations, you have uploaded an non-nude image."; } } ?> |
标记语言
我们可以使用一个基础的HTML表单上传图片.
代码如下 | 复制代码 |
<form method="post" enctype="multipart/form-data" action="<?php echo $SERVER['PHP_SELF'];?> "> Upload image: <input type="file" name="img" id="img" /> <input type="submit" value="Sumit Image" /> </form> |
总结
请记得,PHP不能够检测所有的裸体图片,所以不完全可信.我希望你觉得这还有点用处.
对于这种问题,我们还是直接上代码来的快,大伙拿去直接用吧,不要谢我。
代码如下 | 复制代码 |
public function utf8_unicode($str) { $unicode = array(); $values = array(); $lookingFor = 1; for ($i = 0; $i < strlen( $str ); $i++ ) { $thisValue = ord( $str[ $i ] ); if ( $thisValue < ord('A') ) { // exclude 0-9 if ($thisValue >= ord('0') && $thisValue <= ord('9')) { // number $unicode[] = chr($thisValue); } else { $unicode[] = '%'.dechex($thisValue); } } else { if ( $thisValue < 128) { $unicode[] = $str[ $i ]; } else { if ( count( $values ) == 0 ) { $lookingFor = ( $thisValue < 224 ) ? 2 : 3; } $values[] = $thisValue; if ( count( $values ) == $lookingFor ) { $number = ( $lookingFor == 3 ) ? ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ): ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 ); $number = dechex($number); $unicode[] = (strlen($number)==3)?"u0".$number:"u".$number; $values = array(); $lookingFor = 1; } // if } // if } } // for return implode("",$unicode); } |
工作中经常会遇到产品运营让导出一些简单的比较规范的数据,这时候要是有一个简单的方法可以用就简单多了。下面是我的一个输出简单的excel(csv)的方法类,用到了链式操作。说到链式操作,在jquery中可能经常用到,是不是也感觉到链式操作用起来很爽,我们也在这个类中实现下链式操作。
其实链式操作很简单的,就是在前一个类方法最后返回一个该类的对象($this),提供给下一个方法调用。
代码如下 | 复制代码 |
<?php class Array2csv{ /* *@var string $ext 扩展名 */ private $ext = 'csv'; /** * @desc构造方法 * @param string $filename 要输出的文件名 * @param string $ext 扩展名 */ public function __construct($filename,$ext=null){ ob_start(); header("Content-type: text/html;charset=utf-8"); header("Content-type: application/x-csv"); if(PHP_SAPI == 'cli') echo "CLI模式下不能导出csv文件r"; $this->ext = $ext === null ? $this->ext : $ext; header("Content-Disposition: attachment;filename=".$filename.".".$this->ext); ob_flush(); return $this; } /** * @desc 打印excel标题 * @param array $title 要输出的标题行 * @param object Array2csv 对象本身 */ public function title($title){ $title = implode(",", $title); echo $title."n"; return $this; } /** * @desc 打印一行excel内容 * @param array $body 要输出的内容 * @param object Array2csv 对象本身 */ public function body($body){ if(!is_array($body) || empty($body)) { return false; } $body = implode(",", $body); echo $body."n"; return $this; } /** * @desc 打印多行excel内容 * @param array $bodyArr 要输出的多行内容 * @param object Array2csv 对象本身 */ public function multiBody($bodyArr){ if(!is_array($bodyArr) || empty($bodyArr)) return false; foreach ($bodyArr as $key => $value) { if(is_array($value)){ $value = implode(",", $value); echo $value."n"; } } return $this; } } $test = new Array2csv('test'); $arr = array( array('luluyrt@163.com','奔跑的Man1','奔跑的userman'), array('luluyrt@163.com','奔跑的Man2','奔跑的userman'), array('luluyrt@163.com','奔跑的Man3','奔跑的userman'), array('luluyrt@163.com','奔跑的Man4','奔跑的userman'), array('luluyrt@163.com','奔跑的Man5','奔跑的userman'), array('luluyrt@163.com','奔跑的Man6','奔跑的userman') ); $test->title(array('测试','呵呵','哈哈'))->body(array('100,sadkl','sdsas','sdvsvdd分'))->multiBody($arr); |
输出的csv如下图所示:
但是这里面有个问题,从编码是utf-8的数据库中取出来的汉字输出excel(csv)会乱码,这个时候你要注意,要在获取数据之前设置数据库的编码,比如说我的需要的是utf-8进行输出,这个时候就要
$link = mysqli_connect($host, $user, $passwd, $db);
mysqli_query($link, "set names utf8");
进行编码转换方可正常显示,下面是我的数据库信息和编码前后效果:
数据库信息
设置数据库编码前后的对比
以下是本人在工作中整理总结的超实用的php函数,值得收藏,现在分享出来供大家学习参考。函数源码中附和注释和使用说明,希望对大家有用。1、PHP加密解密
PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密。
代码如下 | 复制代码 |
function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode ($string), MCRYPT_MODE_CBC, md5(md5($key))), "12"); return $decrypted; }else{ $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); return $encrypted; } } |
使用方法如下:
/
代码如下 | 复制代码 |
/以下是将字符串“Helloweba欢迎您”分别加密和解密 //加密: echo encryptDecrypt('password', 'Helloweba欢迎您',0); |
//解密:
代码如下 | 复制代码 |
echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1); |
2、PHP生成随机字符串
当我们需要生成一个随机名字,临时密码等字符串时可以用到下面的函数:
代码如下 | 复制代码 |
function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } |
使用方法如下:
代码如下 | 复制代码 |
echo generateRandomString(20); |
3、PHP获取文件扩展名(后缀)
以下函数可以快速获取文件的扩展名即后缀。
代码如下 | 复制代码 |
function getExtension($filename){ $myext = substr($filename, strrpos($filename, '.')); return str_replace('.','',$myext); } |
使用方法如下:
代码如下 | 复制代码 |
$filename = '我的文档.doc'; echo getExtension($filename); |
4、PHP获取文件大小并格式化
以下使用的函数可以获取文件的大小,并且转换成便于阅读的KB,MB等格式。
代码如下 | 复制代码 |
function formatSize($size) { $sizes = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"); if ($size == 0) { return('n/a'); } else { return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]); } } |
使用方法如下:
代码如下 | 复制代码 |
$thefile = filesize('test_file.mp3'); echo formatSize($thefile); |
5、PHP替换标签字符
有时我们需要将字符串、模板标签替换成指定的内容,可以用到下面的函数:
代码如下 | 复制代码 |
function stringParser($string,$replacer){ $result = str_replace(array_keys($replacer), array_values($replacer),$string); return $result; } |
//使用方法如下
代码如下 | 复制代码 |
$string = 'The {b}anchor text{/b} is the {b}actual word{/b} or words used {br}to describe the link {br}itself'; $replace_array = array('{b}' => '<b>','{/b}' => '</b>','{br}' => '<br >'); echo stringParser($string,$replace_array);</br > |
6、PHP列出目录下的文件名
如果你想列出目录下的所有文件,使用以下代码即可:
代码如下 | 复制代码 |
function listDirFiles($DirPath){ if($dir = opendir($DirPath)){ while(($file = readdir($dir))!== false){ if(!is_dir($DirPath.$file)) { echo "filename: $file<br >"; } } } } |
//使用方法如下
代码如下 | 复制代码 |
listDirFiles('home/some_folder/'); |
7、PHP获取当前页面URL
以下函数可以获取当前页面的URL,不管是http还是https。
代码如下 | 复制代码 |
function curPageURL() { $pageURL = 'http'; if (!empty($_SERVER['HTTPS'])) {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER ["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } |
//使用方法如下
代码如下 | 复制代码 |
echo curPageURL(); |
8、PHP强制下载文件
有时我们不想让浏览器直接打开文件,如PDF文件,而是要直接下载文件,那么以下函数可以强制下载文件,函数中使用了application/octet-stream头类型。
代码如下 | 复制代码 |
function download($filename){ if ((isset($filename))&&(file_exists($filename))){ header("Content-length: ".filesize($filename)); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . $filename . '"'); readfile("$filename"); } else { echo "Looks like file does not exist!"; } } |
//使用方法如下
代码如下 | 复制代码 |
download('/down/test_45f73e852.zip'); |
9、PHP截取字符串长度
我们经常会遇到需要截取字符串(含中文汉字)长度的情况,比如标题显示不能超过多少字符,超出的长度用…表示,以下函数可以满足你的需求。
代码如下 | 复制代码 |
/* Utf-8、gb2312都支持的汉字截取函数 cut_str(字符串, 截取长度, 开始长度, 编码); 编码默认为 utf-8 开始长度默认为 0 */ function cutStr($string, $sublen, $start = 0, $code = 'UTF-8'){ if($code == 'UTF-8'){ $pa = "/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/"; preg_match_all($pa, $string, $t_string); if(count($t_string[0]) - $start > $sublen) return join('', array_slice ($t_string[0], $start, $sublen))."..."; return join('', array_slice($t_string[0], $start, $sublen)); }else{ $start = $start*2; $sublen = $sublen*2; $strlen = strlen($string); $tmpstr = ''; for($i=0; $i<$strlen; $i++){ if($i>=$start && $i<($start+$sublen)){ if(ord(substr($string, $i, 1))>129){ $tmpstr.= substr($string, $i, 2); }else{ $tmpstr.= substr($string, $i, 1); } } if(ord(substr($string, $i, 1))>129) $i++; } if(strlen($tmpstr)<$strlen ) $tmpstr.= "..."; return $tmpstr; } } |
//使用方法如下
代码如下 | 复制代码 |
$str = "jQuery插件实现的加载图片和页面效果"; echo cutStr($str,16); |
10、PHP获取客户端真实IP
我们经常要用数据库记录用户的IP,以下代码可以获取客户端真实的IP:
/
代码如下 | 复制代码 |
/获取用户真实IP function getIp() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return ($ip); } |
//使用方法如下
代码如下 | 复制代码 |
echo getIp(); |
11、PHP防止SQL注入
我们在查询数据库时,出于安全考虑,需要过滤一些非法字符防止SQL恶意注入,请看一下函数:
代码如下 | 复制代码 |
function injCheck($sql_str) { $check = preg_match('/select|insert|update|delete|'|/*|*|../|./|union|into |load_file|outfile/', $sql_str); if ($check) { echo '非法字符!!'; exit; } else { return $sql_str; } } |
//使用方法如下
代码如下 | 复制代码 |
echo injCheck('1 or 1=1'); |
12、PHP页面提示与跳转
我们在进行表单操作时,有时为了友好需要提示用户操作结果,并跳转到相关页面,请看以下函数:
代码如下 | 复制代码 |
function message($msgTitle,$message,$jumpUrl){ $str = '<!DOCTYPE HTML>'; $str .= '<html>'; $str .= '<head>'; $str .= '<meta charset="utf-8">'; $str .= '<title>页面提示</title>'; $str .= '<style type="text/css">'; $str .= '*{margin:0; padding:0}a{color:#369; text-decoration:none;}a:hover{text-decoration:underline}body{height:100%; font:12px/18px Tahoma, Arial, sans-serif; color:#424242; background:#fff}.message{width:450px; height:120px; margin:16% auto; border:1px solid #99b1c4; background:#ecf7fb}.message h3{height:28px; line-height:28px; background:#2c91c6; text-align:center; color:#fff; font-size:14px}.msg_txt{padding:10px; margin-top:8px}.msg_txt h4{line-height:26px; font-size:14px}.msg_txt h4.red{color:#f30}.msg_txt p{line-height:22px}'; $str .= '</style>'; $str .= '</head>'; $str .= '<body>'; $str .= '<div>'; $str .= '<h3>'.$msgTitle.'</h3>'; $str .= '<div>'; $str .= '<h4>'.$message.'</h4>'; $str .= '<p>系统将在 <span style="color:blue;font-weight:bold">3</span> 秒后自动跳转,如果不想等待,直接点击 <a href="{$jumpUrl}">这里</a> 跳转</p>'; $str .= "<script>setTimeout('location.replace('".$jumpUrl."')',2000)</script>"; $str .= '</div>'; $str .= '</div>'; $str .= '</body>'; $str .= '</html>'; echo $str; } |
//使用方法如下
代码如下 | 复制代码 |
message('操作提示','操作成功!','http://www.helloweba.com/'); |
13、PHP计算时长
我们在处理时间时,需要计算当前时间距离某个时间点的时长,如计算客户端运行时长,通常用hh:mm:ss表示。
代码如下 | 复制代码 |
function changeTimeType($seconds) { if ($seconds > 3600) { $hours = intval($seconds / 3600); $minutes = $seconds % 3600; $time = $hours . ":" . gmstrftime('%M:%S', $minutes); } else { $time = gmstrftime('%H:%M:%S', $seconds); } return $time; } |
//使用方法如下
代码如下 | 复制代码 |
$seconds = 3712; echo changeTimeType($seconds); |
相关文章
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
- 单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
- javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21- 本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23
- mysql锁定单个表的方法 复制代码 代码如下:mysql>lock table userstat read; mysql>unlock tables; 页级的典型代表引擎为BDB。 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。 行级的典型代表引擎为INN...2014-05-31